/* Generated by Cython 0.20.1post0 (Debian 0.20.1+git90-g0e6e38e-1ubuntu2) on Tue Sep 15 10:25:44 2015 */

#define PY_SSIZE_T_CLEAN
#ifndef CYTHON_USE_PYLONG_INTERNALS
#ifdef PYLONG_BITS_IN_DIGIT
#define CYTHON_USE_PYLONG_INTERNALS 0
#else
#include "pyconfig.h"
#ifdef PYLONG_BITS_IN_DIGIT
#define CYTHON_USE_PYLONG_INTERNALS 1
#else
#define CYTHON_USE_PYLONG_INTERNALS 0
#endif
#endif
#endif
#include "Python.h"
#ifndef Py_PYTHON_H
    #error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x02040000
    #error Cython requires Python 2.4+.
#else
#define CYTHON_ABI "0_20_1post0"
#include <stddef.h> /* For offsetof */
#ifndef offsetof
#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
#endif
#if !defined(WIN32) && !defined(MS_WINDOWS)
  #ifndef __stdcall
    #define __stdcall
  #endif
  #ifndef __cdecl
    #define __cdecl
  #endif
  #ifndef __fastcall
    #define __fastcall
  #endif
#endif
#ifndef DL_IMPORT
  #define DL_IMPORT(t) t
#endif
#ifndef DL_EXPORT
  #define DL_EXPORT(t) t
#endif
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#ifndef Py_HUGE_VAL
  #define Py_HUGE_VAL HUGE_VAL
#endif
#ifdef PYPY_VERSION
#define CYTHON_COMPILING_IN_PYPY 1
#define CYTHON_COMPILING_IN_CPYTHON 0
#else
#define CYTHON_COMPILING_IN_PYPY 0
#define CYTHON_COMPILING_IN_CPYTHON 1
#endif
#if CYTHON_COMPILING_IN_PYPY
#define Py_OptimizeFlag 0
#endif
#if PY_VERSION_HEX < 0x02050000
  typedef int Py_ssize_t;
  #define PY_SSIZE_T_MAX INT_MAX
  #define PY_SSIZE_T_MIN INT_MIN
  #define PY_FORMAT_SIZE_T ""
  #define CYTHON_FORMAT_SSIZE_T ""
  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_As_int(o)
  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
                                (PyErr_Format(PyExc_TypeError, \
                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
                                 (PyObject*)0))
  #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
                                  !PyComplex_Check(o))
  #define PyIndex_Check __Pyx_PyIndex_Check
  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
  #define __PYX_BUILD_PY_SSIZE_T "i"
#else
  #define __PYX_BUILD_PY_SSIZE_T "n"
  #define CYTHON_FORMAT_SSIZE_T "z"
  #define __Pyx_PyIndex_Check PyIndex_Check
#endif
#if PY_VERSION_HEX < 0x02060000
  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
  #define PyVarObject_HEAD_INIT(type, size) \
          PyObject_HEAD_INIT(type) size,
  #define PyType_Modified(t)
  typedef struct {
     void *buf;
     PyObject *obj;
     Py_ssize_t len;
     Py_ssize_t itemsize;
     int readonly;
     int ndim;
     char *format;
     Py_ssize_t *shape;
     Py_ssize_t *strides;
     Py_ssize_t *suboffsets;
     void *internal;
  } Py_buffer;
  #define PyBUF_SIMPLE 0
  #define PyBUF_WRITABLE 0x0001
  #define PyBUF_FORMAT 0x0004
  #define PyBUF_ND 0x0008
  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
#endif
#if PY_MAJOR_VERSION < 3
  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
  #define __Pyx_DefaultClassType PyClass_Type
#else
  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
  #define __Pyx_DefaultClassType PyType_Type
#endif
#if PY_VERSION_HEX < 0x02060000
  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
#endif
#if PY_MAJOR_VERSION >= 3
  #define Py_TPFLAGS_CHECKTYPES 0
  #define Py_TPFLAGS_HAVE_INDEX 0
#endif
#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
#endif
#if PY_VERSION_HEX < 0x02060000
  #define Py_TPFLAGS_HAVE_VERSION_TAG 0
#endif
#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT)
  #define Py_TPFLAGS_IS_ABSTRACT 0
#endif
#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE)
  #define Py_TPFLAGS_HAVE_FINALIZE 0
#endif
#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
  #define CYTHON_PEP393_ENABLED 1
  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
                                              0 : _PyUnicode_Ready((PyObject *)(op)))
  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
  #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
#else
  #define CYTHON_PEP393_ENABLED 0
  #define __Pyx_PyUnicode_READY(op)       (0)
  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
  #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
#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
#define __Pyx_PyString_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
#else
  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyBaseString_Type            PyUnicode_Type
  #define PyStringObject               PyUnicodeObject
  #define PyString_Type                PyUnicode_Type
  #define PyString_Check               PyUnicode_Check
  #define PyString_CheckExact          PyUnicode_CheckExact
#endif
#if PY_VERSION_HEX < 0x02060000
  #define PyBytesObject                PyStringObject
  #define PyBytes_Type                 PyString_Type
  #define PyBytes_Check                PyString_Check
  #define PyBytes_CheckExact           PyString_CheckExact
  #define PyBytes_FromString           PyString_FromString
  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
  #define PyBytes_FromFormat           PyString_FromFormat
  #define PyBytes_DecodeEscape         PyString_DecodeEscape
  #define PyBytes_AsString             PyString_AsString
  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
  #define PyBytes_Size                 PyString_Size
  #define PyBytes_AS_STRING            PyString_AS_STRING
  #define PyBytes_GET_SIZE             PyString_GET_SIZE
  #define PyBytes_Repr                 PyString_Repr
  #define PyBytes_Concat               PyString_Concat
  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
#endif
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
  #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
#else
  #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \
                                         PyString_Check(obj) || PyUnicode_Check(obj))
  #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
#endif
#if PY_VERSION_HEX < 0x02060000
  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
#endif
#ifndef PySet_CheckExact
  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
#endif
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
#if PY_MAJOR_VERSION >= 3
  #define PyIntObject                  PyLongObject
  #define PyInt_Type                   PyLong_Type
  #define PyInt_Check(op)              PyLong_Check(op)
  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
  #define PyInt_FromString             PyLong_FromString
  #define PyInt_FromUnicode            PyLong_FromUnicode
  #define PyInt_FromLong               PyLong_FromLong
  #define PyInt_FromSize_t             PyLong_FromSize_t
  #define PyInt_FromSsize_t            PyLong_FromSsize_t
  #define PyInt_AsLong                 PyLong_AsLong
  #define PyInt_AS_LONG                PyLong_AS_LONG
  #define PyInt_AsSsize_t              PyLong_AsSsize_t
  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
  #define PyNumber_Int                 PyNumber_Long
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyBoolObject                 PyLongObject
#endif
#if PY_VERSION_HEX < 0x030200A4
  typedef long Py_hash_t;
  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
#else
  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
#endif
#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
  #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
  #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
#else
  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
#endif
#if PY_VERSION_HEX < 0x02050000
  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
#else
  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
#endif
#if PY_VERSION_HEX < 0x02050000
  #define __Pyx_NAMESTR(n) ((char *)(n))
  #define __Pyx_DOCSTR(n)  ((char *)(n))
#else
  #define __Pyx_NAMESTR(n) (n)
  #define __Pyx_DOCSTR(n)  (n)
#endif
#ifndef CYTHON_INLINE
  #if defined(__GNUC__)
    #define CYTHON_INLINE __inline__
  #elif defined(_MSC_VER)
    #define CYTHON_INLINE __inline
  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define CYTHON_INLINE inline
  #else
    #define CYTHON_INLINE
  #endif
#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
#ifdef NAN
#define __PYX_NAN() ((float) NAN)
#else
static CYTHON_INLINE float __PYX_NAN() {
  /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and
   a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is
   a quiet NaN. */
  float value;
  memset(&value, 0xFF, sizeof(value));
  return value;
}
#endif
#ifdef __cplusplus
template<typename T>
void __Pyx_call_destructor(T* x) {
    x->~T();
}
#endif


#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
#else
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
#endif

#ifndef __PYX_EXTERN_C
  #ifdef __cplusplus
    #define __PYX_EXTERN_C extern "C"
  #else
    #define __PYX_EXTERN_C extern
  #endif
#endif

#if defined(WIN32) || defined(MS_WINDOWS)
#define _USE_MATH_DEFINES
#endif
#include <math.h>
#define __PYX_HAVE__pyparma__ppl
#define __PYX_HAVE_API__pyparma__ppl
#include "string.h"
#include "stdio.h"
#include "gmp.h"
#include "stdint.h"
#include "gmpxx.h"
#include "ppl.hh"
#include "ios"
#include "new"
#include "stdexcept"
#include "typeinfo"
#include "ppl_shim.hh"
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

#ifdef PYREX_WITHOUT_ASSERTIONS
#define CYTHON_WITHOUT_ASSERTIONS
#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
typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/

#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0
#define __PYX_DEFAULT_STRING_ENCODING ""
#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#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 char* __Pyx_PyObject_AsString(PyObject*);
static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
#define __Pyx_PyBytes_FromString        PyBytes_FromString
#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
#if PY_MAJOR_VERSION < 3
    #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#else
    #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
#endif
#define __Pyx_PyObject_AsSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_FromUString(s)  __Pyx_PyObject_FromString((const char*)s)
#define __Pyx_PyBytes_FromUString(s)   __Pyx_PyBytes_FromString((const char*)s)
#define __Pyx_PyByteArray_FromUString(s)   __Pyx_PyByteArray_FromString((const char*)s)
#define __Pyx_PyStr_FromUString(s)     __Pyx_PyStr_FromString((const char*)s)
#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((const char*)s)
#if PY_MAJOR_VERSION < 3
static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
{
    const Py_UNICODE *u_end = u;
    while (*u_end++) ;
    return u_end - u - 1;
}
#else
#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen
#endif
#define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
#if CYTHON_COMPILING_IN_CPYTHON
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#endif
#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
static int __Pyx_sys_getdefaultencoding_not_ascii;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
    PyObject* sys = NULL;
    PyObject* default_encoding = NULL;
    PyObject* ascii_chars_u = NULL;
    PyObject* ascii_chars_b = NULL;
    sys = PyImport_ImportModule("sys");
    if (sys == NULL) goto bad;
    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
    if (default_encoding == NULL) goto bad;
    if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) {
        __Pyx_sys_getdefaultencoding_not_ascii = 0;
    } else {
        const char* default_encoding_c = PyBytes_AS_STRING(default_encoding);
        char ascii_chars[128];
        int c;
        for (c = 0; c < 128; c++) {
            ascii_chars[c] = c;
        }
        __Pyx_sys_getdefaultencoding_not_ascii = 1;
        ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
        if (ascii_chars_u == NULL) goto bad;
        ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
        if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
            PyErr_Format(
                PyExc_ValueError,
                "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
                default_encoding_c);
            goto bad;
        }
    }
    Py_XDECREF(sys);
    Py_XDECREF(default_encoding);
    Py_XDECREF(ascii_chars_u);
    Py_XDECREF(ascii_chars_b);
    return 0;
bad:
    Py_XDECREF(sys);
    Py_XDECREF(default_encoding);
    Py_XDECREF(ascii_chars_u);
    Py_XDECREF(ascii_chars_b);
    return -1;
}
#endif
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
#else
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
static char* __PYX_DEFAULT_STRING_ENCODING;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
    PyObject* sys = NULL;
    PyObject* default_encoding = NULL;
    char* default_encoding_c;
    sys = PyImport_ImportModule("sys");
    if (sys == NULL) goto bad;
    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
    if (default_encoding == NULL) goto bad;
    default_encoding_c = PyBytes_AS_STRING(default_encoding);
    __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c));
    strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
    Py_DECREF(sys);
    Py_DECREF(default_encoding);
    return 0;
bad:
    Py_XDECREF(sys);
    Py_XDECREF(default_encoding);
    return -1;
}
#endif
#endif


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

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


static const char *__pyx_f[] = {
  "ppl.pyx",
};

/*--- Type declarations ---*/
struct __pyx_obj_7pyparma_3ppl_Polyhedron;
struct __pyx_obj_7pyparma_3ppl_C_Polyhedron;
struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron;
struct __pyx_obj_7pyparma_3ppl_Variable;
struct __pyx_obj_7pyparma_3ppl_Linear_Expression;
struct __pyx_obj_7pyparma_3ppl_Generator;
struct __pyx_obj_7pyparma_3ppl_Generator_System;
struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator;
struct __pyx_obj_7pyparma_3ppl_Constraint;
struct __pyx_obj_7pyparma_3ppl_Constraint_System;
struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator;
struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation;
struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation;

/* "pyparma/ppl.pyx":288
 * cdef class Constraint_System(object)
 * cdef class Constraint_System_iterator(object)
 * cdef class Polyhedron(object)             # <<<<<<<<<<<<<<
 * cdef class C_Polyhedron(Polyhedron)
 * cdef class NNC_Polyhedron(Polyhedron)
 */
struct __pyx_obj_7pyparma_3ppl_Polyhedron {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron *__pyx_vtab;
  Parma_Polyhedra_Library::Polyhedron *thisptr;
};


/* "pyparma/ppl.pyx":289
 * cdef class Constraint_System_iterator(object)
 * cdef class Polyhedron(object)
 * cdef class C_Polyhedron(Polyhedron)             # <<<<<<<<<<<<<<
 * cdef class NNC_Polyhedron(Polyhedron)
 * cdef class Poly_Gen_Relation(object)
 */
struct __pyx_obj_7pyparma_3ppl_C_Polyhedron {
  struct __pyx_obj_7pyparma_3ppl_Polyhedron __pyx_base;
};


/* "pyparma/ppl.pyx":290
 * cdef class Polyhedron(object)
 * cdef class C_Polyhedron(Polyhedron)
 * cdef class NNC_Polyhedron(Polyhedron)             # <<<<<<<<<<<<<<
 * cdef class Poly_Gen_Relation(object)
 * cdef class Poly_Con_Relation(object)
 */
struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron {
  struct __pyx_obj_7pyparma_3ppl_Polyhedron __pyx_base;
};


/* "pyparma/ppl.pyx":280
 * 
 * ### Forward declarations ###########################
 * cdef class Variable(object)             # <<<<<<<<<<<<<<
 * cdef class Linear_Expression(object)
 * cdef class Generator(object)
 */
struct __pyx_obj_7pyparma_3ppl_Variable {
  PyObject_HEAD
  Parma_Polyhedra_Library::Variable *thisptr;
};


/* "pyparma/ppl.pyx":281
 * ### Forward declarations ###########################
 * cdef class Variable(object)
 * cdef class Linear_Expression(object)             # <<<<<<<<<<<<<<
 * cdef class Generator(object)
 * cdef class Generator_System(object)
 */
struct __pyx_obj_7pyparma_3ppl_Linear_Expression {
  PyObject_HEAD
  Parma_Polyhedra_Library::Linear_Expression *thisptr;
  mpz_t temp;
};


/* "pyparma/ppl.pyx":282
 * cdef class Variable(object)
 * cdef class Linear_Expression(object)
 * cdef class Generator(object)             # <<<<<<<<<<<<<<
 * cdef class Generator_System(object)
 * cdef class Generator_System_iterator(object)
 */
struct __pyx_obj_7pyparma_3ppl_Generator {
  PyObject_HEAD
  Parma_Polyhedra_Library::Generator *thisptr;
};


/* "pyparma/ppl.pyx":283
 * cdef class Linear_Expression(object)
 * cdef class Generator(object)
 * cdef class Generator_System(object)             # <<<<<<<<<<<<<<
 * cdef class Generator_System_iterator(object)
 * cdef class Constraint(object)
 */
struct __pyx_obj_7pyparma_3ppl_Generator_System {
  PyObject_HEAD
  Parma_Polyhedra_Library::Generator_System *thisptr;
};


/* "pyparma/ppl.pyx":284
 * cdef class Generator(object)
 * cdef class Generator_System(object)
 * cdef class Generator_System_iterator(object)             # <<<<<<<<<<<<<<
 * cdef class Constraint(object)
 * cdef class Constraint_System(object)
 */
struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator {
  PyObject_HEAD
  struct __pyx_obj_7pyparma_3ppl_Generator_System *gs;
  gs_iterator_ptr gsi_ptr;
};


/* "pyparma/ppl.pyx":285
 * cdef class Generator_System(object)
 * cdef class Generator_System_iterator(object)
 * cdef class Constraint(object)             # <<<<<<<<<<<<<<
 * cdef class Constraint_System(object)
 * cdef class Constraint_System_iterator(object)
 */
struct __pyx_obj_7pyparma_3ppl_Constraint {
  PyObject_HEAD
  Parma_Polyhedra_Library::Constraint *thisptr;
};


/* "pyparma/ppl.pyx":286
 * cdef class Generator_System_iterator(object)
 * cdef class Constraint(object)
 * cdef class Constraint_System(object)             # <<<<<<<<<<<<<<
 * cdef class Constraint_System_iterator(object)
 * cdef class Polyhedron(object)
 */
struct __pyx_obj_7pyparma_3ppl_Constraint_System {
  PyObject_HEAD
  Parma_Polyhedra_Library::Constraint_System *thisptr;
};


/* "pyparma/ppl.pyx":287
 * cdef class Constraint(object)
 * cdef class Constraint_System(object)
 * cdef class Constraint_System_iterator(object)             # <<<<<<<<<<<<<<
 * cdef class Polyhedron(object)
 * cdef class C_Polyhedron(Polyhedron)
 */
struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator {
  PyObject_HEAD
  struct __pyx_obj_7pyparma_3ppl_Constraint_System *cs;
  cs_iterator_ptr csi_ptr;
};


/* "pyparma/ppl.pyx":291
 * cdef class C_Polyhedron(Polyhedron)
 * cdef class NNC_Polyhedron(Polyhedron)
 * cdef class Poly_Gen_Relation(object)             # <<<<<<<<<<<<<<
 * cdef class Poly_Con_Relation(object)
 * 
 */
struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation {
  PyObject_HEAD
  Parma_Polyhedra_Library::Poly_Gen_Relation *thisptr;
};


/* "pyparma/ppl.pyx":292
 * cdef class NNC_Polyhedron(Polyhedron)
 * cdef class Poly_Gen_Relation(object)
 * cdef class Poly_Con_Relation(object)             # <<<<<<<<<<<<<<
 * 
 * ####################################################
 */
struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation {
  PyObject_HEAD
  Parma_Polyhedra_Library::Poly_Con_Relation *thisptr;
};



/* "pyparma/ppl.pyx":297
 * ### Polyhedron #####################################
 * ####################################################
 * cdef class Polyhedron(object):             # <<<<<<<<<<<<<<
 *     r"""
 *     Wrapper for PPL's ``Polyhedron`` class.
 */

struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron {
  PyObject *(*_relation_with_generator)(struct __pyx_obj_7pyparma_3ppl_Polyhedron *, struct __pyx_obj_7pyparma_3ppl_Generator *);
  PyObject *(*_relation_with_constraint)(struct __pyx_obj_7pyparma_3ppl_Polyhedron *, struct __pyx_obj_7pyparma_3ppl_Constraint *);
};
static struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron *__pyx_vtabptr_7pyparma_3ppl_Polyhedron;


/* "pyparma/ppl.pyx":2055
 * ### C_Polyhedron ###################################
 * ####################################################
 * cdef class C_Polyhedron(Polyhedron):             # <<<<<<<<<<<<<<
 *     r"""
 *     Wrapper for PPL's ``C_Polyhedron`` class.
 */

struct __pyx_vtabstruct_7pyparma_3ppl_C_Polyhedron {
  struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron __pyx_base;
};
static struct __pyx_vtabstruct_7pyparma_3ppl_C_Polyhedron *__pyx_vtabptr_7pyparma_3ppl_C_Polyhedron;


/* "pyparma/ppl.pyx":2241
 * ### NNC_Polyhedron #################################
 * ####################################################
 * cdef class NNC_Polyhedron(Polyhedron):             # <<<<<<<<<<<<<<
 *     r"""
 *     Wrapper for PPL's ``NNC_Polyhedron`` class.
 */

struct __pyx_vtabstruct_7pyparma_3ppl_NNC_Polyhedron {
  struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron __pyx_base;
};
static struct __pyx_vtabstruct_7pyparma_3ppl_NNC_Polyhedron *__pyx_vtabptr_7pyparma_3ppl_NNC_Polyhedron;
#ifndef CYTHON_REFNANNY
  #define CYTHON_REFNANNY 0
#endif
#if CYTHON_REFNANNY
  typedef struct {
    void (*INCREF)(void*, PyObject*, int);
    void (*DECREF)(void*, PyObject*, int);
    void (*GOTREF)(void*, PyObject*, int);
    void (*GIVEREF)(void*, PyObject*, int);
    void* (*SetupContext)(const char*, int, const char*);
    void (*FinishContext)(void**);
  } __Pyx_RefNannyAPIStruct;
  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
#ifdef WITH_THREAD
  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
          if (acquire_gil) { \
              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
              PyGILState_Release(__pyx_gilstate_save); \
          } else { \
              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
          }
#else
  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
#endif
  #define __Pyx_RefNannyFinishContext() \
          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
#else
  #define __Pyx_RefNannyDeclarations
  #define __Pyx_RefNannySetupContext(name, acquire_gil)
  #define __Pyx_RefNannyFinishContext()
  #define __Pyx_INCREF(r) Py_INCREF(r)
  #define __Pyx_DECREF(r) Py_DECREF(r)
  #define __Pyx_GOTREF(r)
  #define __Pyx_GIVEREF(r)
  #define __Pyx_XINCREF(r) Py_XINCREF(r)
  #define __Pyx_XDECREF(r) Py_XDECREF(r)
  #define __Pyx_XGOTREF(r)
  #define __Pyx_XGIVEREF(r)
#endif /* CYTHON_REFNANNY */
#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)

#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro))
        return tp->tp_getattro(obj, attr_name);
#if PY_MAJOR_VERSION < 3
    if (likely(tp->tp_getattr))
        return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
#endif
    return PyObject_GetAttr(obj, attr_name);
}
#else
#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
#endif

static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*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); /*proto*/

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

static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/

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

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

static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/

static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/

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

static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
    const char *name, int exact); /*proto*/

static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/

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

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

static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);

#include <string.h>

static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/

static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/

#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
#else
#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
#endif

#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \
    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \
               __Pyx_GetItemInt_Generic(o, to_py_func(i))))
#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
    (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck);
#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
    (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck);
static CYTHON_INLINE 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);

#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
    PyListObject* L = (PyListObject*) list;
    Py_ssize_t len = Py_SIZE(list);
    if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
        Py_INCREF(x);
        PyList_SET_ITEM(list, len, x);
        Py_SIZE(list) = len+1;
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
#endif

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

#if PY_MAJOR_VERSION < 3
#define __Pyx_PyString_Join __Pyx_PyBytes_Join
#define __Pyx_PyBaseString_Join(s, v) (PyUnicode_CheckExact(s) ? PyUnicode_Join(s, v) : __Pyx_PyBytes_Join(s, v))
#else
#define __Pyx_PyString_Join PyUnicode_Join
#define __Pyx_PyBaseString_Join PyUnicode_Join
#endif
#if CYTHON_COMPILING_IN_CPYTHON
    #if PY_MAJOR_VERSION < 3
    #define __Pyx_PyBytes_Join _PyString_Join
    #else
    #define __Pyx_PyBytes_Join _PyBytes_Join
    #endif
#else
static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values); /*proto*/
#endif

#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
    PyListObject* L = (PyListObject*) list;
    Py_ssize_t len = Py_SIZE(list);
    if (likely(L->allocated > len)) {
        Py_INCREF(x);
        PyList_SET_ITEM(list, len, x);
        Py_SIZE(list) = len+1;
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
#endif

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

static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name); /*proto*/

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

static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);

static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);

static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);

static CYTHON_INLINE PyObject* __Pyx_PyInt_From_signed__long(signed long value);

static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);

static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/
#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3
static PyObject* __pyx_print = 0;
static PyObject* __pyx_print_kwargs = 0;
#endif

static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/

static CYTHON_INLINE signed long __Pyx_PyInt_As_signed__long(PyObject *);

#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::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

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

static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);

static int __Pyx_check_binary_version(void);

#if !defined(__Pyx_PyIdentifier_FromString)
#if PY_MAJOR_VERSION < 3
  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
#else
  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
#endif
#endif

static PyObject *__Pyx_ImportModule(const char *name); /*proto*/

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

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

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

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


/* Module declarations from 'libcpp' */

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

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

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

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

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

/* Module declarations from 'pyparma.types' */

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

/* Module declarations from 'pyparma.mpz' */

/* Module declarations from 'pyparma.pylong' */
static PyObject *(*__pyx_f_7pyparma_6pylong_mpz_get_pyintlong)(mpz_srcptr); /*proto*/
static int (*__pyx_f_7pyparma_6pylong_mpz_set_pyintlong)(mpz_ptr, PyObject *); /*proto*/

/* Module declarations from 'pyparma.ppl' */
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Variable = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Linear_Expression = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Generator = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Generator_System = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Generator_System_iterator = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Constraint = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Constraint_System = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Constraint_System_iterator = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Polyhedron = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_C_Polyhedron = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation = 0;
static PyTypeObject *__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation = 0;
static PyObject *__pyx_f_7pyparma_3ppl__wrap_Generator(Parma_Polyhedra_Library::Generator); /*proto*/
static PyObject *__pyx_f_7pyparma_3ppl__wrap_Generator_System(Parma_Polyhedra_Library::Generator_System); /*proto*/
static PyObject *__pyx_f_7pyparma_3ppl__wrap_Constraint(Parma_Polyhedra_Library::Constraint); /*proto*/
static PyObject *__pyx_f_7pyparma_3ppl__make_Constraint_from_richcmp(PyObject *, PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_7pyparma_3ppl__wrap_Constraint_System(Parma_Polyhedra_Library::Constraint_System); /*proto*/
static PyObject *__pyx_f_7pyparma_3ppl__wrap_Poly_Gen_Relation(Parma_Polyhedra_Library::Poly_Gen_Relation); /*proto*/
static PyObject *__pyx_f_7pyparma_3ppl__wrap_Poly_Con_Relation(Parma_Polyhedra_Library::Poly_Con_Relation); /*proto*/
#define __Pyx_MODULE_NAME "pyparma.ppl"
int __pyx_module_is_main_pyparma__ppl = 0;

/* Implementation of 'pyparma.ppl' */
static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_NotImplementedError;
static PyObject *__pyx_builtin_BaseException;
static PyObject *__pyx_builtin_TypeError;
static PyObject *__pyx_builtin_range;
static PyObject *__pyx_builtin_IndexError;
static PyObject *__pyx_builtin_StopIteration;
static PyObject *__pyx_builtin_sum;
static int __pyx_pf_7pyparma_3ppl_10Polyhedron___init__(CYTHON_UNUSED struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_2_repr_(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_4space_dimension(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_6affine_dimension(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_8constraints(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_10minimized_constraints(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_12generators(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_14minimized_generators(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_16relation_with(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, PyObject *__pyx_v_arg); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_18is_empty(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_20is_universe(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_22is_topologically_closed(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_24is_disjoint_from(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_26is_discrete(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_28is_bounded(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_30contains_integer_point(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_32constrains(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_34bounds_from_above(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_expr); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_36bounds_from_below(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_expr); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_38maximize(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_expr); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_40minimize(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_expr); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_42contains(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_44strictly_contains(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_46add_constraint(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_c); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_48add_generator(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_50add_constraints(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_cs); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_52add_generators(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_gs); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_54unconstrain(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_56intersection_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_58poly_hull_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_60poly_difference_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_62drop_some_non_integer_points(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_64topological_closure_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_66add_space_dimensions_and_embed(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, PyObject *__pyx_v_m); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_68add_space_dimensions_and_project(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, PyObject *__pyx_v_m); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_70concatenate_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_72remove_higher_space_dimensions(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, PyObject *__pyx_v_new_dimension); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_74ascii_dump(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_76max_space_dimension(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_78OK(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_check_non_empty); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_80__richcmp__(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_lhs, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_rhs, PyObject *__pyx_v_op); /* proto */
static int __pyx_pf_7pyparma_3ppl_12C_Polyhedron___cinit__(struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *__pyx_v_self, PyObject *__pyx_v_arg, PyObject *__pyx_v_degenerate_element); /* proto */
static int __pyx_pf_7pyparma_3ppl_12C_Polyhedron_2__init__(CYTHON_UNUSED struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args); /* proto */
static void __pyx_pf_7pyparma_3ppl_12C_Polyhedron_4__dealloc__(struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_12C_Polyhedron_6__reduce__(struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *__pyx_v_self); /* proto */
static int __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron___cinit__(struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *__pyx_v_self, PyObject *__pyx_v_arg, PyObject *__pyx_v_degenerate_element); /* proto */
static int __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron_2__init__(CYTHON_UNUSED struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args); /* proto */
static void __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron_4__dealloc__(struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_14NNC_Polyhedron_6__reduce__(struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *__pyx_v_self); /* proto */
static int __pyx_pf_7pyparma_3ppl_8Variable___cinit__(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self, Parma_Polyhedra_Library::dimension_type __pyx_v_i); /* proto */
static void __pyx_pf_7pyparma_3ppl_8Variable_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_4id(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_6OK(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_8space_dimension(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_10__repr__(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_12__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_14__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_16__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_18__pos__(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_20__neg__(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_22__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_op); /* proto */
static int __pyx_pf_7pyparma_3ppl_17Linear_Expression___cinit__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self, PyObject *__pyx_v_args); /* proto */
static void __pyx_pf_7pyparma_3ppl_17Linear_Expression_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_4space_dimension(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_6coefficient(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_v); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_8coefficients(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_10inhomogeneous_term(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_12is_zero(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_14all_homogeneous_terms_are_zero(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_16ascii_dump(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_18OK(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_20__repr__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_22__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_24__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_26__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_28__pos__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_30__neg__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_32__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_34__reduce__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self); /* proto */
static int __pyx_pf_7pyparma_3ppl_9Generator___cinit__(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self, PyObject *__pyx_v_do_not_construct_manually); /* proto */
static void __pyx_pf_7pyparma_3ppl_9Generator_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_4line(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_expression); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_6ray(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_expression); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_8point(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_expression, PyObject *__pyx_v_divisor); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_10closure_point(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_expression, PyObject *__pyx_v_divisor); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_12__repr__(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_14space_dimension(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_16type(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_18is_line(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_20is_ray(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_22is_line_or_ray(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_24is_point(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_26is_closure_point(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_28coefficient(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_v); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_30coefficients(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_32divisor(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_34is_equivalent_to(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_36ascii_dump(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_38OK(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_40__reduce__(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_line(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_2ray(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_4point(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression, PyObject *__pyx_v_divisor); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_6closure_point(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression, PyObject *__pyx_v_divisor); /* proto */
static int __pyx_pf_7pyparma_3ppl_16Generator_System___cinit__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self, PyObject *__pyx_v_arg); /* proto */
static void __pyx_pf_7pyparma_3ppl_16Generator_System_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_4space_dimension(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_6clear(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_8insert(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_10empty(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_12ascii_dump(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_14OK(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static Py_ssize_t __pyx_pf_7pyparma_3ppl_16Generator_System_16__len__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_18__iter__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_20__getitem__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self, int __pyx_v_k); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_22__repr__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_24__reduce__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self); /* proto */
static int __pyx_pf_7pyparma_3ppl_25Generator_System_iterator___cinit__(struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_gs); /* proto */
static void __pyx_pf_7pyparma_3ppl_25Generator_System_iterator_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_25Generator_System_iterator_4__next__(struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *__pyx_v_self); /* proto */
static int __pyx_pf_7pyparma_3ppl_10Constraint___cinit__(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self, PyObject *__pyx_v_do_not_construct_manually); /* proto */
static void __pyx_pf_7pyparma_3ppl_10Constraint_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_4__repr__(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_6space_dimension(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_8type(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_10is_equality(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_12is_inequality(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_14is_nonstrict_inequality(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_16is_strict_inequality(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_18coefficient(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_v); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_20coefficients(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_22inhomogeneous_term(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_24is_tautological(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_26is_inconsistent(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_28is_equivalent_to(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_c); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_30ascii_dump(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_32OK(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_34__reduce__(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_8inequality(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_10strict_inequality(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_12equation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression); /* proto */
static int __pyx_pf_7pyparma_3ppl_17Constraint_System___cinit__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self, PyObject *__pyx_v_arg); /* proto */
static void __pyx_pf_7pyparma_3ppl_17Constraint_System_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_4space_dimension(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_6has_equalities(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_8has_strict_inequalities(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_10clear(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_12insert(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_c); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_14empty(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_16ascii_dump(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_18OK(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static Py_ssize_t __pyx_pf_7pyparma_3ppl_17Constraint_System_20__len__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_22__iter__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_24__getitem__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self, int __pyx_v_k); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_26__repr__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_28__reduce__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self); /* proto */
static int __pyx_pf_7pyparma_3ppl_26Constraint_System_iterator___cinit__(struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_cs); /* proto */
static void __pyx_pf_7pyparma_3ppl_26Constraint_System_iterator_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_26Constraint_System_iterator_4__next__(struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *__pyx_v_self); /* proto */
static int __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation___cinit__(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self, PyObject *__pyx_v_do_not_construct_manually); /* proto */
static void __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_4implies(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_6nothing(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_8subsumes(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_10ascii_dump(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_12OK(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_check_non_empty); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_14__repr__(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self); /* proto */
static int __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation___cinit__(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self, PyObject *__pyx_v_do_not_construct_manually); /* proto */
static void __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_4implies(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_6nothing(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_8is_disjoint(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_10strictly_intersects(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_12is_included(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_14saturates(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_16ascii_dump(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_18OK(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_check_non_empty); /* proto */
static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_20__repr__(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self); /* proto */
static PyObject *__pyx_tp_new_7pyparma_3ppl_Variable(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Linear_Expression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Generator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Generator_System(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Generator_System_iterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Constraint(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Constraint_System(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Constraint_System_iterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Polyhedron(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_C_Polyhedron(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_NNC_Polyhedron(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Poly_Gen_Relation(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyparma_3ppl_Poly_Con_Relation(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static char __pyx_k_[] = "^";
static char __pyx_k_0[] = "0";
static char __pyx_k_A[] = "A ";
static char __pyx_k_d[] = "%d";
static char __pyx_k_i[] = "i";
static char __pyx_k_r[] = "%r";
static char __pyx_k__2[] = ", ";
static char __pyx_k__5[] = ".";
static char __pyx_k__7[] = "";
static char __pyx_k_cs[] = "cs";
static char __pyx_k_gs[] = "gs";
static char __pyx_k_id[] = "id";
static char __pyx_k_0_2[] = "==0";
static char __pyx_k_0_3[] = ">=0";
static char __pyx_k_0_4[] = ">0";
static char __pyx_k__13[] = "/";
static char __pyx_k__14[] = ")";
static char __pyx_k__17[] = "}";
static char __pyx_k_arg[] = "arg";
static char __pyx_k_d_2[] = "%+d";
static char __pyx_k_d_r[] = "%d*%r";
static char __pyx_k_end[] = "end";
static char __pyx_k_mul[] = "__mul__";
static char __pyx_k_r_2[] = "-%r";
static char __pyx_k_r_3[] = "+%r";
static char __pyx_k_ray[] = " ray";
static char __pyx_k_sum[] = "sum";
static char __pyx_k_sys[] = "sys";
static char __pyx_k_x_0[] = "x{0}";
static char __pyx_k_Note[] = ". Note: ";
static char __pyx_k_file[] = "file";
static char __pyx_k_iter[] = "__iter__";
static char __pyx_k_join[] = "join";
static char __pyx_k_line[] = " line";
static char __pyx_k_main[] = "__main__";
static char __pyx_k_next[] = "next";
static char __pyx_k_rays[] = " rays";
static char __pyx_k_repr[] = "__repr__";
static char __pyx_k_test[] = "__test__";
static char __pyx_k_type[] = "type";
static char __pyx_k_d_r_2[] = "%+d*%r";
static char __pyx_k_empty[] = "empty";
static char __pyx_k_in_QQ[] = " in QQ";
static char __pyx_k_inf_d[] = "inf_d";
static char __pyx_k_inf_n[] = "inf_n";
static char __pyx_k_lines[] = " lines";
static char __pyx_k_lower[] = "lower";
static char __pyx_k_point[] = " point";
static char __pyx_k_print[] = "print";
static char __pyx_k_range[] = "range";
static char __pyx_k_ray_2[] = "ray";
static char __pyx_k_ray_3[] = "ray(";
static char __pyx_k_sup_d[] = "sup_d";
static char __pyx_k_sup_n[] = "sup_n";
static char __pyx_k_format[] = "format";
static char __pyx_k_import[] = "__import__";
static char __pyx_k_insert[] = "insert";
static char __pyx_k_is_ray[] = "is_ray";
static char __pyx_k_line_2[] = "line";
static char __pyx_k_line_3[] = "line(";
static char __pyx_k_points[] = " points";
static char __pyx_k_bounded[] = "bounded";
static char __pyx_k_divisor[] = "divisor";
static char __pyx_k_implies[] = "implies";
static char __pyx_k_is_line[] = "is_line";
static char __pyx_k_maximum[] = "maximum";
static char __pyx_k_minimum[] = "minimum";
static char __pyx_k_nothing[] = "nothing";
static char __pyx_k_point_2[] = "point";
static char __pyx_k_point_3[] = "point(";
static char __pyx_k_contains[] = "contains";
static char __pyx_k_equality[] = "equality";
static char __pyx_k_equation[] = "equation";
static char __pyx_k_exc_info[] = "exc_info";
static char __pyx_k_is_empty[] = "is_empty";
static char __pyx_k_is_point[] = "is_point";
static char __pyx_k_subsumes[] = "subsumes";
static char __pyx_k_universe[] = "universe";
static char __pyx_k_Exception[] = "Exception";
static char __pyx_k_TypeError[] = "TypeError";
static char __pyx_k_generator[] = "generator";
static char __pyx_k_saturates[] = "saturates";
static char __pyx_k_IndexError[] = "IndexError";
static char __pyx_k_ValueError[] = "ValueError";
static char __pyx_k_expression[] = "expression";
static char __pyx_k_generators[] = "generators";
static char __pyx_k_inequality[] = "inequality";
static char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static char __pyx_k_coefficient[] = "coefficient";
static char __pyx_k_is_disjoint[] = "is_disjoint";
static char __pyx_k_is_equality[] = "is_equality";
static char __pyx_k_is_included[] = "is_included";
static char __pyx_k_is_universe[] = "is_universe";
static char __pyx_k_pyparma_ppl[] = "pyparma.ppl";
static char __pyx_k_coefficients[] = "coefficients";
static char __pyx_k_BaseException[] = "BaseException";
static char __pyx_k_StopIteration[] = "StopIteration";
static char __pyx_k_closure_point[] = " closure_point";
static char __pyx_k_closure_points[] = " closure_points";
static char __pyx_k_check_non_empty[] = "check_non_empty";
static char __pyx_k_closure_point_2[] = "closure_point";
static char __pyx_k_closure_point_3[] = "closure_point(";
static char __pyx_k_space_dimension[] = "space_dimension";
static char __pyx_k_Generator_System[] = "Generator_System {";
static char __pyx_k_affine_dimension[] = "affine_dimension";
static char __pyx_k_is_closure_point[] = "is_closure_point";
static char __pyx_k_poly_hull_assign[] = "poly_hull_assign";
static char __pyx_k_Constraint_System[] = "Constraint_System {";
  static char __pyx_k_Error_has_occured[] = "Error has occured...";
  static char __pyx_k_difference_assign[] = "difference_assign";
  static char __pyx_k_strict_inequality[] = "strict_inequality";
  static char __pyx_k_strictly_contains[] = "strictly_contains";
  static char __pyx_k_degenerate_element[] = "degenerate_element";
  static char __pyx_k_inhomogeneous_term[] = "inhomogeneous_term";
  static char __pyx_k_upper_bound_assign[] = "upper_bound_assign";
  static char __pyx_k_NotImplementedError[] = "NotImplementedError";
  static char __pyx_k_strictly_intersects[] = "strictly_intersects";
  static char __pyx_k_is_strict_inequality[] = "is_strict_inequality";
  static char __pyx_k_minimized_generators[] = "minimized_generators";
  static char __pyx_k_nonstrict_inequality[] = "nonstrict_inequality";
  static char __pyx_k_index_is_past_the_end[] = "index is past-the-end";
  static char __pyx_k_Cannot_initialize_with[] = "Cannot initialize with ";
  static char __pyx_k_dimensional_polyhedron[] = "-dimensional polyhedron";
  static char __pyx_k_poly_difference_assign[] = "poly_difference_assign";
  static char __pyx_k_is_nonstrict_inequality[] = "is_nonstrict_inequality";
  static char __pyx_k_do_not_construct_manually[] = "do_not_construct_manually";
  static char __pyx_k_index_must_be_nonnegative[] = "index must be nonnegative";
  static char __pyx_k_The_empty_polyhedron_in_QQ[] = "The empty polyhedron in QQ^";
  static char __pyx_k_defined_as_the_convex_hull_of[] = " defined as the convex hull of ";
  static char __pyx_k_home_herve_dev_pyparma_pyparma[] = "/home/herve/dev/pyparma/pyparma/ppl.pyx";
  static char __pyx_k_Argument_must_be_Generator_or_a[] = "Argument must be Generator or a Constraint";
  static char __pyx_k_The_space_filling_polyhedron_in[] = "The space-filling polyhedron in QQ^";
  static char __pyx_k_Cannot_initialize_C_Polyhedron_w[] = "Cannot initialize C_Polyhedron with ";
  static char __pyx_k_Cannot_initialize_NNC_Polyhedron[] = "Cannot initialize NNC_Polyhedron with ";
  static char __pyx_k_Cannot_initialize_with_more_than[] = "Cannot initialize with more than 2 arguments.";
  static char __pyx_k_Do_not_construct_Constraints_man[] = "Do not construct Constraints manually!";
  static char __pyx_k_Do_not_construct_Generators_manu[] = "Do not construct Generators manually!";
  static char __pyx_k_Do_not_construct_Poly_Con_Relati[] = "Do not construct Poly_Con_Relation objects manually!";
  static char __pyx_k_Do_not_construct_Poly_Gen_Relati[] = "Do not construct Poly_Gen_Relation objects manually!";
  static char __pyx_k_The_Polyhedron_class_is_abstract[] = "The Polyhedron class is abstract, you must not instantiate it.";
  static char __pyx_k_Unknown_value_degenerate_element[] = "Unknown value: degenerate_element=";
  static PyObject *__pyx_kp_s_;
  static PyObject *__pyx_kp_s_0;
  static PyObject *__pyx_kp_s_0_2;
  static PyObject *__pyx_kp_s_0_3;
  static PyObject *__pyx_kp_s_0_4;
  static PyObject *__pyx_kp_s_A;
  static PyObject *__pyx_kp_s_Argument_must_be_Generator_or_a;
  static PyObject *__pyx_n_s_BaseException;
  static PyObject *__pyx_kp_s_Cannot_initialize_C_Polyhedron_w;
  static PyObject *__pyx_kp_s_Cannot_initialize_NNC_Polyhedron;
  static PyObject *__pyx_kp_s_Cannot_initialize_with;
  static PyObject *__pyx_kp_s_Cannot_initialize_with_more_than;
  static PyObject *__pyx_kp_s_Constraint_System;
  static PyObject *__pyx_kp_s_Do_not_construct_Constraints_man;
  static PyObject *__pyx_kp_s_Do_not_construct_Generators_manu;
  static PyObject *__pyx_kp_s_Do_not_construct_Poly_Con_Relati;
  static PyObject *__pyx_kp_s_Do_not_construct_Poly_Gen_Relati;
  static PyObject *__pyx_kp_s_Error_has_occured;
  static PyObject *__pyx_n_s_Exception;
  static PyObject *__pyx_kp_s_Generator_System;
  static PyObject *__pyx_n_s_IndexError;
  static PyObject *__pyx_n_s_NotImplementedError;
  static PyObject *__pyx_kp_s_Note;
  static PyObject *__pyx_n_s_StopIteration;
  static PyObject *__pyx_kp_s_The_Polyhedron_class_is_abstract;
  static PyObject *__pyx_kp_s_The_empty_polyhedron_in_QQ;
  static PyObject *__pyx_kp_s_The_space_filling_polyhedron_in;
  static PyObject *__pyx_n_s_TypeError;
  static PyObject *__pyx_kp_s_Unknown_value_degenerate_element;
  static PyObject *__pyx_n_s_ValueError;
  static PyObject *__pyx_kp_s__13;
  static PyObject *__pyx_kp_s__14;
  static PyObject *__pyx_kp_s__17;
  static PyObject *__pyx_kp_s__2;
  static PyObject *__pyx_kp_s__5;
  static PyObject *__pyx_kp_s__7;
  static PyObject *__pyx_n_s_affine_dimension;
  static PyObject *__pyx_n_s_arg;
  static PyObject *__pyx_n_s_bounded;
  static PyObject *__pyx_n_s_check_non_empty;
  static PyObject *__pyx_kp_s_closure_point;
  static PyObject *__pyx_n_s_closure_point_2;
  static PyObject *__pyx_kp_s_closure_point_3;
  static PyObject *__pyx_kp_s_closure_points;
  static PyObject *__pyx_n_s_coefficient;
  static PyObject *__pyx_n_s_coefficients;
  static PyObject *__pyx_n_s_contains;
  static PyObject *__pyx_n_s_cs;
  static PyObject *__pyx_kp_s_d;
  static PyObject *__pyx_kp_s_d_2;
  static PyObject *__pyx_kp_s_d_r;
  static PyObject *__pyx_kp_s_d_r_2;
  static PyObject *__pyx_kp_s_defined_as_the_convex_hull_of;
  static PyObject *__pyx_n_s_degenerate_element;
  static PyObject *__pyx_n_s_difference_assign;
  static PyObject *__pyx_kp_s_dimensional_polyhedron;
  static PyObject *__pyx_n_s_divisor;
  static PyObject *__pyx_n_s_do_not_construct_manually;
  static PyObject *__pyx_n_s_empty;
  static PyObject *__pyx_n_s_end;
  static PyObject *__pyx_n_s_equality;
  static PyObject *__pyx_n_s_equation;
  static PyObject *__pyx_n_s_exc_info;
  static PyObject *__pyx_n_s_expression;
  static PyObject *__pyx_n_s_file;
  static PyObject *__pyx_n_s_format;
  static PyObject *__pyx_n_s_generator;
  static PyObject *__pyx_n_s_generators;
  static PyObject *__pyx_n_s_gs;
  static PyObject *__pyx_kp_s_home_herve_dev_pyparma_pyparma;
  static PyObject *__pyx_n_s_i;
  static PyObject *__pyx_n_s_id;
  static PyObject *__pyx_n_s_implies;
  static PyObject *__pyx_n_s_import;
  static PyObject *__pyx_kp_s_in_QQ;
  static PyObject *__pyx_kp_s_index_is_past_the_end;
  static PyObject *__pyx_kp_s_index_must_be_nonnegative;
  static PyObject *__pyx_n_s_inequality;
  static PyObject *__pyx_n_s_inf_d;
  static PyObject *__pyx_n_s_inf_n;
  static PyObject *__pyx_n_s_inhomogeneous_term;
  static PyObject *__pyx_n_s_insert;
  static PyObject *__pyx_n_s_is_closure_point;
  static PyObject *__pyx_n_s_is_disjoint;
  static PyObject *__pyx_n_s_is_empty;
  static PyObject *__pyx_n_s_is_equality;
  static PyObject *__pyx_n_s_is_included;
  static PyObject *__pyx_n_s_is_line;
  static PyObject *__pyx_n_s_is_nonstrict_inequality;
  static PyObject *__pyx_n_s_is_point;
  static PyObject *__pyx_n_s_is_ray;
  static PyObject *__pyx_n_s_is_strict_inequality;
  static PyObject *__pyx_n_s_is_universe;
  static PyObject *__pyx_n_s_iter;
  static PyObject *__pyx_n_s_join;
  static PyObject *__pyx_kp_s_line;
  static PyObject *__pyx_n_s_line_2;
  static PyObject *__pyx_kp_s_line_3;
  static PyObject *__pyx_kp_s_lines;
  static PyObject *__pyx_n_s_lower;
  static PyObject *__pyx_n_s_main;
  static PyObject *__pyx_n_s_maximum;
  static PyObject *__pyx_n_s_minimized_generators;
  static PyObject *__pyx_n_s_minimum;
  static PyObject *__pyx_n_s_mul;
  static PyObject *__pyx_n_s_next;
  static PyObject *__pyx_n_s_nonstrict_inequality;
  static PyObject *__pyx_n_s_nothing;
  static PyObject *__pyx_kp_s_point;
  static PyObject *__pyx_n_s_point_2;
  static PyObject *__pyx_kp_s_point_3;
  static PyObject *__pyx_kp_s_points;
  static PyObject *__pyx_n_s_poly_difference_assign;
  static PyObject *__pyx_n_s_poly_hull_assign;
  static PyObject *__pyx_n_s_print;
  static PyObject *__pyx_n_s_pyparma_ppl;
  static PyObject *__pyx_n_s_pyx_vtable;
  static PyObject *__pyx_kp_s_r;
  static PyObject *__pyx_kp_s_r_2;
  static PyObject *__pyx_kp_s_r_3;
  static PyObject *__pyx_n_s_range;
  static PyObject *__pyx_kp_s_ray;
  static PyObject *__pyx_n_s_ray_2;
  static PyObject *__pyx_kp_s_ray_3;
  static PyObject *__pyx_kp_s_rays;
  static PyObject *__pyx_n_s_repr;
  static PyObject *__pyx_n_s_saturates;
  static PyObject *__pyx_n_s_space_dimension;
  static PyObject *__pyx_n_s_strict_inequality;
  static PyObject *__pyx_n_s_strictly_contains;
  static PyObject *__pyx_n_s_strictly_intersects;
  static PyObject *__pyx_n_s_subsumes;
  static PyObject *__pyx_n_s_sum;
  static PyObject *__pyx_n_s_sup_d;
  static PyObject *__pyx_n_s_sup_n;
  static PyObject *__pyx_n_s_sys;
  static PyObject *__pyx_n_s_test;
  static PyObject *__pyx_n_s_type;
  static PyObject *__pyx_n_s_universe;
  static PyObject *__pyx_n_s_upper_bound_assign;
  static PyObject *__pyx_kp_s_x_0;
  static PyObject *__pyx_int_0;
  static PyObject *__pyx_int_1;
  static PyObject *__pyx_int_2;
  static PyObject *__pyx_int_3;
  static PyObject *__pyx_int_4;
  static PyObject *__pyx_int_5;
  static PyObject *__pyx_int_neg_1;
  static PyObject *__pyx_tuple__3;
  static PyObject *__pyx_tuple__4;
  static PyObject *__pyx_tuple__6;
  static PyObject *__pyx_tuple__8;
  static PyObject *__pyx_tuple__9;
  static PyObject *__pyx_tuple__10;
  static PyObject *__pyx_tuple__11;
  static PyObject *__pyx_tuple__12;
  static PyObject *__pyx_tuple__15;
  static PyObject *__pyx_tuple__16;
  static PyObject *__pyx_tuple__18;
  static PyObject *__pyx_tuple__19;
  static PyObject *__pyx_tuple__20;
  static PyObject *__pyx_tuple__21;
  static PyObject *__pyx_tuple__22;
  static PyObject *__pyx_tuple__23;
  static PyObject *__pyx_tuple__25;
  static PyObject *__pyx_tuple__27;
  static PyObject *__pyx_tuple__29;
  static PyObject *__pyx_tuple__31;
  static PyObject *__pyx_tuple__33;
  static PyObject *__pyx_tuple__35;
  static PyObject *__pyx_codeobj__24;
  static PyObject *__pyx_codeobj__26;
  static PyObject *__pyx_codeobj__28;
  static PyObject *__pyx_codeobj__30;
  static PyObject *__pyx_codeobj__32;
  static PyObject *__pyx_codeobj__34;
  static PyObject *__pyx_codeobj__36;

/* "pyparma/ppl.pyx":322
 * 
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         The Python constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_10Polyhedron_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron___init__[] = "\n        The Python constructor.\n\n        See also :class:`C_Polyhedron` and\n        :class:`NNC_Polyhedron`. You must not instantiate\n        :class:`Polyhedron` objects.\n\n        TESTS::\n\n            sage: from sage.libs.ppl import Polyhedron\n            sage: Polyhedron()\n            Traceback (most recent call last):\n            ...\n            NotImplementedError: The Polyhedron class is abstract, you must not instantiate it.\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_10Polyhedron___init__;
#endif
static int __pyx_pw_7pyparma_3ppl_10Polyhedron_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron___init__(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static int __pyx_pf_7pyparma_3ppl_10Polyhedron___init__(CYTHON_UNUSED struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyparma/ppl.pyx":338
 *             NotImplementedError: The Polyhedron class is abstract, you must not instantiate it.
 *         """
 *         raise NotImplementedError, 'The Polyhedron class is abstract, you must not instantiate it.'             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_Raise(__pyx_builtin_NotImplementedError, __pyx_kp_s_The_Polyhedron_class_is_abstract, 0, 0);
  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":322
 * 
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         The Python constructor.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":341
 * 
 * 
 *     def _repr_(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a string representation.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_3_repr_(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_2_repr_[] = "\n        Return a string representation.\n\n        OUTPUT:\n\n        String.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: C_Polyhedron( 5*x-2*y >=  x+y-1 )._repr_()\n            'A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 1 ray, 1 line'\n\n        Special cases::\n\n            sage: C_Polyhedron(3, 'empty')._repr_()\n            'The empty polyhedron in QQ^3'\n            sage: C_Polyhedron(3, 'universe')._repr_()\n            'The space-filling polyhedron in QQ^3'\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_3_repr_(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_repr_ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_2_repr_(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_2_repr_(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  PyObject *__pyx_v_dim = NULL;
  PyObject *__pyx_v_ambient_dim = NULL;
  PyObject *__pyx_v_gs = NULL;
  PyObject *__pyx_v_n_points = NULL;
  PyObject *__pyx_v_n_closure_points = NULL;
  PyObject *__pyx_v_n_lines = NULL;
  PyObject *__pyx_v_n_rays = NULL;
  PyObject *__pyx_v_g = NULL;
  PyObject *__pyx_v_desc = NULL;
  int __pyx_v_first;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_repr_", 0);

  /* "pyparma/ppl.pyx":364
 *             'The space-filling polyhedron in QQ^3'
 *         """
 *         dim = self.affine_dimension()             # <<<<<<<<<<<<<<
 *         ambient_dim = self.space_dimension()
 *         gs = self.minimized_generators()
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_affine_dimension); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_dim = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":365
 *         """
 *         dim = self.affine_dimension()
 *         ambient_dim = self.space_dimension()             # <<<<<<<<<<<<<<
 *         gs = self.minimized_generators()
 *         n_points = 0
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_ambient_dim = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":366
 *         dim = self.affine_dimension()
 *         ambient_dim = self.space_dimension()
 *         gs = self.minimized_generators()             # <<<<<<<<<<<<<<
 *         n_points = 0
 *         n_closure_points = 0
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_minimized_generators); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_gs = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":367
 *         ambient_dim = self.space_dimension()
 *         gs = self.minimized_generators()
 *         n_points = 0             # <<<<<<<<<<<<<<
 *         n_closure_points = 0
 *         n_lines = 0
 */
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_n_points = __pyx_int_0;

  /* "pyparma/ppl.pyx":368
 *         gs = self.minimized_generators()
 *         n_points = 0
 *         n_closure_points = 0             # <<<<<<<<<<<<<<
 *         n_lines = 0
 *         n_rays = 0
 */
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_n_closure_points = __pyx_int_0;

  /* "pyparma/ppl.pyx":369
 *         n_points = 0
 *         n_closure_points = 0
 *         n_lines = 0             # <<<<<<<<<<<<<<
 *         n_rays = 0
 *         for g in gs:
 */
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_n_lines = __pyx_int_0;

  /* "pyparma/ppl.pyx":370
 *         n_closure_points = 0
 *         n_lines = 0
 *         n_rays = 0             # <<<<<<<<<<<<<<
 *         for g in gs:
 *             if g.is_line():
 */
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_n_rays = __pyx_int_0;

  /* "pyparma/ppl.pyx":371
 *         n_lines = 0
 *         n_rays = 0
 *         for g in gs:             # <<<<<<<<<<<<<<
 *             if g.is_line():
 *                 n_lines += 1
 */
  if (PyList_CheckExact(__pyx_v_gs) || PyTuple_CheckExact(__pyx_v_gs)) {
    __pyx_t_2 = __pyx_v_gs; __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_gs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
  }
  for (;;) {
    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_g, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyparma/ppl.pyx":372
 *         n_rays = 0
 *         for g in gs:
 *             if g.is_line():             # <<<<<<<<<<<<<<
 *                 n_lines += 1
 *             elif g.is_ray():
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_g, __pyx_n_s_is_line); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_6) {

      /* "pyparma/ppl.pyx":373
 *         for g in gs:
 *             if g.is_line():
 *                 n_lines += 1             # <<<<<<<<<<<<<<
 *             elif g.is_ray():
 *                 n_rays += 1
 */
      __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_n_lines, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_n_lines, __pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L5;
    }

    /* "pyparma/ppl.pyx":374
 *             if g.is_line():
 *                 n_lines += 1
 *             elif g.is_ray():             # <<<<<<<<<<<<<<
 *                 n_rays += 1
 *             elif g.is_point():
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_g, __pyx_n_s_is_ray); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {

      /* "pyparma/ppl.pyx":375
 *                 n_lines += 1
 *             elif g.is_ray():
 *                 n_rays += 1             # <<<<<<<<<<<<<<
 *             elif g.is_point():
 *                 n_points += 1
 */
      __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_n_rays, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_n_rays, __pyx_t_1);
      __pyx_t_1 = 0;
      goto __pyx_L5;
    }

    /* "pyparma/ppl.pyx":376
 *             elif g.is_ray():
 *                 n_rays += 1
 *             elif g.is_point():             # <<<<<<<<<<<<<<
 *                 n_points += 1
 *             elif g.is_closure_point():
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_g, __pyx_n_s_is_point); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_6) {

      /* "pyparma/ppl.pyx":377
 *                 n_rays += 1
 *             elif g.is_point():
 *                 n_points += 1             # <<<<<<<<<<<<<<
 *             elif g.is_closure_point():
 *                 n_closure_points += 1
 */
      __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_n_points, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_n_points, __pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L5;
    }

    /* "pyparma/ppl.pyx":378
 *             elif g.is_point():
 *                 n_points += 1
 *             elif g.is_closure_point():             # <<<<<<<<<<<<<<
 *                 n_closure_points += 1
 *             else:
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_g, __pyx_n_s_is_closure_point); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {

      /* "pyparma/ppl.pyx":379
 *                 n_points += 1
 *             elif g.is_closure_point():
 *                 n_closure_points += 1             # <<<<<<<<<<<<<<
 *             else:
 *                 assert False
 */
      __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_n_closure_points, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_n_closure_points, __pyx_t_1);
      __pyx_t_1 = 0;
      goto __pyx_L5;
    }
    /*else*/ {

      /* "pyparma/ppl.pyx":381
 *                 n_closure_points += 1
 *             else:
 *                 assert False             # <<<<<<<<<<<<<<
 *         if self.is_empty():
 *             return 'The empty polyhedron in QQ^'+str(ambient_dim)
 */
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(!0)) {
          PyErr_SetNone(PyExc_AssertionError);
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
      }
      #endif
    }
    __pyx_L5:;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":382
 *             else:
 *                 assert False
 *         if self.is_empty():             # <<<<<<<<<<<<<<
 *             return 'The empty polyhedron in QQ^'+str(ambient_dim)
 *         if self.is_universe():
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {

    /* "pyparma/ppl.pyx":383
 *                 assert False
 *         if self.is_empty():
 *             return 'The empty polyhedron in QQ^'+str(ambient_dim)             # <<<<<<<<<<<<<<
 *         if self.is_universe():
 *             return 'The space-filling polyhedron in QQ^'+str(ambient_dim)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_ambient_dim);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_ambient_dim);
    __Pyx_GIVEREF(__pyx_v_ambient_dim);
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_The_empty_polyhedron_in_QQ, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":384
 *         if self.is_empty():
 *             return 'The empty polyhedron in QQ^'+str(ambient_dim)
 *         if self.is_universe():             # <<<<<<<<<<<<<<
 *             return 'The space-filling polyhedron in QQ^'+str(ambient_dim)
 *         desc = 'A ' + str(dim) + '-dimensional polyhedron'
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_universe); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_6) {

    /* "pyparma/ppl.pyx":385
 *             return 'The empty polyhedron in QQ^'+str(ambient_dim)
 *         if self.is_universe():
 *             return 'The space-filling polyhedron in QQ^'+str(ambient_dim)             # <<<<<<<<<<<<<<
 *         desc = 'A ' + str(dim) + '-dimensional polyhedron'
 *         desc += ' in QQ'
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_ambient_dim);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_ambient_dim);
    __Pyx_GIVEREF(__pyx_v_ambient_dim);
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Add(__pyx_kp_s_The_space_filling_polyhedron_in, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":386
 *         if self.is_universe():
 *             return 'The space-filling polyhedron in QQ^'+str(ambient_dim)
 *         desc = 'A ' + str(dim) + '-dimensional polyhedron'             # <<<<<<<<<<<<<<
 *         desc += ' in QQ'
 *         desc += '^' + str(ambient_dim)
 */
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_dim);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_dim);
  __Pyx_GIVEREF(__pyx_v_dim);
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Add(__pyx_kp_s_A, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_dimensional_polyhedron); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_desc = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":387
 *             return 'The space-filling polyhedron in QQ^'+str(ambient_dim)
 *         desc = 'A ' + str(dim) + '-dimensional polyhedron'
 *         desc += ' in QQ'             # <<<<<<<<<<<<<<
 *         desc += '^' + str(ambient_dim)
 *         desc += ' defined as the convex hull of '
 */
  __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_in_QQ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":388
 *         desc = 'A ' + str(dim) + '-dimensional polyhedron'
 *         desc += ' in QQ'
 *         desc += '^' + str(ambient_dim)             # <<<<<<<<<<<<<<
 *         desc += ' defined as the convex hull of '
 *         first = True
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_ambient_dim);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_ambient_dim);
  __Pyx_GIVEREF(__pyx_v_ambient_dim);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Add(__pyx_kp_s_, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":389
 *         desc += ' in QQ'
 *         desc += '^' + str(ambient_dim)
 *         desc += ' defined as the convex hull of '             # <<<<<<<<<<<<<<
 *         first = True
 *         if n_points>0:
 */
  __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_defined_as_the_convex_hull_of); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":390
 *         desc += '^' + str(ambient_dim)
 *         desc += ' defined as the convex hull of '
 *         first = True             # <<<<<<<<<<<<<<
 *         if n_points>0:
 *             if not first:
 */
  __pyx_v_first = 1;

  /* "pyparma/ppl.pyx":391
 *         desc += ' defined as the convex hull of '
 *         first = True
 *         if n_points>0:             # <<<<<<<<<<<<<<
 *             if not first:
 *                 desc += ", "
 */
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_n_points, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_6) {

    /* "pyparma/ppl.pyx":392
 *         first = True
 *         if n_points>0:
 *             if not first:             # <<<<<<<<<<<<<<
 *                 desc += ", "
 *             first = False
 */
    __pyx_t_6 = ((!(__pyx_v_first != 0)) != 0);
    if (__pyx_t_6) {

      /* "pyparma/ppl.pyx":393
 *         if n_points>0:
 *             if not first:
 *                 desc += ", "             # <<<<<<<<<<<<<<
 *             first = False
 *             desc += str(n_points)
 */
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s__2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
      goto __pyx_L9;
    }
    __pyx_L9:;

    /* "pyparma/ppl.pyx":394
 *             if not first:
 *                 desc += ", "
 *             first = False             # <<<<<<<<<<<<<<
 *             desc += str(n_points)
 *             if n_points==1:  desc += ' point'
 */
    __pyx_v_first = 0;

    /* "pyparma/ppl.pyx":395
 *                 desc += ", "
 *             first = False
 *             desc += str(n_points)             # <<<<<<<<<<<<<<
 *             if n_points==1:  desc += ' point'
 *             else:          desc += ' points'
 */
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_n_points);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_n_points);
    __Pyx_GIVEREF(__pyx_v_n_points);
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":396
 *             first = False
 *             desc += str(n_points)
 *             if n_points==1:  desc += ' point'             # <<<<<<<<<<<<<<
 *             else:          desc += ' points'
 *         if n_closure_points>0:
 */
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_n_points, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_6) {
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_point); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
      goto __pyx_L10;
    }
    /*else*/ {

      /* "pyparma/ppl.pyx":397
 *             desc += str(n_points)
 *             if n_points==1:  desc += ' point'
 *             else:          desc += ' points'             # <<<<<<<<<<<<<<
 *         if n_closure_points>0:
 *             if not first:
 */
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_points); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
    }
    __pyx_L10:;
    goto __pyx_L8;
  }
  __pyx_L8:;

  /* "pyparma/ppl.pyx":398
 *             if n_points==1:  desc += ' point'
 *             else:          desc += ' points'
 *         if n_closure_points>0:             # <<<<<<<<<<<<<<
 *             if not first:
 *                 desc += ", "
 */
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_n_closure_points, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_6) {

    /* "pyparma/ppl.pyx":399
 *             else:          desc += ' points'
 *         if n_closure_points>0:
 *             if not first:             # <<<<<<<<<<<<<<
 *                 desc += ", "
 *             first = False
 */
    __pyx_t_6 = ((!(__pyx_v_first != 0)) != 0);
    if (__pyx_t_6) {

      /* "pyparma/ppl.pyx":400
 *         if n_closure_points>0:
 *             if not first:
 *                 desc += ", "             # <<<<<<<<<<<<<<
 *             first = False
 *             desc += str(n_closure_points)
 */
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s__2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
      goto __pyx_L12;
    }
    __pyx_L12:;

    /* "pyparma/ppl.pyx":401
 *             if not first:
 *                 desc += ", "
 *             first = False             # <<<<<<<<<<<<<<
 *             desc += str(n_closure_points)
 *             if n_closure_points==1:  desc += ' closure_point'
 */
    __pyx_v_first = 0;

    /* "pyparma/ppl.pyx":402
 *                 desc += ", "
 *             first = False
 *             desc += str(n_closure_points)             # <<<<<<<<<<<<<<
 *             if n_closure_points==1:  desc += ' closure_point'
 *             else:          desc += ' closure_points'
 */
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_n_closure_points);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_n_closure_points);
    __Pyx_GIVEREF(__pyx_v_n_closure_points);
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":403
 *             first = False
 *             desc += str(n_closure_points)
 *             if n_closure_points==1:  desc += ' closure_point'             # <<<<<<<<<<<<<<
 *             else:          desc += ' closure_points'
 *         if n_rays>0:
 */
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_n_closure_points, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_6) {
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_closure_point); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
      goto __pyx_L13;
    }
    /*else*/ {

      /* "pyparma/ppl.pyx":404
 *             desc += str(n_closure_points)
 *             if n_closure_points==1:  desc += ' closure_point'
 *             else:          desc += ' closure_points'             # <<<<<<<<<<<<<<
 *         if n_rays>0:
 *             if not first:
 */
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_closure_points); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
    }
    __pyx_L13:;
    goto __pyx_L11;
  }
  __pyx_L11:;

  /* "pyparma/ppl.pyx":405
 *             if n_closure_points==1:  desc += ' closure_point'
 *             else:          desc += ' closure_points'
 *         if n_rays>0:             # <<<<<<<<<<<<<<
 *             if not first:
 *                 desc += ", "
 */
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_n_rays, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_6) {

    /* "pyparma/ppl.pyx":406
 *             else:          desc += ' closure_points'
 *         if n_rays>0:
 *             if not first:             # <<<<<<<<<<<<<<
 *                 desc += ", "
 *             first = False
 */
    __pyx_t_6 = ((!(__pyx_v_first != 0)) != 0);
    if (__pyx_t_6) {

      /* "pyparma/ppl.pyx":407
 *         if n_rays>0:
 *             if not first:
 *                 desc += ", "             # <<<<<<<<<<<<<<
 *             first = False
 *             desc += str(n_rays)
 */
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s__2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
      goto __pyx_L15;
    }
    __pyx_L15:;

    /* "pyparma/ppl.pyx":408
 *             if not first:
 *                 desc += ", "
 *             first = False             # <<<<<<<<<<<<<<
 *             desc += str(n_rays)
 *             if n_rays==1:  desc += ' ray'
 */
    __pyx_v_first = 0;

    /* "pyparma/ppl.pyx":409
 *                 desc += ", "
 *             first = False
 *             desc += str(n_rays)             # <<<<<<<<<<<<<<
 *             if n_rays==1:  desc += ' ray'
 *             else:          desc += ' rays'
 */
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_n_rays);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_n_rays);
    __Pyx_GIVEREF(__pyx_v_n_rays);
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":410
 *             first = False
 *             desc += str(n_rays)
 *             if n_rays==1:  desc += ' ray'             # <<<<<<<<<<<<<<
 *             else:          desc += ' rays'
 *         if n_lines>0:
 */
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_n_rays, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_6) {
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_ray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
      goto __pyx_L16;
    }
    /*else*/ {

      /* "pyparma/ppl.pyx":411
 *             desc += str(n_rays)
 *             if n_rays==1:  desc += ' ray'
 *             else:          desc += ' rays'             # <<<<<<<<<<<<<<
 *         if n_lines>0:
 *             if not first:
 */
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_rays); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
    }
    __pyx_L16:;
    goto __pyx_L14;
  }
  __pyx_L14:;

  /* "pyparma/ppl.pyx":412
 *             if n_rays==1:  desc += ' ray'
 *             else:          desc += ' rays'
 *         if n_lines>0:             # <<<<<<<<<<<<<<
 *             if not first:
 *                 desc += ", "
 */
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_n_lines, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_6) {

    /* "pyparma/ppl.pyx":413
 *             else:          desc += ' rays'
 *         if n_lines>0:
 *             if not first:             # <<<<<<<<<<<<<<
 *                 desc += ", "
 *             first = False
 */
    __pyx_t_6 = ((!(__pyx_v_first != 0)) != 0);
    if (__pyx_t_6) {

      /* "pyparma/ppl.pyx":414
 *         if n_lines>0:
 *             if not first:
 *                 desc += ", "             # <<<<<<<<<<<<<<
 *             first = False
 *             desc += repr(n_lines)
 */
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s__2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_2);
      __pyx_t_2 = 0;
      goto __pyx_L18;
    }
    __pyx_L18:;

    /* "pyparma/ppl.pyx":415
 *             if not first:
 *                 desc += ", "
 *             first = False             # <<<<<<<<<<<<<<
 *             desc += repr(n_lines)
 *             if n_lines==1: desc +=' line'
 */
    __pyx_v_first = 0;

    /* "pyparma/ppl.pyx":416
 *                 desc += ", "
 *             first = False
 *             desc += repr(n_lines)             # <<<<<<<<<<<<<<
 *             if n_lines==1: desc +=' line'
 *             else:          desc +=' lines'
 */
    __pyx_t_2 = PyObject_Repr(__pyx_v_n_lines); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyparma/ppl.pyx":417
 *             first = False
 *             desc += repr(n_lines)
 *             if n_lines==1: desc +=' line'             # <<<<<<<<<<<<<<
 *             else:          desc +=' lines'
 *         return desc
 */
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_n_lines, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {
      __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_line); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_1);
      __pyx_t_1 = 0;
      goto __pyx_L19;
    }
    /*else*/ {

      /* "pyparma/ppl.pyx":418
 *             desc += repr(n_lines)
 *             if n_lines==1: desc +=' line'
 *             else:          desc +=' lines'             # <<<<<<<<<<<<<<
 *         return desc
 * 
 */
      __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_desc, __pyx_kp_s_lines); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_desc, __pyx_t_1);
      __pyx_t_1 = 0;
    }
    __pyx_L19:;
    goto __pyx_L17;
  }
  __pyx_L17:;

  /* "pyparma/ppl.pyx":419
 *             if n_lines==1: desc +=' line'
 *             else:          desc +=' lines'
 *         return desc             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_desc);
  __pyx_r = __pyx_v_desc;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":341
 * 
 * 
 *     def _repr_(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a string representation.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron._repr_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dim);
  __Pyx_XDECREF(__pyx_v_ambient_dim);
  __Pyx_XDECREF(__pyx_v_gs);
  __Pyx_XDECREF(__pyx_v_n_points);
  __Pyx_XDECREF(__pyx_v_n_closure_points);
  __Pyx_XDECREF(__pyx_v_n_lines);
  __Pyx_XDECREF(__pyx_v_n_rays);
  __Pyx_XDECREF(__pyx_v_g);
  __Pyx_XDECREF(__pyx_v_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":422
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_5space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_4space_dimension[] = "\n        Return the dimension of the vector space enclosing ``self``.\n\n        OUTPUT:\n\n        Integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron( 5*x-2*y >=  x+y-1 )\n            sage: p.space_dimension()\n            2\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_5space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("space_dimension (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_4space_dimension(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_4space_dimension(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__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("space_dimension", 0);

  /* "pyparma/ppl.pyx":439
 *             2
 *         """
 *         return self.thisptr.space_dimension()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->thisptr->space_dimension()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":422
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.space_dimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":442
 * 
 * 
 *     def affine_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the affine dimension of ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_7affine_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_6affine_dimension[] = "\n        Return the affine dimension of ``self``.\n\n        OUTPUT:\n\n        An integer. Returns 0 if ``self`` is empty. Otherwise, returns\n        the affine dimension of ``self``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron( 5*x-2*y ==  x+y-1 )\n            sage: p.affine_dimension()\n            1\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_7affine_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("affine_dimension (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_6affine_dimension(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_6affine_dimension(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  size_t __pyx_v_dim;
  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("affine_dimension", 0);

  /* "pyparma/ppl.pyx":460
 *             1
 *         """
 *         cdef size_t dim = self.thisptr.affine_dimension()             # <<<<<<<<<<<<<<
 *         return dim
 * 
 */
  __pyx_v_dim = __pyx_v_self->thisptr->affine_dimension();

  /* "pyparma/ppl.pyx":461
 *         """
 *         cdef size_t dim = self.thisptr.affine_dimension()
 *         return dim             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_dim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":442
 * 
 * 
 *     def affine_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the affine dimension of ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.affine_dimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":464
 * 
 * 
 *     def constraints(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Returns the system of constraints.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_9constraints(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_8constraints[] = "\n        Returns the system of constraints.\n\n        See also :meth:`minimized_constraints`.\n\n        OUTPUT:\n\n        A :class:`Constraint_System`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron( y>=0 )\n            sage: p.add_constraint( x>=0 )\n            sage: p.add_constraint( x+y>=0 )\n            sage: p.constraints()\n            Constraint_System {x1>=0, x0>=0, x0+x1>=0}\n            sage: p.minimized_constraints()\n            Constraint_System {x1>=0, x0>=0}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_9constraints(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("constraints (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_8constraints(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_8constraints(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  Parma_Polyhedra_Library::Constraint_System __pyx_v_cs;
  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("constraints", 0);

  /* "pyparma/ppl.pyx":487
 *             Constraint_System {x1>=0, x0>=0}
 *         """
 *         cdef PPL_Constraint_System cs = self.thisptr.constraints()             # <<<<<<<<<<<<<<
 *         return _wrap_Constraint_System(cs)
 * 
 */
  __pyx_v_cs = __pyx_v_self->thisptr->constraints();

  /* "pyparma/ppl.pyx":488
 *         """
 *         cdef PPL_Constraint_System cs = self.thisptr.constraints()
 *         return _wrap_Constraint_System(cs)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Constraint_System(__pyx_v_cs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":464
 * 
 * 
 *     def constraints(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Returns the system of constraints.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.constraints", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":491
 * 
 * 
 *     def minimized_constraints(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Returns the minimized system of constraints.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_11minimized_constraints(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_10minimized_constraints[] = "\n        Returns the minimized system of constraints.\n\n        See also :meth:`constraints`.\n\n        OUTPUT:\n\n        A :class:`Constraint_System`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron( y>=0 )\n            sage: p.add_constraint( x>=0 )\n            sage: p.add_constraint( x+y>=0 )\n            sage: p.constraints()\n            Constraint_System {x1>=0, x0>=0, x0+x1>=0}\n            sage: p.minimized_constraints()\n            Constraint_System {x1>=0, x0>=0}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_11minimized_constraints(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("minimized_constraints (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_10minimized_constraints(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_10minimized_constraints(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  Parma_Polyhedra_Library::Constraint_System __pyx_v_cs;
  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("minimized_constraints", 0);

  /* "pyparma/ppl.pyx":514
 *             Constraint_System {x1>=0, x0>=0}
 *         """
 *         cdef PPL_Constraint_System cs = self.thisptr.minimized_constraints()             # <<<<<<<<<<<<<<
 *         return _wrap_Constraint_System(cs)
 * 
 */
  __pyx_v_cs = __pyx_v_self->thisptr->minimized_constraints();

  /* "pyparma/ppl.pyx":515
 *         """
 *         cdef PPL_Constraint_System cs = self.thisptr.minimized_constraints()
 *         return _wrap_Constraint_System(cs)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Constraint_System(__pyx_v_cs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":491
 * 
 * 
 *     def minimized_constraints(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Returns the minimized system of constraints.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.minimized_constraints", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":518
 * 
 * 
 *     def generators(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Returns the system of generators.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_13generators(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_12generators[] = "\n        Returns the system of generators.\n\n        See also :meth:`minimized_generators`.\n\n        OUTPUT:\n\n        A :class:`Generator_System`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron(3,'empty')\n            sage: p.add_generator( point(-x-y) )\n            sage: p.add_generator( point(0) )\n            sage: p.add_generator( point(+x+y) )\n            sage: p.generators()\n            Generator_System {point(-1/1, -1/1, 0/1), point(0/1, 0/1, 0/1), point(1/1, 1/1, 0/1)}\n            sage: p.minimized_generators()\n            Generator_System {point(-1/1, -1/1, 0/1), point(1/1, 1/1, 0/1)}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_13generators(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("generators (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_12generators(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_12generators(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  Parma_Polyhedra_Library::Generator_System __pyx_v_gs;
  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("generators", 0);

  /* "pyparma/ppl.pyx":542
 *             Generator_System {point(-1/1, -1/1, 0/1), point(1/1, 1/1, 0/1)}
 *         """
 *         cdef PPL_Generator_System gs = self.thisptr.generators()             # <<<<<<<<<<<<<<
 *         return _wrap_Generator_System(gs)
 * 
 */
  __pyx_v_gs = __pyx_v_self->thisptr->generators();

  /* "pyparma/ppl.pyx":543
 *         """
 *         cdef PPL_Generator_System gs = self.thisptr.generators()
 *         return _wrap_Generator_System(gs)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Generator_System(__pyx_v_gs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":518
 * 
 * 
 *     def generators(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Returns the system of generators.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.generators", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":546
 * 
 * 
 *     def minimized_generators(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Returns the minimized system of generators.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_15minimized_generators(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_14minimized_generators[] = "\n        Returns the minimized system of generators.\n\n        See also :meth:`generators`.\n\n        OUTPUT:\n\n        A :class:`Generator_System`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron(3,'empty')\n            sage: p.add_generator( point(-x-y) )\n            sage: p.add_generator( point(0) )\n            sage: p.add_generator( point(+x+y) )\n            sage: p.generators()\n            Generator_System {point(-1/1, -1/1, 0/1), point(0/1, 0/1, 0/1), point(1/1, 1/1, 0/1)}\n            sage: p.minimized_generators()\n            Generator_System {point(-1/1, -1/1, 0/1), point(1/1, 1/1, 0/1)}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_15minimized_generators(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("minimized_generators (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_14minimized_generators(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_14minimized_generators(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  Parma_Polyhedra_Library::Generator_System __pyx_v_gs;
  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("minimized_generators", 0);

  /* "pyparma/ppl.pyx":570
 *             Generator_System {point(-1/1, -1/1, 0/1), point(1/1, 1/1, 0/1)}
 *         """
 *         cdef PPL_Generator_System gs = self.thisptr.minimized_generators()             # <<<<<<<<<<<<<<
 *         return _wrap_Generator_System(gs)
 * 
 */
  __pyx_v_gs = __pyx_v_self->thisptr->minimized_generators();

  /* "pyparma/ppl.pyx":571
 *         """
 *         cdef PPL_Generator_System gs = self.thisptr.minimized_generators()
 *         return _wrap_Generator_System(gs)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Generator_System(__pyx_v_gs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":546
 * 
 * 
 *     def minimized_generators(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Returns the minimized system of generators.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.minimized_generators", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":574
 * 
 * 
 *     cdef _relation_with_generator(Polyhedron self, Generator g):             # <<<<<<<<<<<<<<
 *         r"""
 *         Helper method for :meth:`relation_with`.
 */

static PyObject *__pyx_f_7pyparma_3ppl_10Polyhedron__relation_with_generator(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g) {
  struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_rel = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Parma_Polyhedra_Library::Poly_Gen_Relation *__pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_relation_with_generator", 0);

  /* "pyparma/ppl.pyx":578
 *         Helper method for :meth:`relation_with`.
 *         """
 *         rel = Poly_Gen_Relation(True)             # <<<<<<<<<<<<<<
 *         try:
 *             rel.thisptr = new_relation_with(self.thisptr[0], g.thisptr[0])
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation)), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rel = ((struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":579
 *         """
 *         rel = Poly_Gen_Relation(True)
 *         try:             # <<<<<<<<<<<<<<
 *             rel.thisptr = new_relation_with(self.thisptr[0], g.thisptr[0])
 *         except BaseException:
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "pyparma/ppl.pyx":580
 *         rel = Poly_Gen_Relation(True)
 *         try:
 *             rel.thisptr = new_relation_with(self.thisptr[0], g.thisptr[0])             # <<<<<<<<<<<<<<
 *         except BaseException:
 *             # rel.thisptr must be set to something valid or rel.__dealloc__() will segfault
 */
      try {
        __pyx_t_5 = new_relation_with((__pyx_v_self->thisptr[0]), (__pyx_v_g->thisptr[0]));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
      __pyx_v_rel->thisptr = __pyx_t_5;
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L10_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pyparma/ppl.pyx":581
 *         try:
 *             rel.thisptr = new_relation_with(self.thisptr[0], g.thisptr[0])
 *         except BaseException:             # <<<<<<<<<<<<<<
 *             # rel.thisptr must be set to something valid or rel.__dealloc__() will segfault
 *             rel.thisptr = new PPL_Poly_Gen_Relation(PPL_Poly_Gen_Relation_nothing())
 */
    __pyx_t_6 = PyErr_ExceptionMatches(__pyx_builtin_BaseException);
    if (__pyx_t_6) {
      __Pyx_AddTraceback("pyparma.ppl.Polyhedron._relation_with_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_8);

      /* "pyparma/ppl.pyx":583
 *         except BaseException:
 *             # rel.thisptr must be set to something valid or rel.__dealloc__() will segfault
 *             rel.thisptr = new PPL_Poly_Gen_Relation(PPL_Poly_Gen_Relation_nothing())             # <<<<<<<<<<<<<<
 *             raise
 *         return rel
 */
      __pyx_v_rel->thisptr = new Parma_Polyhedra_Library::Poly_Gen_Relation(Parma_Polyhedra_Library::Poly_Gen_Relation::nothing());

      /* "pyparma/ppl.pyx":584
 *             # rel.thisptr must be set to something valid or rel.__dealloc__() will segfault
 *             rel.thisptr = new PPL_Poly_Gen_Relation(PPL_Poly_Gen_Relation_nothing())
 *             raise             # <<<<<<<<<<<<<<
 *         return rel
 * 
 */
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_1, __pyx_t_7, __pyx_t_8);
      __pyx_t_1 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; 
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L10_try_end:;
  }

  /* "pyparma/ppl.pyx":585
 *             rel.thisptr = new PPL_Poly_Gen_Relation(PPL_Poly_Gen_Relation_nothing())
 *             raise
 *         return rel             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_rel));
  __pyx_r = ((PyObject *)__pyx_v_rel);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":574
 * 
 * 
 *     cdef _relation_with_generator(Polyhedron self, Generator g):             # <<<<<<<<<<<<<<
 *         r"""
 *         Helper method for :meth:`relation_with`.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron._relation_with_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rel);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":588
 * 
 * 
 *     cdef _relation_with_constraint(Polyhedron self, Constraint c):             # <<<<<<<<<<<<<<
 *         r"""
 *         Helper method for :meth:`relation_with`.
 */

static PyObject *__pyx_f_7pyparma_3ppl_10Polyhedron__relation_with_constraint(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_c) {
  struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_rel = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Parma_Polyhedra_Library::Poly_Con_Relation *__pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_relation_with_constraint", 0);

  /* "pyparma/ppl.pyx":592
 *         Helper method for :meth:`relation_with`.
 *         """
 *         rel = Poly_Con_Relation(True)             # <<<<<<<<<<<<<<
 *         try:
 *             rel.thisptr = new_relation_with(self.thisptr[0], c.thisptr[0])
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation)), __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rel = ((struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":593
 *         """
 *         rel = Poly_Con_Relation(True)
 *         try:             # <<<<<<<<<<<<<<
 *             rel.thisptr = new_relation_with(self.thisptr[0], c.thisptr[0])
 *         except BaseException:
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "pyparma/ppl.pyx":594
 *         rel = Poly_Con_Relation(True)
 *         try:
 *             rel.thisptr = new_relation_with(self.thisptr[0], c.thisptr[0])             # <<<<<<<<<<<<<<
 *         except BaseException:
 *             # rel.thisptr must be set to something valid or rel.__dealloc__() will segfault
 */
      try {
        __pyx_t_5 = new_relation_with((__pyx_v_self->thisptr[0]), (__pyx_v_c->thisptr[0]));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
      __pyx_v_rel->thisptr = __pyx_t_5;
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L10_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pyparma/ppl.pyx":595
 *         try:
 *             rel.thisptr = new_relation_with(self.thisptr[0], c.thisptr[0])
 *         except BaseException:             # <<<<<<<<<<<<<<
 *             # rel.thisptr must be set to something valid or rel.__dealloc__() will segfault
 *             rel.thisptr = new PPL_Poly_Con_Relation(PPL_Poly_Con_Relation_nothing())
 */
    __pyx_t_6 = PyErr_ExceptionMatches(__pyx_builtin_BaseException);
    if (__pyx_t_6) {
      __Pyx_AddTraceback("pyparma.ppl.Polyhedron._relation_with_constraint", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_8);

      /* "pyparma/ppl.pyx":597
 *         except BaseException:
 *             # rel.thisptr must be set to something valid or rel.__dealloc__() will segfault
 *             rel.thisptr = new PPL_Poly_Con_Relation(PPL_Poly_Con_Relation_nothing())             # <<<<<<<<<<<<<<
 *             raise
 *         return rel
 */
      __pyx_v_rel->thisptr = new Parma_Polyhedra_Library::Poly_Con_Relation(Parma_Polyhedra_Library::Poly_Con_Relation::nothing());

      /* "pyparma/ppl.pyx":598
 *             # rel.thisptr must be set to something valid or rel.__dealloc__() will segfault
 *             rel.thisptr = new PPL_Poly_Con_Relation(PPL_Poly_Con_Relation_nothing())
 *             raise             # <<<<<<<<<<<<<<
 *         return rel
 * 
 */
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_1, __pyx_t_7, __pyx_t_8);
      __pyx_t_1 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; 
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L10_try_end:;
  }

  /* "pyparma/ppl.pyx":599
 *             rel.thisptr = new PPL_Poly_Con_Relation(PPL_Poly_Con_Relation_nothing())
 *             raise
 *         return rel             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_rel));
  __pyx_r = ((PyObject *)__pyx_v_rel);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":588
 * 
 * 
 *     cdef _relation_with_constraint(Polyhedron self, Constraint c):             # <<<<<<<<<<<<<<
 *         r"""
 *         Helper method for :meth:`relation_with`.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron._relation_with_constraint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rel);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":602
 * 
 * 
 *     def relation_with(self, arg):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the relations holding between the polyhedron ``self``
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_17relation_with(PyObject *__pyx_v_self, PyObject *__pyx_v_arg); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_16relation_with[] = "\n        Return the relations holding between the polyhedron ``self``\n        and the generator or constraint ``arg``.\n\n        INPUT:\n\n        - ``arg`` -- a :class:`Generator` or a :class:`Constraint`.\n\n        OUTPUT:\n\n        A :class:`Poly_Gen_Relation` or a :class:`Poly_Con_Relation`\n        according to the type of the input.\n\n        Raises ``ValueError`` if ``self`` and the generator/constraint\n        ``arg`` are dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point, ray, Poly_Con_Relation\n            sage: x = Variable(0);  y = Variable(1)\n            sage: p = C_Polyhedron(2, 'empty')\n            sage: p.add_generator( point(1*x+0*y) )\n            sage: p.add_generator( point(0*x+1*y) )\n            sage: p.minimized_constraints()\n            Constraint_System {x0+x1-1==0, -x1+1>=0, x1>=0}\n            sage: p.relation_with( point(1*x+1*y) )\n            nothing\n            sage: p.relation_with( point(1*x+1*y, 2) )\n            subsumes\n            sage: p.relation_with( x+y==-1 )\n            is_disjoint\n            sage: p.relation_with( x==y )\n            strictly_intersects\n            sage: p.relation_with( x+y<=1 )\n            is_included, saturates\n            sage: p.relation_with( x+y<1 )\n            is_disjoint, saturates\n\n        In a Sage program you will usually use :meth:`relation_with`\n        together with :meth:`~sage.libs.ppl.Poly_Gen_Relation.implies`\n        or :meth:`~sage.libs.ppl.Poly_Con_Relation.implies`, for\n        example::\n\n            sage: p.relation_with( x+y<1 ).implies(Poly_Con_Relation.saturates())\n            True\n\n        You can only get relations with dimension-compatible\n        generators or constraints::\n\n            sage: z = Variable(2)\n            sage: p.relation_with( point(x+y+z) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::relation_""with(g):\n            this->space_dimension() == 2, g.space_dimension() == 3.\n            sage: p.relation_with( z>0 )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::relation_with(c):\n            this->space_dimension() == 2, c.space_dimension() == 3.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_17relation_with(PyObject *__pyx_v_self, PyObject *__pyx_v_arg) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("relation_with (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_16relation_with(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((PyObject *)__pyx_v_arg));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_16relation_with(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, PyObject *__pyx_v_arg) {
  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("relation_with", 0);

  /* "pyparma/ppl.pyx":664
 *             this->space_dimension() == 2, c.space_dimension() == 3.
 *         """
 *         if isinstance(arg, Generator):             # <<<<<<<<<<<<<<
 *             return self._relation_with_generator(arg)
 *         if isinstance(arg, Constraint):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":665
 *         """
 *         if isinstance(arg, Generator):
 *             return self._relation_with_generator(arg)             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Constraint):
 *             return self._relation_with_constraint(arg)
 */
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(((__pyx_v_arg) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_7pyparma_3ppl_Generator))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_3 = ((struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron *)__pyx_v_self->__pyx_vtab)->_relation_with_generator(__pyx_v_self, ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_arg)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":666
 *         if isinstance(arg, Generator):
 *             return self._relation_with_generator(arg)
 *         if isinstance(arg, Constraint):             # <<<<<<<<<<<<<<
 *             return self._relation_with_constraint(arg)
 *         else:
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint)); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":667
 *             return self._relation_with_generator(arg)
 *         if isinstance(arg, Constraint):
 *             return self._relation_with_constraint(arg)             # <<<<<<<<<<<<<<
 *         else:
 *             raise TypeError, 'Argument must be Generator or a Constraint'
 */
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(((__pyx_v_arg) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_7pyparma_3ppl_Constraint))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_3 = ((struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron *)__pyx_v_self->__pyx_vtab)->_relation_with_constraint(__pyx_v_self, ((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_arg)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":669
 *             return self._relation_with_constraint(arg)
 *         else:
 *             raise TypeError, 'Argument must be Generator or a Constraint'             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_Argument_must_be_Generator_or_a, 0, 0);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":602
 * 
 * 
 *     def relation_with(self, arg):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the relations holding between the polyhedron ``self``
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.relation_with", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":672
 * 
 * 
 *     def is_empty(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test if ``self`` is an empty polyhedron.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_19is_empty(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_18is_empty[] = "\n        Test if ``self`` is an empty polyhedron.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import C_Polyhedron\n            sage: C_Polyhedron(3, 'empty').is_empty()\n            True\n            sage: C_Polyhedron(3, 'universe').is_empty()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_19is_empty(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_empty (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_18is_empty(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_18is_empty(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  int __pyx_v_result;
  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("is_empty", 0);

  /* "pyparma/ppl.pyx":688
 *             False
 *         """
 *         cdef bint result = self.thisptr.is_empty()             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_v_result = __pyx_v_self->thisptr->is_empty();

  /* "pyparma/ppl.pyx":689
 *         """
 *         cdef bint result = self.thisptr.is_empty()
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":672
 * 
 * 
 *     def is_empty(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test if ``self`` is an empty polyhedron.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.is_empty", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":692
 * 
 * 
 *     def is_universe(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test if ``self`` is a universe (space-filling) polyhedron.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_21is_universe(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_20is_universe[] = "\n        Test if ``self`` is a universe (space-filling) polyhedron.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import C_Polyhedron\n            sage: C_Polyhedron(3, 'empty').is_universe()\n            False\n            sage: C_Polyhedron(3, 'universe').is_universe()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_21is_universe(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_universe (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_20is_universe(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_20is_universe(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  int __pyx_v_result;
  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("is_universe", 0);

  /* "pyparma/ppl.pyx":708
 *             True
 *         """
 *         cdef bint result = self.thisptr.is_universe()             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_v_result = __pyx_v_self->thisptr->is_universe();

  /* "pyparma/ppl.pyx":709
 *         """
 *         cdef bint result = self.thisptr.is_universe()
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":692
 * 
 * 
 *     def is_universe(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test if ``self`` is a universe (space-filling) polyhedron.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.is_universe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":712
 * 
 * 
 *     def is_topologically_closed(self):             # <<<<<<<<<<<<<<
 *         """
 *         Tests if ``self`` is topologically closed.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_23is_topologically_closed(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_22is_topologically_closed[] = "\n        Tests if ``self`` is topologically closed.\n\n        OUTPUT:\n\n        Returns ``True`` if and only if ``self`` is a topologically\n        closed subset of the ambient vector space.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, NNC_Polyhedron\n            sage: x = Variable(0);  y = Variable(1)\n            sage: C_Polyhedron(3, 'universe').is_topologically_closed()\n            True\n            sage: C_Polyhedron( x>=1 ).is_topologically_closed()\n            True\n            sage: NNC_Polyhedron( x>1 ).is_topologically_closed()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_23is_topologically_closed(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_topologically_closed (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_22is_topologically_closed(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_22is_topologically_closed(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  int __pyx_v_result;
  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("is_topologically_closed", 0);

  /* "pyparma/ppl.pyx":732
 *             False
 *         """
 *         cdef bint result = self.thisptr.is_topologically_closed()             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_v_result = __pyx_v_self->thisptr->is_topologically_closed();

  /* "pyparma/ppl.pyx":733
 *         """
 *         cdef bint result = self.thisptr.is_topologically_closed()
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":712
 * 
 * 
 *     def is_topologically_closed(self):             # <<<<<<<<<<<<<<
 *         """
 *         Tests if ``self`` is topologically closed.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.is_topologically_closed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":736
 * 
 * 
 *     def is_disjoint_from(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Tests whether ``self`` and ``y`` are disjoint.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_25is_disjoint_from(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_24is_disjoint_from[] = "\n        Tests whether ``self`` and ``y`` are disjoint.\n\n        INPUT:\n\n        - ``y`` -- a :class:`Polyhedron`.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` and ``y``\n        are disjoint.\n\n        Rayises a ``ValueError`` if ``self`` and ``y`` are\n        topology-incompatible or dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, NNC_Polyhedron\n            sage: x = Variable(0);  y = Variable(1)\n            sage: C_Polyhedron(x<=0).is_disjoint_from( C_Polyhedron(x>=1) )\n            True\n\n        This is not allowed::\n\n            sage: x = Variable(0);  y = Variable(1)\n            sage: poly_1d = C_Polyhedron(x<=0)\n            sage: poly_2d = C_Polyhedron(x+0*y>=1)\n            sage: poly_1d.is_disjoint_from(poly_2d)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::intersection_assign(y):\n            this->space_dimension() == 1, y.space_dimension() == 2.\n\n        Nor is this::\n\n            sage: x = Variable(0);  y = Variable(1)\n            sage: c_poly   =   C_Polyhedron( x<=0 )\n            sage: nnc_poly = NNC_Polyhedron( x >0 )\n            sage: c_poly.is_disjoint_from(nnc_poly)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::intersection_assign(y):\n            y is a NNC_Polyhedron.\n            sage: NNC_Polyhedron(c_poly).is_disjoint_from(nnc_poly)\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_25is_disjoint_from(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_disjoint_from (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_7pyparma_3ppl_Polyhedron, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_24is_disjoint_from(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_y));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_24is_disjoint_from(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y) {
  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("is_disjoint_from", 0);

  /* "pyparma/ppl.pyx":784
 *         """
 *         cdef bint result
 *         result = self.thisptr.is_disjoint_from(y.thisptr[0])             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->is_disjoint_from((__pyx_v_y->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_v_result = __pyx_t_1;

  /* "pyparma/ppl.pyx":785
 *         cdef bint result
 *         result = self.thisptr.is_disjoint_from(y.thisptr[0])
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":736
 * 
 * 
 *     def is_disjoint_from(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Tests whether ``self`` and ``y`` are disjoint.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.is_disjoint_from", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":788
 * 
 * 
 *     def is_discrete(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is discrete.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_27is_discrete(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_26is_discrete[] = "\n        Test whether ``self`` is discrete.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` is discrete.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point, ray\n            sage: x = Variable(0);  y = Variable(1)\n            sage: p = C_Polyhedron( point(1*x+2*y) )\n            sage: p.is_discrete()\n            True\n            sage: p.add_generator( point(x) )\n            sage: p.is_discrete()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_27is_discrete(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_discrete (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_26is_discrete(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_26is_discrete(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  int __pyx_v_result;
  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("is_discrete", 0);

  /* "pyparma/ppl.pyx":807
 *             False
 *         """
 *         cdef bint result = self.thisptr.is_discrete()             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_v_result = __pyx_v_self->thisptr->is_discrete();

  /* "pyparma/ppl.pyx":808
 *         """
 *         cdef bint result = self.thisptr.is_discrete()
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":788
 * 
 * 
 *     def is_discrete(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is discrete.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.is_discrete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":811
 * 
 * 
 *     def is_bounded(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is bounded.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_29is_bounded(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_28is_bounded[] = "\n        Test whether ``self`` is bounded.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` is a bounded polyhedron.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, NNC_Polyhedron, point, closure_point, ray\n            sage: x = Variable(0)\n            sage: p = NNC_Polyhedron( point(0*x) )\n            sage: p.add_generator( closure_point(1*x) )\n            sage: p.is_bounded()\n            True\n            sage: p.add_generator( ray(1*x) )\n            sage: p.is_bounded()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_29is_bounded(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_bounded (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_28is_bounded(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_28is_bounded(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  int __pyx_v_result;
  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("is_bounded", 0);

  /* "pyparma/ppl.pyx":831
 *             False
 *         """
 *         cdef bint result = self.thisptr.is_bounded()             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_v_result = __pyx_v_self->thisptr->is_bounded();

  /* "pyparma/ppl.pyx":832
 *         """
 *         cdef bint result = self.thisptr.is_bounded()
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":811
 * 
 * 
 *     def is_bounded(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is bounded.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.is_bounded", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":835
 * 
 * 
 *     def contains_integer_point(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` contains an integer point.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_31contains_integer_point(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_30contains_integer_point[] = "\n        Test whether ``self`` contains an integer point.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` contains an\n        integer point.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, NNC_Polyhedron\n            sage: x = Variable(0)\n            sage: p = NNC_Polyhedron(x>0)\n            sage: p.add_constraint(x<1)\n            sage: p.contains_integer_point()\n            False\n            sage: p.topological_closure_assign()\n            sage: p.contains_integer_point()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_31contains_integer_point(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("contains_integer_point (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_30contains_integer_point(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_30contains_integer_point(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  int __pyx_v_result;
  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("contains_integer_point", 0);

  /* "pyparma/ppl.pyx":856
 *             True
 *         """
 *         cdef bint result = self.thisptr.contains_integer_point()             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_v_result = __pyx_v_self->thisptr->contains_integer_point();

  /* "pyparma/ppl.pyx":857
 *         """
 *         cdef bint result = self.thisptr.contains_integer_point()
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":835
 * 
 * 
 *     def contains_integer_point(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` contains an integer point.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.contains_integer_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":860
 * 
 * 
 *     def constrains(self, Variable var):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``var`` is constrained in ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_33constrains(PyObject *__pyx_v_self, PyObject *__pyx_v_var); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_32constrains[] = "\n        Test whether ``var`` is constrained in ``self``.\n\n        INPUT:\n\n        - ``var`` -- a :class:`Variable`.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``var`` is\n        constrained in ``self``.\n\n        Raises a ``ValueError`` if ``var`` is not a space dimension of\n        ``self``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron\n            sage: x = Variable(0)\n            sage: p = C_Polyhedron(1, 'universe')\n            sage: p.constrains(x)\n            False\n            sage: p = C_Polyhedron(x>=0)\n            sage: p.constrains(x)\n            True\n            sage: y = Variable(1)\n            sage: p.constrains(y)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::constrains(v):\n            this->space_dimension() == 1, v.space_dimension() == 2.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_33constrains(PyObject *__pyx_v_self, PyObject *__pyx_v_var) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("constrains (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_ptype_7pyparma_3ppl_Variable, 1, "var", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_32constrains(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_var));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_32constrains(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_var) {
  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("constrains", 0);

  /* "pyparma/ppl.pyx":894
 *         """
 *         cdef bint result
 *         result = self.thisptr.constrains(var.thisptr[0])             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->constrains((__pyx_v_var->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_v_result = __pyx_t_1;

  /* "pyparma/ppl.pyx":895
 *         cdef bint result
 *         result = self.thisptr.constrains(var.thisptr[0])
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":860
 * 
 * 
 *     def constrains(self, Variable var):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``var`` is constrained in ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.constrains", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":898
 * 
 * 
 *     def bounds_from_above(self, Linear_Expression expr):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether the ``expr`` is bounded from above.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_35bounds_from_above(PyObject *__pyx_v_self, PyObject *__pyx_v_expr); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_34bounds_from_above[] = "\n        Test whether the ``expr`` is bounded from above.\n\n        INPUT:\n\n        - ``expr`` -- a :class:`Linear_Expression`\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``expr`` is bounded\n        from above in ``self``.\n\n        Raises a ``ValueError`` if ``expr`` and ``this`` are\n        dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, Linear_Expression\n            sage: x = Variable(0);  y = Variable(1)\n            sage: p = C_Polyhedron(y<=0)\n            sage: p.bounds_from_above(x+1)\n            False\n            sage: p.bounds_from_above(Linear_Expression(y))\n            True\n            sage: p = C_Polyhedron(x<=0)\n            sage: p.bounds_from_above(y+1)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::bounds_from_above(e):\n            this->space_dimension() == 1, e.space_dimension() == 2.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_35bounds_from_above(PyObject *__pyx_v_self, PyObject *__pyx_v_expr) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bounds_from_above (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_expr), __pyx_ptype_7pyparma_3ppl_Linear_Expression, 1, "expr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_34bounds_from_above(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_expr));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_34bounds_from_above(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_expr) {
  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("bounds_from_above", 0);

  /* "pyparma/ppl.pyx":931
 *         """
 *         cdef bint result
 *         result = self.thisptr.bounds_from_above(expr.thisptr[0])             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->bounds_from_above((__pyx_v_expr->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_v_result = __pyx_t_1;

  /* "pyparma/ppl.pyx":932
 *         cdef bint result
 *         result = self.thisptr.bounds_from_above(expr.thisptr[0])
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":898
 * 
 * 
 *     def bounds_from_above(self, Linear_Expression expr):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether the ``expr`` is bounded from above.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.bounds_from_above", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":935
 * 
 * 
 *     def bounds_from_below(self, Linear_Expression expr):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether the ``expr`` is bounded from above.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_37bounds_from_below(PyObject *__pyx_v_self, PyObject *__pyx_v_expr); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_36bounds_from_below[] = "\n        Test whether the ``expr`` is bounded from above.\n\n        INPUT:\n\n        - ``expr`` -- a :class:`Linear_Expression`\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``expr`` is bounded\n        from above in ``self``.\n\n        Raises a ``ValueError`` if ``expr`` and ``this`` are\n        dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, Linear_Expression\n            sage: x = Variable(0);  y = Variable(1)\n            sage: p = C_Polyhedron(y>=0)\n            sage: p.bounds_from_below(x+1)\n            False\n            sage: p.bounds_from_below(Linear_Expression(y))\n            True\n            sage: p = C_Polyhedron(x<=0)\n            sage: p.bounds_from_below(y+1)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::bounds_from_below(e):\n            this->space_dimension() == 1, e.space_dimension() == 2.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_37bounds_from_below(PyObject *__pyx_v_self, PyObject *__pyx_v_expr) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bounds_from_below (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_expr), __pyx_ptype_7pyparma_3ppl_Linear_Expression, 1, "expr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_36bounds_from_below(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_expr));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_36bounds_from_below(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_expr) {
  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("bounds_from_below", 0);

  /* "pyparma/ppl.pyx":968
 *         """
 *         cdef bint result
 *         result = self.thisptr.bounds_from_below(expr.thisptr[0])             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->bounds_from_below((__pyx_v_expr->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_v_result = __pyx_t_1;

  /* "pyparma/ppl.pyx":969
 *         cdef bint result
 *         result = self.thisptr.bounds_from_below(expr.thisptr[0])
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":935
 * 
 * 
 *     def bounds_from_below(self, Linear_Expression expr):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether the ``expr`` is bounded from above.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.bounds_from_below", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":972
 * 
 * 
 *     def maximize(self, Linear_Expression expr):             # <<<<<<<<<<<<<<
 *         r"""
 *         Maximize ``expr``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_39maximize(PyObject *__pyx_v_self, PyObject *__pyx_v_expr); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_38maximize[] = "\n        Maximize ``expr``.\n\n        INPUT:\n\n        - ``expr`` -- a :class:`Linear_Expression`.\n\n        OUTPUT:\n\n        A dictionary with the following keyword:value pair:\n\n        * ``'bounded'``: Boolean. Whether the linear expression\n          ``expr`` is bounded from above on ``self``.\n\n        If ``expr`` is bounded from above, the following additional\n        keyword:value pairs are set to provide information about the\n        supremum:\n\n        * ``'sup_n'``: Integer. The numerator of the supremum value.\n\n        * ``'sup_d'``: Non-zero integer. The denominator of the supremum\n          value.\n\n        * ``'maximum'``: Boolean. ``True`` if and only if the supremum\n          is also the maximum value.\n\n        * ``'generator'``: a :class:`Generator`. A point or closure\n          point where expr reaches its supremum value.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, NNC_Polyhedron, Constraint_System, Linear_Expression\n            sage: x = Variable(0);  y = Variable(1)\n            sage: cs = Constraint_System()\n            sage: cs.insert( x>=0 )\n            sage: cs.insert( y>=0 )\n            sage: cs.insert( 3*x+5*y<=10 )\n            sage: p = C_Polyhedron(cs)\n            sage: p.maximize( x+y )\n            {'bounded': True,\n             'generator': point(10/3, 0/3),\n             'maximum': True,\n             'sup_d': 3,\n             'sup_n': 10}\n\n        Unbounded case::\n\n            sage: cs = Constraint_System()\n            sage: cs.insert( x>0 )\n            sage: p = NNC_Polyhedron(cs)\n            sage: p.maximize( +x )\n            {'bounded': False}\n            sage: p.maximize( -x )\n            {'bounded': True,\n             'generator': closure_point(0/1),\n             'maximum': False,\n             'sup_d': 1,\n             'sup_n': 0}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_39maximize(PyObject *__pyx_v_self, PyObject *__pyx_v_expr) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("maximize (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_expr), __pyx_ptype_7pyparma_3ppl_Linear_Expression, 1, "expr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_38maximize(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_expr));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_38maximize(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_expr) {
  Parma_Polyhedra_Library::Coefficient __pyx_v_sup_n;
  Parma_Polyhedra_Library::Coefficient __pyx_v_sup_d;
  struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g = 0;
  bool __pyx_v_maximum;
  int __pyx_v_rc;
  mpz_t __pyx_v_Int_sup_n;
  mpz_t __pyx_v_Int_sup_d;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("maximize", 0);

  /* "pyparma/ppl.pyx":1034
 *         cdef PPL_Coefficient sup_n
 *         cdef PPL_Coefficient sup_d
 *         cdef Generator g = point()             # <<<<<<<<<<<<<<
 *         cdef cppbool maximum
 *         rc = self.thisptr.maximize(<PPL_Linear_Expression&>expr.thisptr[0], sup_n, sup_d, maximum, g.thisptr[0])
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_point_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1034; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1034; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_7pyparma_3ppl_Generator))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1034; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_g = ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":1036
 *         cdef Generator g = point()
 *         cdef cppbool maximum
 *         rc = self.thisptr.maximize(<PPL_Linear_Expression&>expr.thisptr[0], sup_n, sup_d, maximum, g.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 *         cdef mpz_t Int_sup_n
 */
  __pyx_v_rc = __pyx_v_self->thisptr->maximize(((Parma_Polyhedra_Library::Linear_Expression &)(__pyx_v_expr->thisptr[0])), __pyx_v_sup_n, __pyx_v_sup_d, __pyx_v_maximum, (__pyx_v_g->thisptr[0]));

  /* "pyparma/ppl.pyx":1039
 * 
 *         cdef mpz_t Int_sup_n
 *         mpz_init(Int_sup_n)             # <<<<<<<<<<<<<<
 *         mpz_set_si(Int_sup_n, 0)
 *         mpz_set(Int_sup_n, sup_n.get_mpz_t())
 */
  mpz_init(__pyx_v_Int_sup_n);

  /* "pyparma/ppl.pyx":1040
 *         cdef mpz_t Int_sup_n
 *         mpz_init(Int_sup_n)
 *         mpz_set_si(Int_sup_n, 0)             # <<<<<<<<<<<<<<
 *         mpz_set(Int_sup_n, sup_n.get_mpz_t())
 *         cdef mpz_t Int_sup_d
 */
  mpz_set_si(__pyx_v_Int_sup_n, 0);

  /* "pyparma/ppl.pyx":1041
 *         mpz_init(Int_sup_n)
 *         mpz_set_si(Int_sup_n, 0)
 *         mpz_set(Int_sup_n, sup_n.get_mpz_t())             # <<<<<<<<<<<<<<
 *         cdef mpz_t Int_sup_d
 *         mpz_init(Int_sup_n)
 */
  mpz_set(__pyx_v_Int_sup_n, __pyx_v_sup_n.get_mpz_t());

  /* "pyparma/ppl.pyx":1043
 *         mpz_set(Int_sup_n, sup_n.get_mpz_t())
 *         cdef mpz_t Int_sup_d
 *         mpz_init(Int_sup_n)             # <<<<<<<<<<<<<<
 *         mpz_set_si(Int_sup_d, 0)
 *         mpz_set(Int_sup_d, sup_d.get_mpz_t())
 */
  mpz_init(__pyx_v_Int_sup_n);

  /* "pyparma/ppl.pyx":1044
 *         cdef mpz_t Int_sup_d
 *         mpz_init(Int_sup_n)
 *         mpz_set_si(Int_sup_d, 0)             # <<<<<<<<<<<<<<
 *         mpz_set(Int_sup_d, sup_d.get_mpz_t())
 * 
 */
  mpz_set_si(__pyx_v_Int_sup_d, 0);

  /* "pyparma/ppl.pyx":1045
 *         mpz_init(Int_sup_n)
 *         mpz_set_si(Int_sup_d, 0)
 *         mpz_set(Int_sup_d, sup_d.get_mpz_t())             # <<<<<<<<<<<<<<
 * 
 *         if rc:
 */
  mpz_set(__pyx_v_Int_sup_d, __pyx_v_sup_d.get_mpz_t());

  /* "pyparma/ppl.pyx":1047
 *         mpz_set(Int_sup_d, sup_d.get_mpz_t())
 * 
 *         if rc:             # <<<<<<<<<<<<<<
 *             return { 'bounded':True, 'sup_n':mpz_get_si(Int_sup_n), 'sup_d':mpz_get_si(Int_sup_d), 'maximum':maximum, 'generator':g }
 *         else:
 */
  __pyx_t_3 = (__pyx_v_rc != 0);
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":1048
 * 
 *         if rc:
 *             return { 'bounded':True, 'sup_n':mpz_get_si(Int_sup_n), 'sup_d':mpz_get_si(Int_sup_d), 'maximum':maximum, 'generator':g }             # <<<<<<<<<<<<<<
 *         else:
 *             return { 'bounded':False }
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_bounded, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_1 = __Pyx_PyInt_From_signed__long(mpz_get_si(__pyx_v_Int_sup_n)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sup_n, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_From_signed__long(mpz_get_si(__pyx_v_Int_sup_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sup_d, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_maximum); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_maximum, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_generator, ((PyObject *)__pyx_v_g)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":1050
 *             return { 'bounded':True, 'sup_n':mpz_get_si(Int_sup_n), 'sup_d':mpz_get_si(Int_sup_d), 'maximum':maximum, 'generator':g }
 *         else:
 *             return { 'bounded':False }             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1050; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_bounded, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1050; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":972
 * 
 * 
 *     def maximize(self, Linear_Expression expr):             # <<<<<<<<<<<<<<
 *         r"""
 *         Maximize ``expr``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.maximize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_g);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1053
 * 
 * 
 *     def minimize(self, Linear_Expression expr):             # <<<<<<<<<<<<<<
 *         r"""
 *         Minimize ``expr``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_41minimize(PyObject *__pyx_v_self, PyObject *__pyx_v_expr); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_40minimize[] = "\n        Minimize ``expr``.\n\n        INPUT:\n\n        - ``expr`` -- a :class:`Linear_Expression`.\n\n        OUTPUT:\n\n        A dictionary with the following keyword:value pair:\n\n        * ``'bounded'``: Boolean. Whether the linear expression\n          ``expr`` is bounded from below on ``self``.\n\n        If ``expr`` is bounded from below, the following additional\n        keyword:value pairs are set to provide information about the\n        infimum:\n\n        * ``'inf_n'``: Integer. The numerator of the infimum value.\n\n        * ``'inf_d'``: Non-zero integer. The denominator of the infimum\n          value.\n\n        * ``'minimum'``: Boolean. ``True`` if and only if the infimum\n          is also the minimum value.\n\n        * ``'generator'``: a :class:`Generator`. A point or closure\n          point where expr reaches its infimum value.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, NNC_Polyhedron, Constraint_System, Linear_Expression\n            sage: x = Variable(0);  y = Variable(1)\n            sage: cs = Constraint_System()\n            sage: cs.insert( x>=0 )\n            sage: cs.insert( y>=0 )\n            sage: cs.insert( 3*x+5*y<=10 )\n            sage: p = C_Polyhedron(cs)\n            sage: p.minimize( x+y )\n            {'bounded': True,\n             'generator': point(0/1, 0/1),\n             'inf_d': 1,\n             'inf_n': 0,\n             'minimum': True}\n\n        Unbounded case::\n\n            sage: cs = Constraint_System()\n            sage: cs.insert( x>0 )\n            sage: p = NNC_Polyhedron(cs)\n            sage: p.minimize( +x )\n            {'bounded': True,\n             'generator': closure_point(0/1),\n             'inf_d': 1,\n             'inf_n': 0,\n             'minimum': False}\n            sage: p.minimize( -x )\n            {'bounded': False}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_41minimize(PyObject *__pyx_v_self, PyObject *__pyx_v_expr) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("minimize (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_expr), __pyx_ptype_7pyparma_3ppl_Linear_Expression, 1, "expr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_40minimize(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_expr));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_40minimize(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_expr) {
  Parma_Polyhedra_Library::Coefficient __pyx_v_inf_n;
  Parma_Polyhedra_Library::Coefficient __pyx_v_inf_d;
  struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g = 0;
  bool __pyx_v_minimum;
  int __pyx_v_rc;
  mpz_t __pyx_v_Int_inf_n;
  mpz_t __pyx_v_Int_inf_d;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("minimize", 0);

  /* "pyparma/ppl.pyx":1115
 *         cdef PPL_Coefficient inf_n
 *         cdef PPL_Coefficient inf_d
 *         cdef Generator g = point()             # <<<<<<<<<<<<<<
 *         cdef cppbool minimum
 *         rc = self.thisptr.minimize(<PPL_Linear_Expression&>expr.thisptr[0], inf_n, inf_d, minimum, g.thisptr[0])
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_point_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_7pyparma_3ppl_Generator))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_g = ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":1117
 *         cdef Generator g = point()
 *         cdef cppbool minimum
 *         rc = self.thisptr.minimize(<PPL_Linear_Expression&>expr.thisptr[0], inf_n, inf_d, minimum, g.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 *         cdef mpz_t Int_inf_n
 */
  __pyx_v_rc = __pyx_v_self->thisptr->minimize(((Parma_Polyhedra_Library::Linear_Expression &)(__pyx_v_expr->thisptr[0])), __pyx_v_inf_n, __pyx_v_inf_d, __pyx_v_minimum, (__pyx_v_g->thisptr[0]));

  /* "pyparma/ppl.pyx":1120
 * 
 *         cdef mpz_t Int_inf_n
 *         mpz_init(Int_inf_n)             # <<<<<<<<<<<<<<
 *         mpz_set_si(Int_inf_n, 0)
 *         mpz_set(Int_inf_n, inf_n.get_mpz_t())
 */
  mpz_init(__pyx_v_Int_inf_n);

  /* "pyparma/ppl.pyx":1121
 *         cdef mpz_t Int_inf_n
 *         mpz_init(Int_inf_n)
 *         mpz_set_si(Int_inf_n, 0)             # <<<<<<<<<<<<<<
 *         mpz_set(Int_inf_n, inf_n.get_mpz_t())
 *         cdef mpz_t Int_inf_d
 */
  mpz_set_si(__pyx_v_Int_inf_n, 0);

  /* "pyparma/ppl.pyx":1122
 *         mpz_init(Int_inf_n)
 *         mpz_set_si(Int_inf_n, 0)
 *         mpz_set(Int_inf_n, inf_n.get_mpz_t())             # <<<<<<<<<<<<<<
 *         cdef mpz_t Int_inf_d
 *         mpz_init(Int_inf_d)
 */
  mpz_set(__pyx_v_Int_inf_n, __pyx_v_inf_n.get_mpz_t());

  /* "pyparma/ppl.pyx":1124
 *         mpz_set(Int_inf_n, inf_n.get_mpz_t())
 *         cdef mpz_t Int_inf_d
 *         mpz_init(Int_inf_d)             # <<<<<<<<<<<<<<
 *         mpz_set_si(Int_inf_d, 0)
 *         mpz_set(Int_inf_d, inf_d.get_mpz_t())
 */
  mpz_init(__pyx_v_Int_inf_d);

  /* "pyparma/ppl.pyx":1125
 *         cdef mpz_t Int_inf_d
 *         mpz_init(Int_inf_d)
 *         mpz_set_si(Int_inf_d, 0)             # <<<<<<<<<<<<<<
 *         mpz_set(Int_inf_d, inf_d.get_mpz_t())
 * 
 */
  mpz_set_si(__pyx_v_Int_inf_d, 0);

  /* "pyparma/ppl.pyx":1126
 *         mpz_init(Int_inf_d)
 *         mpz_set_si(Int_inf_d, 0)
 *         mpz_set(Int_inf_d, inf_d.get_mpz_t())             # <<<<<<<<<<<<<<
 * 
 *         if rc:
 */
  mpz_set(__pyx_v_Int_inf_d, __pyx_v_inf_d.get_mpz_t());

  /* "pyparma/ppl.pyx":1128
 *         mpz_set(Int_inf_d, inf_d.get_mpz_t())
 * 
 *         if rc:             # <<<<<<<<<<<<<<
 *             return { 'bounded':True, 'inf_n':mpz_get_si(Int_inf_n), 'inf_d':mpz_get_si(Int_inf_d), 'minimum':minimum, 'generator':g }
 *         else:
 */
  __pyx_t_3 = (__pyx_v_rc != 0);
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":1129
 * 
 *         if rc:
 *             return { 'bounded':True, 'inf_n':mpz_get_si(Int_inf_n), 'inf_d':mpz_get_si(Int_inf_d), 'minimum':minimum, 'generator':g }             # <<<<<<<<<<<<<<
 *         else:
 *             return { 'bounded':False }
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_bounded, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_1 = __Pyx_PyInt_From_signed__long(mpz_get_si(__pyx_v_Int_inf_n)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_inf_n, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_From_signed__long(mpz_get_si(__pyx_v_Int_inf_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_inf_d, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_minimum); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_minimum, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_generator, ((PyObject *)__pyx_v_g)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":1131
 *             return { 'bounded':True, 'inf_n':mpz_get_si(Int_inf_n), 'inf_d':mpz_get_si(Int_inf_d), 'minimum':minimum, 'generator':g }
 *         else:
 *             return { 'bounded':False }             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_bounded, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":1053
 * 
 * 
 *     def minimize(self, Linear_Expression expr):             # <<<<<<<<<<<<<<
 *         r"""
 *         Minimize ``expr``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.minimize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_g);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1134
 * 
 * 
 *     def contains(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` contains ``y``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_43contains(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_42contains[] = "\n        Test whether ``self`` contains ``y``.\n\n        INPUT:\n\n        - ``y`` -- a :class:`Polyhedron`.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` contains ``y``.\n\n        Raises a ``ValueError`` if ``self`` and ``y`` are\n        topology-incompatible or dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, NNC_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p0 = C_Polyhedron( x>=0 )\n            sage: p1 = C_Polyhedron( x>=1 )\n            sage: p0.contains(p1)\n            True\n            sage: p1.contains(p0)\n            False\n\n        Errors are raised if the dimension or topology is not compatible::\n\n            sage: p0.contains(C_Polyhedron(y>=0))\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::contains(y):\n            this->space_dimension() == 1, y.space_dimension() == 2.\n            sage: p0.contains(NNC_Polyhedron(x>0))\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::contains(y):\n            y is a NNC_Polyhedron.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_43contains(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("contains (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_7pyparma_3ppl_Polyhedron, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_42contains(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_y));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_42contains(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y) {
  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("contains", 0);

  /* "pyparma/ppl.pyx":1175
 *         """
 *         cdef bint result
 *         result = self.thisptr.contains(y.thisptr[0])             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->contains((__pyx_v_y->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_v_result = __pyx_t_1;

  /* "pyparma/ppl.pyx":1176
 *         cdef bint result
 *         result = self.thisptr.contains(y.thisptr[0])
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":1134
 * 
 * 
 *     def contains(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` contains ``y``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.contains", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1179
 * 
 * 
 *     def strictly_contains(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` strictly contains ``y``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_45strictly_contains(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_44strictly_contains[] = "\n        Test whether ``self`` strictly contains ``y``.\n\n        INPUT:\n\n        - ``y`` -- a :class:`Polyhedron`.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` contains\n        ``y`` and ``self`` does not equal ``y``.\n\n        Raises a ``ValueError`` if ``self`` and ``y`` are\n        topology-incompatible or dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, NNC_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p0 = C_Polyhedron( x>=0 )\n            sage: p1 = C_Polyhedron( x>=1 )\n            sage: p0.strictly_contains(p1)\n            True\n            sage: p1.strictly_contains(p0)\n            False\n\n        Errors are raised if the dimension or topology is not compatible::\n\n            sage: p0.strictly_contains(C_Polyhedron(y>=0))\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::contains(y):\n            this->space_dimension() == 1, y.space_dimension() == 2.\n            sage: p0.strictly_contains(NNC_Polyhedron(x>0))\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::contains(y):\n            y is a NNC_Polyhedron.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_45strictly_contains(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("strictly_contains (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_7pyparma_3ppl_Polyhedron, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_44strictly_contains(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_y));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_44strictly_contains(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y) {
  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("strictly_contains", 0);

  /* "pyparma/ppl.pyx":1221
 *         """
 *         cdef bint result
 *         result = self.thisptr.strictly_contains(y.thisptr[0])             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->strictly_contains((__pyx_v_y->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_v_result = __pyx_t_1;

  /* "pyparma/ppl.pyx":1222
 *         cdef bint result
 *         result = self.thisptr.strictly_contains(y.thisptr[0])
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":1179
 * 
 * 
 *     def strictly_contains(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` strictly contains ``y``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.strictly_contains", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1225
 * 
 * 
 *     def add_constraint(self, Constraint c):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add a constraint to the polyhedron.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_47add_constraint(PyObject *__pyx_v_self, PyObject *__pyx_v_c); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_46add_constraint[] = "\n        Add a constraint to the polyhedron.\n\n        Adds a copy of constraint ``c`` to the system of constraints\n        of ``self``, without minimizing the result.\n\n        See alse :meth:`add_constraints`.\n\n        INPUT:\n\n        - ``c`` -- the :class:`Constraint` that will be added to the\n          system of constraints of ``self``.\n\n        OUTPUT:\n\n        This method modifies the polyhedron ``self`` and does not\n        return anything.\n\n        Raises a ``ValueError`` if ``self`` and the constraint ``c`` are\n        topology-incompatible or dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron( y>=0 )\n            sage: p.add_constraint( x>=0 )\n\n         We just added a 1-d constraint to a 2-d polyhedron, this is\n         fine. The other way is not::\n\n            sage: p = C_Polyhedron( x>=0 )\n            sage: p.add_constraint( y>=0 )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_constraint(c):\n            this->space_dimension() == 1, c.space_dimension() == 2.\n\n         The constraint must also be topology-compatible, that is,\n         :class:`C_Polyhedron` only allows non-strict inequalities::\n\n            sage: p = C_Polyhedron( x>=0 )\n            sage: p.add_constraint( x< 1 )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_constraint(c):\n            c is a strict inequality.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_47add_constraint(PyObject *__pyx_v_self, PyObject *__pyx_v_c) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_constraint (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_7pyparma_3ppl_Constraint, 1, "c", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_46add_constraint(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_c));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_46add_constraint(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_c) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_constraint", 0);

  /* "pyparma/ppl.pyx":1275
 *             c is a strict inequality.
 *         """
 *         self.thisptr.add_constraint(c.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_v_self->thisptr->add_constraint((__pyx_v_c->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1225
 * 
 * 
 *     def add_constraint(self, Constraint c):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add a constraint to the polyhedron.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.add_constraint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1278
 * 
 * 
 *     def add_generator(self, Generator g):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add a generator to the polyhedron.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_49add_generator(PyObject *__pyx_v_self, PyObject *__pyx_v_g); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_48add_generator[] = "\n        Add a generator to the polyhedron.\n\n        Adds a copy of constraint ``c`` to the system of generators\n        of ``self``, without minimizing the result.\n\n        INPUT:\n\n        - ``g`` -- the :class:`Generator` that will be added to the\n          system of Generators of ``self``.\n\n        OUTPUT:\n\n        This method modifies the polyhedron ``self`` and does not\n        return anything.\n\n        Raises a ``ValueError`` if ``self`` and the generator ``g``\n        are topology-incompatible or dimension-incompatible, or if\n        ``self`` is an empty polyhedron and ``g`` is not a point.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point, closure_point, ray\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron(1, 'empty')\n            sage: p.add_generator( point(0*x) )\n\n         We just added a 1-d generator to a 2-d polyhedron, this is\n         fine. The other way is not::\n\n            sage: p = C_Polyhedron(1, 'empty')\n            sage: p.add_generator(  point(0*y) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_generator(g):\n            this->space_dimension() == 1, g.space_dimension() == 2.\n\n         The constraint must also be topology-compatible, that is,\n         :class:`C_Polyhedron` does not allow :func:`closure_point`\n         generators::\n\n            sage: p = C_Polyhedron( point(0*x+0*y) )\n            sage: p.add_generator( closure_point(0*x) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_generator(g):\n            g is a closure point.\n\n        Finally, ever non-empty polyhedron must have at least one\n        point generator::\n\n            sage: p = C_Polyhedron(3, 'empty')\n            sage: p.add_generator( ray(x) )\n            Traceback (most recent call last):\n        ""    ...\n            ValueError: PPL::C_Polyhedron::add_generator(g):\n            *this is an empty polyhedron and g is not a point.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_49add_generator(PyObject *__pyx_v_self, PyObject *__pyx_v_g) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_generator (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_7pyparma_3ppl_Generator, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_48add_generator(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_g));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_48add_generator(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_generator", 0);

  /* "pyparma/ppl.pyx":1338
 *             *this is an empty polyhedron and g is not a point.
 *         """
 *         self.thisptr.add_generator(g.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_v_self->thisptr->add_generator((__pyx_v_g->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1278
 * 
 * 
 *     def add_generator(self, Generator g):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add a generator to the polyhedron.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.add_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1341
 * 
 * 
 *     def add_constraints(self, Constraint_System cs):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add constraints to the polyhedron.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_51add_constraints(PyObject *__pyx_v_self, PyObject *__pyx_v_cs); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_50add_constraints[] = "\n        Add constraints to the polyhedron.\n\n        Adds a copy of constraints in ``cs`` to the system of constraints\n        of ``self``, without minimizing the result.\n\n        See alse :meth:`add_constraint`.\n\n        INPUT:\n\n        - ``cs`` -- the :class:`Constraint_System` that will be added\n          to the system of constraints of ``self``.\n\n        OUTPUT:\n\n        This method modifies the polyhedron ``self`` and does not\n        return anything.\n\n        Raises a ``ValueError`` if ``self`` and the constraints in\n        ``cs`` are topology-incompatible or dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, Constraint_System\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: cs = Constraint_System()\n            sage: cs.insert(x>=0)\n            sage: cs.insert(y>=0)\n            sage: p = C_Polyhedron( y<=1 )\n            sage: p.add_constraints(cs)\n\n         We just added a 1-d constraint to a 2-d polyhedron, this is\n         fine. The other way is not::\n\n            sage: p = C_Polyhedron( x<=1 )\n            sage: p.add_constraints(cs)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_recycled_constraints(cs):\n            this->space_dimension() == 1, cs.space_dimension() == 2.\n\n         The constraints must also be topology-compatible, that is,\n         :class:`C_Polyhedron` only allows non-strict inequalities::\n\n            sage: p = C_Polyhedron( x>=0 )\n            sage: p.add_constraints( Constraint_System(x<0) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_recycled_constraints(cs):\n            cs contains strict inequalities.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_51add_constraints(PyObject *__pyx_v_self, PyObject *__pyx_v_cs) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_constraints (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cs), __pyx_ptype_7pyparma_3ppl_Constraint_System, 1, "cs", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_50add_constraints(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_cs));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_50add_constraints(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_cs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_constraints", 0);

  /* "pyparma/ppl.pyx":1394
 *             cs contains strict inequalities.
 *         """
 *         self.thisptr.add_constraints(cs.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_v_self->thisptr->add_constraints((__pyx_v_cs->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1341
 * 
 * 
 *     def add_constraints(self, Constraint_System cs):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add constraints to the polyhedron.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.add_constraints", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1397
 * 
 * 
 *     def add_generators(self, Generator_System gs):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add generators to the polyhedron.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_53add_generators(PyObject *__pyx_v_self, PyObject *__pyx_v_gs); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_52add_generators[] = "\n        Add generators to the polyhedron.\n\n        Adds a copy of the generators in ``gs`` to the system of\n        generators of ``self``, without minimizing the result.\n\n        See alse :meth:`add_generator`.\n\n        INPUT:\n\n        - ``gs`` -- the :class:`Generator_System` that will be added\n          to the system of constraints of ``self``.\n\n        OUTPUT:\n\n        This method modifies the polyhedron ``self`` and does not\n        return anything.\n\n        Raises a ``ValueError`` if ``self`` and one of the generators\n        in ``gs`` are topology-incompatible or dimension-incompatible,\n        or if ``self`` is an empty polyhedron and ``gs`` does not\n        contain a point.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, Generator_System, point, ray, closure_point\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: gs = Generator_System()\n            sage: gs.insert(point(0*x+0*y))\n            sage: gs.insert(point(1*x+1*y))\n            sage: p = C_Polyhedron(2, 'empty')\n            sage: p.add_generators(gs)\n\n         We just added a 1-d constraint to a 2-d polyhedron, this is\n         fine. The other way is not::\n\n            sage: p = C_Polyhedron(1, 'empty')\n            sage: p.add_generators(gs)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_recycled_generators(gs):\n            this->space_dimension() == 1, gs.space_dimension() == 2.\n\n         The constraints must also be topology-compatible, that is,\n         :class:`C_Polyhedron` does not allow :func:`closure_point`\n         generators::\n\n            sage: p = C_Polyhedron( point(0*x+0*y) )\n            sage: p.add_generators( Generator_System(closure_point(x) ))\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_recycled_generators(gs):\n            gs co""ntains closure points.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_53add_generators(PyObject *__pyx_v_self, PyObject *__pyx_v_gs) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_generators (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gs), __pyx_ptype_7pyparma_3ppl_Generator_System, 1, "gs", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_52add_generators(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_gs));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_52add_generators(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_gs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_generators", 0);

  /* "pyparma/ppl.pyx":1453
 *             gs contains closure points.
 *         """
 *         self.thisptr.add_generators(gs.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_v_self->thisptr->add_generators((__pyx_v_gs->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1397
 * 
 * 
 *     def add_generators(self, Generator_System gs):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add generators to the polyhedron.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.add_generators", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1456
 * 
 * 
 *     def unconstrain(self, Variable var):             # <<<<<<<<<<<<<<
 *         r"""
 *         Compute the cylindrification of ``self`` with respect to space
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_55unconstrain(PyObject *__pyx_v_self, PyObject *__pyx_v_var); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_54unconstrain[] = "\n        Compute the cylindrification of ``self`` with respect to space\n        dimension ``var``.\n\n        INPUT:\n\n        - ``var`` -- a :class:`Variable`. The space dimension that\n          will be unconstrained.  Exceptions:\n\n        OUTPUT:\n\n        This method assigns the cylindrification to ``self`` and does\n        not return anything.\n\n        Raises a ``ValueError`` if ``var`` is not a space dimension of\n        ``self``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron( point(x+y) ); p\n            A 0-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point\n            sage: p.unconstrain(x); p\n            A 1-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 1 line\n            sage: z = Variable(2)\n            sage: p.unconstrain(z)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::unconstrain(var):\n            this->space_dimension() == 2, required space dimension == 3.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_55unconstrain(PyObject *__pyx_v_self, PyObject *__pyx_v_var) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("unconstrain (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_ptype_7pyparma_3ppl_Variable, 1, "var", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_54unconstrain(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_var));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_54unconstrain(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_var) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("unconstrain", 0);

  /* "pyparma/ppl.pyx":1490
 *             this->space_dimension() == 2, required space dimension == 3.
 *         """
 *         self.thisptr.unconstrain(var.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_v_self->thisptr->unconstrain((__pyx_v_var->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1456
 * 
 * 
 *     def unconstrain(self, Variable var):             # <<<<<<<<<<<<<<
 *         r"""
 *         Compute the cylindrification of ``self`` with respect to space
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.unconstrain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1493
 * 
 * 
 *     def intersection_assign(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` the intersection of ``self`` and ``y``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_57intersection_assign(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_56intersection_assign[] = "\n        Assign to ``self`` the intersection of ``self`` and ``y``.\n\n        INPUT:\n\n        - ``y`` -- a :class:`Polyhedron`\n\n        OUTPUT:\n\n        This method assigns the intersection to ``self`` and does not\n        return anything.\n\n        Raises a ``ValueError`` if ``self`` and and ``y`` are\n        topology-incompatible or dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, NNC_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron( 1*x+0*y >= 0 )\n            sage: p.intersection_assign( C_Polyhedron(y>=0) )\n            sage: p.constraints()\n            Constraint_System {x0>=0, x1>=0}\n            sage: z = Variable(2)\n            sage: p.intersection_assign( C_Polyhedron(z>=0) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::intersection_assign(y):\n            this->space_dimension() == 2, y.space_dimension() == 3.\n            sage: p.intersection_assign( NNC_Polyhedron(x+y<1) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::intersection_assign(y):\n            y is a NNC_Polyhedron.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_57intersection_assign(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("intersection_assign (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_7pyparma_3ppl_Polyhedron, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_56intersection_assign(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_y));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_56intersection_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("intersection_assign", 0);

  /* "pyparma/ppl.pyx":1530
 *             y is a NNC_Polyhedron.
 *         """
 *         self.thisptr.intersection_assign(y.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_v_self->thisptr->intersection_assign((__pyx_v_y->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1493
 * 
 * 
 *     def intersection_assign(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` the intersection of ``self`` and ``y``.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.intersection_assign", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1533
 * 
 * 
 *     def poly_hull_assign(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` the poly-hull of ``self`` and ``y``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_59poly_hull_assign(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_58poly_hull_assign[] = "\n        Assign to ``self`` the poly-hull of ``self`` and ``y``.\n\n        For any pair of NNC polyhedra `P_1` and `P_2`, the convex\n        polyhedral hull (or poly-hull) of is the smallest NNC\n        polyhedron that includes both `P_1` and `P_2`. The poly-hull\n        of any pair of closed polyhedra in is also closed.\n\n        INPUT:\n\n        - ``y`` -- a :class:`Polyhedron`\n\n        OUTPUT:\n\n        This method assigns the poly-hull to ``self`` and does not\n        return anything.\n\n        Raises a ``ValueError`` if ``self`` and and ``y`` are\n        topology-incompatible or dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point, NNC_Polyhedron\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron( point(1*x+0*y) )\n            sage: p.poly_hull_assign(C_Polyhedron( point(0*x+1*y) ))\n            sage: p.generators()\n            Generator_System {point(0/1, 1/1), point(1/1, 0/1)}\n\n        ``self`` and ``y`` must be dimension- and topology-compatible,\n        or an exception is raised::\n\n            sage: z = Variable(2)\n            sage: p.poly_hull_assign( C_Polyhedron(z>=0) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::poly_hull_assign(y):\n            this->space_dimension() == 2, y.space_dimension() == 3.\n            sage: p.poly_hull_assign( NNC_Polyhedron(x+y<1) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::poly_hull_assign(y):\n            y is a NNC_Polyhedron.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_59poly_hull_assign(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("poly_hull_assign (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_7pyparma_3ppl_Polyhedron, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_58poly_hull_assign(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_y));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_58poly_hull_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("poly_hull_assign", 0);

  /* "pyparma/ppl.pyx":1579
 *             y is a NNC_Polyhedron.
 *         """
 *         self.thisptr.poly_hull_assign(y.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_v_self->thisptr->poly_hull_assign((__pyx_v_y->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1533
 * 
 * 
 *     def poly_hull_assign(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` the poly-hull of ``self`` and ``y``.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.poly_hull_assign", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1585
 * 
 * 
 *     def poly_difference_assign(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` the poly-difference of ``self`` and ``y``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_61poly_difference_assign(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_60poly_difference_assign[] = "\n        Assign to ``self`` the poly-difference of ``self`` and ``y``.\n\n        For any pair of NNC polyhedra `P_1` and `P_2` the convex\n        polyhedral difference (or poly-difference) of `P_1` and `P_2`\n        is defined as the smallest convex polyhedron containing the\n        set-theoretic difference `P_1\\setminus P_2` of `P_1` and\n        `P_2`.\n\n        In general, even if `P_1` and `P_2` are topologically closed\n        polyhedra, their poly-difference may be a convex polyhedron\n        that is not topologically closed. For this reason, when\n        computing the poly-difference of two :class:`C_Polyhedron`,\n        the library will enforce the topological closure of the\n        result.\n\n        INPUT:\n\n        - ``y`` -- a :class:`Polyhedron`\n\n        OUTPUT:\n\n        This method assigns the poly-difference to ``self`` and does\n        not return anything.\n\n        Raises a ``ValueError`` if ``self`` and and ``y`` are\n        topology-incompatible or dimension-incompatible.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point, closure_point, NNC_Polyhedron\n            sage: x = Variable(0)\n            sage: p = NNC_Polyhedron( point(0*x) )\n            sage: p.add_generator( point(1*x) )\n            sage: p.poly_difference_assign(NNC_Polyhedron( point(0*x) ))\n            sage: p.minimized_constraints()\n            Constraint_System {-x0+1>=0, x0>0}\n\n        The poly-difference of :class:`C_polyhedron` is really its closure::\n\n            sage: p = C_Polyhedron( point(0*x) )\n            sage: p.add_generator( point(1*x) )\n            sage: p.poly_difference_assign(C_Polyhedron( point(0*x) ))\n            sage: p.minimized_constraints()\n            Constraint_System {x0>=0, -x0+1>=0}\n\n        ``self`` and ``y`` must be dimension- and topology-compatible,\n        or an exception is raised::\n\n            sage: y = Variable(1)\n            sage: p.poly_difference_assign( C""_Polyhedron(y>=0) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::poly_difference_assign(y):\n            this->space_dimension() == 1, y.space_dimension() == 2.\n            sage: p.poly_difference_assign( NNC_Polyhedron(x+y<1) )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::poly_difference_assign(y):\n            y is a NNC_Polyhedron.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_61poly_difference_assign(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("poly_difference_assign (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_7pyparma_3ppl_Polyhedron, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_60poly_difference_assign(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_y));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_60poly_difference_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("poly_difference_assign", 0);

  /* "pyparma/ppl.pyx":1647
 *             y is a NNC_Polyhedron.
 *         """
 *         self.thisptr.poly_difference_assign(y.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_v_self->thisptr->poly_difference_assign((__pyx_v_y->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1585
 * 
 * 
 *     def poly_difference_assign(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` the poly-difference of ``self`` and ``y``.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.poly_difference_assign", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1653
 * 
 * 
 *     def drop_some_non_integer_points(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Possibly tighten ``self`` by dropping some points with
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_63drop_some_non_integer_points(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_62drop_some_non_integer_points[] = "\n        Possibly tighten ``self`` by dropping some points with\n        non-integer coordinates.\n\n        The modified polyhedron satisfies:\n\n        * it is (not necessarily strictly) contained in the original\n          polyhedron.\n\n        * integral vertices (generating points with integer\n          coordinates) of the original polyhedron are not removed.\n\n        .. NOTE::\n\n            The modified polyhedron is not neccessarily a lattice\n            polyhedron; Some vertices will, in general, still be\n            rational. Lattice points interior to the polyhedron may be\n            lost in the process.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, NNC_Polyhedron, Constraint_System\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: cs = Constraint_System()\n            sage: cs.insert( x>=0 )\n            sage: cs.insert( y>=0 )\n            sage: cs.insert( 3*x+2*y<5 )\n            sage: p = NNC_Polyhedron(cs)\n            sage: p.minimized_generators()\n            Generator_System {point(0/1, 0/1), closure_point(0/2, 5/2), closure_point(5/3, 0/3)}\n            sage: p.drop_some_non_integer_points()\n            sage: p.minimized_generators()\n            Generator_System {point(0/1, 0/1), point(0/1, 2/1), point(4/3, 0/3)}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_63drop_some_non_integer_points(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("drop_some_non_integer_points (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_62drop_some_non_integer_points(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_62drop_some_non_integer_points(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("drop_some_non_integer_points", 0);

  /* "pyparma/ppl.pyx":1689
 *             Generator_System {point(0/1, 0/1), point(0/1, 2/1), point(4/3, 0/3)}
 *         """
 *         self.thisptr.drop_some_non_integer_points()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->drop_some_non_integer_points();

  /* "pyparma/ppl.pyx":1653
 * 
 * 
 *     def drop_some_non_integer_points(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Possibly tighten ``self`` by dropping some points with
 */

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

/* "pyparma/ppl.pyx":1692
 * 
 * 
 *     def topological_closure_assign(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` its topological closure.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_65topological_closure_assign(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_64topological_closure_assign[] = "\n        Assign to ``self`` its topological closure.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, NNC_Polyhedron\n            sage: x = Variable(0)\n            sage: p = NNC_Polyhedron(x>0)\n            sage: p.is_topologically_closed()\n            False\n            sage: p.topological_closure_assign()\n            sage: p.is_topologically_closed()\n            True\n            sage: p.minimized_constraints()\n            Constraint_System {x0>=0}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_65topological_closure_assign(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("topological_closure_assign (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_64topological_closure_assign(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_64topological_closure_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("topological_closure_assign", 0);

  /* "pyparma/ppl.pyx":1709
 *             Constraint_System {x0>=0}
 *         """
 *         self.thisptr.topological_closure_assign()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->topological_closure_assign();

  /* "pyparma/ppl.pyx":1692
 * 
 * 
 *     def topological_closure_assign(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` its topological closure.
 */

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

/* "pyparma/ppl.pyx":1712
 * 
 * 
 *     def add_space_dimensions_and_embed(self, m):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add ``m`` new space dimensions and embed ``self`` in the new
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_67add_space_dimensions_and_embed(PyObject *__pyx_v_self, PyObject *__pyx_v_m); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_66add_space_dimensions_and_embed[] = "\n        Add ``m`` new space dimensions and embed ``self`` in the new\n        vector space.\n\n        The new space dimensions will be those having the highest\n        indexes in the new polyhedron, which is characterized by a\n        system of constraints in which the variables running through\n        the new dimensions are not constrained. For instance, when\n        starting from the polyhedron `P` and adding a third space\n        dimension, the result will be the polyhedron\n\n        .. MATH::\n\n            \\Big\\{\n            (x,y,z)^T \\in \\RR^3\n            \\Big|\n            (x,y)^T \\in P\n            \\Big\\}\n\n        INPUT:\n\n        - ``m`` -- integer.\n\n        OUTPUT:\n\n        This method assigns the embedded polyhedron to ``self`` and\n        does not return anything.\n\n        Raises a ``ValueError`` if adding ``m`` new space dimensions\n        would cause the vector space to exceed dimension\n        ``self.max_space_dimension()``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point\n            sage: x = Variable(0)\n            sage: p = C_Polyhedron( point(3*x) )\n            sage: p.add_space_dimensions_and_embed(1)\n            sage: p.minimized_generators()\n            Generator_System {line(0, 1), point(3/1, 0/1)}\n            sage: p.add_space_dimensions_and_embed( p.max_space_dimension() )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_space_dimensions_and_embed(m):\n            adding m new space dimensions exceeds the maximum allowed space dimension.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_67add_space_dimensions_and_embed(PyObject *__pyx_v_self, PyObject *__pyx_v_m) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_space_dimensions_and_embed (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_66add_space_dimensions_and_embed(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((PyObject *)__pyx_v_m));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_66add_space_dimensions_and_embed(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, PyObject *__pyx_v_m) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Parma_Polyhedra_Library::dimension_type __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_space_dimensions_and_embed", 0);
  __Pyx_INCREF(__pyx_v_m);

  /* "pyparma/ppl.pyx":1759
 *             adding m new space dimensions exceeds the maximum allowed space dimension.
 *         """
 *         m = int(m)             # <<<<<<<<<<<<<<
 *         self.thisptr.add_space_dimensions_and_embed(m)
 * 
 */
  __pyx_t_1 = PyNumber_Int(__pyx_v_m); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_m, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":1760
 *         """
 *         m = int(m)
 *         self.thisptr.add_space_dimensions_and_embed(m)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_As_size_t(__pyx_v_m); if (unlikely((__pyx_t_2 == (Parma_Polyhedra_Library::dimension_type)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  try {
    __pyx_v_self->thisptr->add_space_dimensions_and_embed(__pyx_t_2);
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1712
 * 
 * 
 *     def add_space_dimensions_and_embed(self, m):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add ``m`` new space dimensions and embed ``self`` in the new
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.add_space_dimensions_and_embed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1763
 * 
 * 
 *     def add_space_dimensions_and_project(self, m):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add ``m`` new space dimensions and embed ``self`` in the new
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_69add_space_dimensions_and_project(PyObject *__pyx_v_self, PyObject *__pyx_v_m); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_68add_space_dimensions_and_project[] = "\n        Add ``m`` new space dimensions and embed ``self`` in the new\n        vector space.\n\n        The new space dimensions will be those having the highest\n        indexes in the new polyhedron, which is characterized by a\n        system of constraints in which the variables running through\n        the new dimensions are all constrained to be equal to `0`.\n        For instance, when starting from the polyhedron `P` and adding\n        a third space dimension, the result will be the polyhedron\n\n        .. MATH::\n\n            \\Big\\{\n            (x,y,0)^T \\in \\RR^3\n            \\Big|\n            (x,y)^T \\in P\n            \\Big\\}\n\n        INPUT:\n\n        - ``m`` -- integer.\n\n        OUTPUT:\n\n        This method assigns the projected polyhedron to ``self`` and\n        does not return anything.\n\n        Raises a ``ValueError`` if adding ``m`` new space dimensions\n        would cause the vector space to exceed dimension\n        ``self.max_space_dimension()``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, point\n            sage: x = Variable(0)\n            sage: p = C_Polyhedron( point(3*x) )\n            sage: p.add_space_dimensions_and_project(1)\n            sage: p.minimized_generators()\n            Generator_System {point(3/1, 0/1)}\n            sage: p.add_space_dimensions_and_project( p.max_space_dimension() )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::add_space_dimensions_and_project(m):\n            adding m new space dimensions exceeds the maximum allowed space dimension.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_69add_space_dimensions_and_project(PyObject *__pyx_v_self, PyObject *__pyx_v_m) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_space_dimensions_and_project (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_68add_space_dimensions_and_project(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((PyObject *)__pyx_v_m));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_68add_space_dimensions_and_project(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, PyObject *__pyx_v_m) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Parma_Polyhedra_Library::dimension_type __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_space_dimensions_and_project", 0);
  __Pyx_INCREF(__pyx_v_m);

  /* "pyparma/ppl.pyx":1810
 *             adding m new space dimensions exceeds the maximum allowed space dimension.
 *         """
 *         m = int(m)             # <<<<<<<<<<<<<<
 *         self.thisptr.add_space_dimensions_and_project(m)
 * 
 */
  __pyx_t_1 = PyNumber_Int(__pyx_v_m); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1810; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_m, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":1811
 *         """
 *         m = int(m)
 *         self.thisptr.add_space_dimensions_and_project(m)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_As_size_t(__pyx_v_m); if (unlikely((__pyx_t_2 == (Parma_Polyhedra_Library::dimension_type)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1811; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  try {
    __pyx_v_self->thisptr->add_space_dimensions_and_project(__pyx_t_2);
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1811; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1763
 * 
 * 
 *     def add_space_dimensions_and_project(self, m):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add ``m`` new space dimensions and embed ``self`` in the new
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.add_space_dimensions_and_project", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1814
 * 
 * 
 *     def concatenate_assign(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` the concatenation of ``self`` and ``y``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_71concatenate_assign(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_70concatenate_assign[] = "\n        Assign to ``self`` the concatenation of ``self`` and ``y``.\n\n        This functions returns the Cartiesian product of ``self`` and\n        ``y``.\n\n        Viewing a polyhedron as a set of tuples (its points), it is\n        sometimes useful to consider the set of tuples obtained by\n        concatenating an ordered pair of polyhedra. Formally, the\n        concatenation of the polyhedra `P` and `Q` (taken in this\n        order) is the polyhedron such that\n\n        .. MATH::\n\n            R =\n            \\Big\\{\n            (x_0,\\dots,x_{n-1},y_0,\\dots,y_{m-1})^T \\in \\RR^{n+m}\n            \\Big|\n            (x_0,\\dots,x_{n-1})^T \\in P\n            ,~\n            (y_0,\\dots,y_{m-1})^T \\in Q\n            \\Big\\}\n\n        Another way of seeing it is as follows: first embed polyhedron\n        `P` into a vector space of dimension `n+m` and then add a\n        suitably renamed-apart version of the constraints defining\n        `Q`.\n\n        INPUT:\n\n        - ``m`` -- integer.\n\n        OUTPUT:\n\n        This method assigns the concatenated polyhedron to ``self`` and\n        does not return anything.\n\n        Raises a ``ValueError`` if ``self`` and ``y`` are\n        topology-incompatible or if adding ``y.space_dimension()`` new\n        space dimensions would cause the vector space to exceed\n        dimension ``self.max_space_dimension()``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, C_Polyhedron, NNC_Polyhedron, point\n            sage: x = Variable(0)\n            sage: p1 = C_Polyhedron( point(1*x) )\n            sage: p2 = C_Polyhedron( point(2*x) )\n            sage: p1.concatenate_assign(p2)\n            sage: p1.minimized_generators()\n            Generator_System {point(1/1, 2/1)}\n\n        The polyhedra must be topology-compatible and not exceed the\n        maximum space dimension::\n\n            sage: p1.concatenate_assign( NNC_Polyhedron(1, 'universe') )\n            Traceback (""most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::concatenate_assign(y):\n            y is a NNC_Polyhedron.\n            sage: p1.concatenate_assign( C_Polyhedron(p1.max_space_dimension(), 'empty') )\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::concatenate_assign(y):\n            concatenation exceeds the maximum allowed space dimension.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_71concatenate_assign(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("concatenate_assign (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_7pyparma_3ppl_Polyhedron, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1814; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_70concatenate_assign(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_y));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_70concatenate_assign(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("concatenate_assign", 0);

  /* "pyparma/ppl.pyx":1881
 *             concatenation exceeds the maximum allowed space dimension.
 *         """
 *         self.thisptr.concatenate_assign(y.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_v_self->thisptr->concatenate_assign((__pyx_v_y->thisptr[0]));
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1814
 * 
 * 
 *     def concatenate_assign(self, Polyhedron y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Assign to ``self`` the concatenation of ``self`` and ``y``.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.concatenate_assign", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1884
 * 
 * 
 *     def remove_higher_space_dimensions(self, new_dimension):             # <<<<<<<<<<<<<<
 *         r"""
 *         Remove the higher dimensions of the vector space so that the
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_73remove_higher_space_dimensions(PyObject *__pyx_v_self, PyObject *__pyx_v_new_dimension); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_72remove_higher_space_dimensions[] = "\n        Remove the higher dimensions of the vector space so that the\n        resulting space will have dimension ``new_dimension``.\n\n        OUTPUT:\n\n        This method modifies ``self`` and does not return anything.\n\n        Raises a ``ValueError`` if ``new_dimensions`` is greater than\n        the space dimension of ``self``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import C_Polyhedron, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: p = C_Polyhedron(3*x+0*y==2)\n            sage: p.remove_higher_space_dimensions(1)\n            sage: p.minimized_constraints()\n            Constraint_System {3*x0-2==0}\n            sage: p.remove_higher_space_dimensions(2)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::C_Polyhedron::remove_higher_space_dimensions(nd):\n            this->space_dimension() == 1, required space dimension == 2.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_73remove_higher_space_dimensions(PyObject *__pyx_v_self, PyObject *__pyx_v_new_dimension) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove_higher_space_dimensions (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_72remove_higher_space_dimensions(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), ((PyObject *)__pyx_v_new_dimension));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_72remove_higher_space_dimensions(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, PyObject *__pyx_v_new_dimension) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Parma_Polyhedra_Library::dimension_type __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove_higher_space_dimensions", 0);
  __Pyx_INCREF(__pyx_v_new_dimension);

  /* "pyparma/ppl.pyx":1911
 *             this->space_dimension() == 1, required space dimension == 2.
 *         """
 *         new_dimension = int(new_dimension)             # <<<<<<<<<<<<<<
 *         self.thisptr.remove_higher_space_dimensions(new_dimension)
 * 
 */
  __pyx_t_1 = PyNumber_Int(__pyx_v_new_dimension); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1911; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_new_dimension, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":1912
 *         """
 *         new_dimension = int(new_dimension)
 *         self.thisptr.remove_higher_space_dimensions(new_dimension)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_As_size_t(__pyx_v_new_dimension); if (unlikely((__pyx_t_2 == (Parma_Polyhedra_Library::dimension_type)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1912; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  try {
    __pyx_v_self->thisptr->remove_higher_space_dimensions(__pyx_t_2);
  } catch(...) {
    try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1912; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":1884
 * 
 * 
 *     def remove_higher_space_dimensions(self, new_dimension):             # <<<<<<<<<<<<<<
 *         r"""
 *         Remove the higher dimensions of the vector space so that the
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.remove_higher_space_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_new_dimension);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1915
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_75ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_74ascii_dump[] = "\n        Write an ASCII dump to stderr.\n\n        EXAMPLES::\n\n            sage: sage_cmd  = 'from sage.libs.ppl import C_Polyhedron, Variable\\n'\n            sage: sage_cmd += 'x = Variable(0)\\n'\n            sage: sage_cmd += 'y = Variable(1)\\n'\n            sage: sage_cmd += 'p = C_Polyhedron(3*x+2*y==1)\\n'\n            sage: sage_cmd += 'p.minimized_generators()\\n'\n            sage: sage_cmd += 'p.ascii_dump()\\n'\n            sage: from sage.tests.cmdline import test_executable\n            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest\n            sage: print err  # long time\n            space_dim 2\n            -ZE -EM  +CM +GM  +CS +GS  -CP -GP  -SC +SG\n            con_sys (up-to-date)\n            topology NECESSARILY_CLOSED\n            2 x 2 SPARSE (sorted)\n            index_first_pending 2\n            size 3 -1 3 2 = (C)\n            size 3 1 0 0 >= (C)\n            <BLANKLINE>\n            gen_sys (up-to-date)\n            topology NECESSARILY_CLOSED\n            2 x 2 DENSE (not_sorted)\n            index_first_pending 2\n            size 3 0 2 -3 L (C)\n            size 3 2 0 1 P (C)\n            <BLANKLINE>\n            sat_c\n            0 x 0\n            <BLANKLINE>\n            sat_g\n            2 x 2\n            0 0\n            0 1\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_75ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_74ascii_dump(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_74ascii_dump(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump", 0);

  /* "pyparma/ppl.pyx":1954
 *             0 1
 *         """
 *         self.thisptr.ascii_dump()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->ascii_dump();

  /* "pyparma/ppl.pyx":1915
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

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

/* "pyparma/ppl.pyx":1957
 * 
 * 
 *     def max_space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the maximum space dimension all kinds of Polyhedron can handle.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_77max_space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_76max_space_dimension[] = "\n        Return the maximum space dimension all kinds of Polyhedron can handle.\n\n        OUTPUT:\n\n        Integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import C_Polyhedron\n            sage: C_Polyhedron(1, 'empty').max_space_dimension()   # random output\n            1152921504606846974\n            sage: C_Polyhedron(1, 'empty').max_space_dimension()\n            357913940            # 32-bit\n            1152921504606846974  # 64-bit\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_77max_space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("max_space_dimension (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_76max_space_dimension(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_76max_space_dimension(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__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("max_space_dimension", 0);

  /* "pyparma/ppl.pyx":1974
 *             1152921504606846974  # 64-bit
 *         """
 *         return self.thisptr.max_space_dimension()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->thisptr->max_space_dimension()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":1957
 * 
 * 
 *     def max_space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the maximum space dimension all kinds of Polyhedron can handle.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.max_space_dimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":1977
 * 
 * 
 *     def OK(self, check_non_empty=False):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_79OK(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Polyhedron_78OK[] = "\n        Check if all the invariants are satisfied.\n\n        The check is performed so as to intrude as little as\n        possible. If the library has been compiled with run-time\n        assertions enabled, error messages are written on std::cerr in\n        case invariants are violated. This is useful for the purpose\n        of debugging the library.\n\n        INPUT:\n\n        - ``check_not_empty`` -- boolean. ``True`` if and only if, in\n          addition to checking the invariants, ``self`` must be\n          checked to be not empty.\n\n        OUTPUT:\n\n        ``True`` if and only if ``self`` satisfies all the invariants\n        and either ``check_not_empty`` is ``False`` or ``self`` is not\n        empty.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: e = 3*x+2*y+1\n            sage: e.OK()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_79OK(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_check_non_empty = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("OK (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_check_non_empty,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_check_non_empty);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "OK") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1977; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_check_non_empty = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("OK", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1977; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_78OK(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_self), __pyx_v_check_non_empty);

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_78OK(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_check_non_empty) {
  int __pyx_v_result;
  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("OK", 0);

  /* "pyparma/ppl.pyx":2008
 *             True
 *         """
 *         cdef bint result = self.thisptr.OK()             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_v_result = __pyx_v_self->thisptr->OK(NULL);

  /* "pyparma/ppl.pyx":2009
 *         """
 *         cdef bint result = self.thisptr.OK()
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2009; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":1977
 * 
 * 
 *     def OK(self, check_non_empty=False):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2012
 * 
 * 
 *     def __richcmp__(Polyhedron lhs, Polyhedron rhs, op):             # <<<<<<<<<<<<<<
 *         r"""
 *         Comparison for polyhedra.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_81__richcmp__(PyObject *__pyx_v_lhs, PyObject *__pyx_v_rhs, int __pyx_arg_op); /*proto*/
static PyObject *__pyx_pw_7pyparma_3ppl_10Polyhedron_81__richcmp__(PyObject *__pyx_v_lhs, PyObject *__pyx_v_rhs, int __pyx_arg_op) {
  PyObject *__pyx_v_op = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_v_op = __Pyx_PyInt_From_int(__pyx_arg_op); if (unlikely(!__pyx_v_op)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2012; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __Pyx_GOTREF(__pyx_v_op);
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lhs), __pyx_ptype_7pyparma_3ppl_Polyhedron, 1, "lhs", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2012; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rhs), __pyx_ptype_7pyparma_3ppl_Polyhedron, 1, "rhs", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2012; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Polyhedron_80__richcmp__(((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_lhs), ((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)__pyx_v_rhs), ((PyObject *)__pyx_v_op));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Polyhedron_80__richcmp__(struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_lhs, struct __pyx_obj_7pyparma_3ppl_Polyhedron *__pyx_v_rhs, PyObject *__pyx_v_op) {
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "pyparma/ppl.pyx":2034
 *         """
 *         cdef result
 *         if op==0:      # <   0             # <<<<<<<<<<<<<<
 *             result = rhs.strictly_contains(lhs)
 *         elif op==1:    # <=  1
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2034; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2034; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2035
 *         cdef result
 *         if op==0:      # <   0
 *             result = rhs.strictly_contains(lhs)             # <<<<<<<<<<<<<<
 *         elif op==1:    # <=  1
 *             result = rhs.contains(lhs)
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_rhs), __pyx_n_s_strictly_contains); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_v_lhs));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_lhs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_lhs));
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_result = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":2036
 *         if op==0:      # <   0
 *             result = rhs.strictly_contains(lhs)
 *         elif op==1:    # <=  1             # <<<<<<<<<<<<<<
 *             result = rhs.contains(lhs)
 *         elif op==2:    # ==  2
 */
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_op, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2037
 *             result = rhs.strictly_contains(lhs)
 *         elif op==1:    # <=  1
 *             result = rhs.contains(lhs)             # <<<<<<<<<<<<<<
 *         elif op==2:    # ==  2
 *             result = (lhs.thisptr[0] == rhs.thisptr[0])
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_rhs), __pyx_n_s_contains); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_v_lhs));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_lhs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_lhs));
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_result = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":2038
 *         elif op==1:    # <=  1
 *             result = rhs.contains(lhs)
 *         elif op==2:    # ==  2             # <<<<<<<<<<<<<<
 *             result = (lhs.thisptr[0] == rhs.thisptr[0])
 *         elif op==4:    # >   4
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2039
 *             result = rhs.contains(lhs)
 *         elif op==2:    # ==  2
 *             result = (lhs.thisptr[0] == rhs.thisptr[0])             # <<<<<<<<<<<<<<
 *         elif op==4:    # >   4
 *             result = lhs.strictly_contains(rhs)
 */
    __pyx_t_1 = __Pyx_PyBool_FromLong(((__pyx_v_lhs->thisptr[0]) == (__pyx_v_rhs->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_result = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":2040
 *         elif op==2:    # ==  2
 *             result = (lhs.thisptr[0] == rhs.thisptr[0])
 *         elif op==4:    # >   4             # <<<<<<<<<<<<<<
 *             result = lhs.strictly_contains(rhs)
 *         elif op==5:    # >=  5
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2041
 *             result = (lhs.thisptr[0] == rhs.thisptr[0])
 *         elif op==4:    # >   4
 *             result = lhs.strictly_contains(rhs)             # <<<<<<<<<<<<<<
 *         elif op==5:    # >=  5
 *             result = lhs.contains(rhs)
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_lhs), __pyx_n_s_strictly_contains); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_v_rhs));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_rhs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_rhs));
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_result = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":2042
 *         elif op==4:    # >   4
 *             result = lhs.strictly_contains(rhs)
 *         elif op==5:    # >=  5             # <<<<<<<<<<<<<<
 *             result = lhs.contains(rhs)
 *         elif op==3:    # !=  3
 */
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_op, __pyx_int_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2043
 *             result = lhs.strictly_contains(rhs)
 *         elif op==5:    # >=  5
 *             result = lhs.contains(rhs)             # <<<<<<<<<<<<<<
 *         elif op==3:    # !=  3
 *             result = (lhs.thisptr[0] != rhs.thisptr[0])
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_lhs), __pyx_n_s_contains); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2043; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2043; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_v_rhs));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_rhs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_rhs));
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2043; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_result = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":2044
 *         elif op==5:    # >=  5
 *             result = lhs.contains(rhs)
 *         elif op==3:    # !=  3             # <<<<<<<<<<<<<<
 *             result = (lhs.thisptr[0] != rhs.thisptr[0])
 *         else:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2045
 *             result = lhs.contains(rhs)
 *         elif op==3:    # !=  3
 *             result = (lhs.thisptr[0] != rhs.thisptr[0])             # <<<<<<<<<<<<<<
 *         else:
 *             assert False  # unreachable
 */
    __pyx_t_1 = __Pyx_PyBool_FromLong(((__pyx_v_lhs->thisptr[0]) != (__pyx_v_rhs->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_result = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":2047
 *             result = (lhs.thisptr[0] != rhs.thisptr[0])
 *         else:
 *             assert False  # unreachable             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        PyErr_SetNone(PyExc_AssertionError);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
    }
    #endif
  }
  __pyx_L3:;

  /* "pyparma/ppl.pyx":2048
 *         else:
 *             assert False  # unreachable
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2048; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2012
 * 
 * 
 *     def __richcmp__(Polyhedron lhs, Polyhedron rhs, op):             # <<<<<<<<<<<<<<
 *         r"""
 *         Comparison for polyhedra.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyparma.ppl.Polyhedron.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2142
 * 
 * 
 *     def __cinit__(self, arg, degenerate_element='universe'):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_12C_Polyhedron_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_12C_Polyhedron_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_v_degenerate_element = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,&__pyx_n_s_degenerate_element,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_n_s_universe);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_degenerate_element);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arg = values[0];
    __pyx_v_degenerate_element = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.C_Polyhedron.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_12C_Polyhedron___cinit__(((struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *)__pyx_v_self), __pyx_v_arg, __pyx_v_degenerate_element);

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

static int __pyx_pf_7pyparma_3ppl_12C_Polyhedron___cinit__(struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *__pyx_v_self, PyObject *__pyx_v_arg, PyObject *__pyx_v_degenerate_element) {
  struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *__pyx_v_ph = NULL;
  struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_gs = NULL;
  struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_cs = NULL;
  PyObject *__pyx_v_dim = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Parma_Polyhedra_Library::C_Polyhedron *__pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  Parma_Polyhedra_Library::dimension_type __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);
  __Pyx_INCREF(__pyx_v_arg);
  __Pyx_INCREF(__pyx_v_degenerate_element);

  /* "pyparma/ppl.pyx":2154
 *             The empty polyhedron in QQ^3
 *         """
 *         if isinstance(arg, C_Polyhedron):             # <<<<<<<<<<<<<<
 *             ph = <C_Polyhedron>arg
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_C_Polyhedron&>ph.thisptr[0])
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2155
 *         """
 *         if isinstance(arg, C_Polyhedron):
 *             ph = <C_Polyhedron>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_C_Polyhedron&>ph.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_ph = ((struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2156
 *         if isinstance(arg, C_Polyhedron):
 *             ph = <C_Polyhedron>arg
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_C_Polyhedron&>ph.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, Generator):
 */
    __pyx_v_self->__pyx_base.thisptr = new Parma_Polyhedra_Library::C_Polyhedron(((Parma_Polyhedra_Library::C_Polyhedron &)(__pyx_v_ph->__pyx_base.thisptr[0])));

    /* "pyparma/ppl.pyx":2157
 *             ph = <C_Polyhedron>arg
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_C_Polyhedron&>ph.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Generator):
 *             arg = Generator_System(arg)
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2158
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_C_Polyhedron&>ph.thisptr[0])
 *             return
 *         if isinstance(arg, Generator):             # <<<<<<<<<<<<<<
 *             arg = Generator_System(arg)
 *         if isinstance(arg, Constraint):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":2159
 *             return
 *         if isinstance(arg, Generator):
 *             arg = Generator_System(arg)             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Constraint):
 *             arg = Constraint_System(arg)
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_arg);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_arg);
    __Pyx_GIVEREF(__pyx_v_arg);
    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_4);
    __pyx_t_4 = 0;
    goto __pyx_L4;
  }
  __pyx_L4:;

  /* "pyparma/ppl.pyx":2160
 *         if isinstance(arg, Generator):
 *             arg = Generator_System(arg)
 *         if isinstance(arg, Constraint):             # <<<<<<<<<<<<<<
 *             arg = Constraint_System(arg)
 *         if isinstance(arg, Generator_System):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2161
 *             arg = Generator_System(arg)
 *         if isinstance(arg, Constraint):
 *             arg = Constraint_System(arg)             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Generator_System):
 *             gs = <Generator_System>arg
 */
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_arg);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_arg);
    __Pyx_GIVEREF(__pyx_v_arg);
    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "pyparma/ppl.pyx":2162
 *         if isinstance(arg, Constraint):
 *             arg = Constraint_System(arg)
 *         if isinstance(arg, Generator_System):             # <<<<<<<<<<<<<<
 *             gs = <Generator_System>arg
 *             self.thisptr = new PPL_C_Polyhedron(gs.thisptr[0])
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System)); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":2163
 *             arg = Constraint_System(arg)
 *         if isinstance(arg, Generator_System):
 *             gs = <Generator_System>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_C_Polyhedron(gs.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_gs = ((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2164
 *         if isinstance(arg, Generator_System):
 *             gs = <Generator_System>arg
 *             self.thisptr = new PPL_C_Polyhedron(gs.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, Constraint_System):
 */
    try {
      __pyx_t_5 = new Parma_Polyhedra_Library::C_Polyhedron((__pyx_v_gs->thisptr[0]));
    } catch(...) {
      try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_v_self->__pyx_base.thisptr = __pyx_t_5;

    /* "pyparma/ppl.pyx":2165
 *             gs = <Generator_System>arg
 *             self.thisptr = new PPL_C_Polyhedron(gs.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Constraint_System):
 *             cs = <Constraint_System>arg
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2166
 *             self.thisptr = new PPL_C_Polyhedron(gs.thisptr[0])
 *             return
 *         if isinstance(arg, Constraint_System):             # <<<<<<<<<<<<<<
 *             cs = <Constraint_System>arg
 *             self.thisptr = new PPL_C_Polyhedron(cs.thisptr[0])
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2167
 *             return
 *         if isinstance(arg, Constraint_System):
 *             cs = <Constraint_System>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_C_Polyhedron(cs.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_cs = ((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2168
 *         if isinstance(arg, Constraint_System):
 *             cs = <Constraint_System>arg
 *             self.thisptr = new PPL_C_Polyhedron(cs.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         try:
 */
    try {
      __pyx_t_5 = new Parma_Polyhedra_Library::C_Polyhedron((__pyx_v_cs->thisptr[0]));
    } catch(...) {
      try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_v_self->__pyx_base.thisptr = __pyx_t_5;

    /* "pyparma/ppl.pyx":2169
 *             cs = <Constraint_System>arg
 *             self.thisptr = new PPL_C_Polyhedron(cs.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         try:
 *             dim = int(arg)
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2170
 *             self.thisptr = new PPL_C_Polyhedron(cs.thisptr[0])
 *             return
 *         try:             # <<<<<<<<<<<<<<
 *             dim = int(arg)
 *             assert dim>=0
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    /*try:*/ {

      /* "pyparma/ppl.pyx":2171
 *             return
 *         try:
 *             dim = int(arg)             # <<<<<<<<<<<<<<
 *             assert dim>=0
 *         except ValueError:
 */
      __pyx_t_3 = PyNumber_Int(__pyx_v_arg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_v_dim = __pyx_t_3;
      __pyx_t_3 = 0;

      /* "pyparma/ppl.pyx":2172
 *         try:
 *             dim = int(arg)
 *             assert dim>=0             # <<<<<<<<<<<<<<
 *         except ValueError:
 *             raise ValueError, 'Cannot initialize C_Polyhedron with '+str(arg)+'.'
 */
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_3 = PyObject_RichCompare(__pyx_v_dim, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2172; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2172; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_2)) {
          PyErr_SetNone(PyExc_AssertionError);
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2172; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
        }
      }
      #endif
    }
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L15_try_end;
    __pyx_L8_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2173
 *             dim = int(arg)
 *             assert dim>=0
 *         except ValueError:             # <<<<<<<<<<<<<<
 *             raise ValueError, 'Cannot initialize C_Polyhedron with '+str(arg)+'.'
 *         degenerate_element = degenerate_element.lower()
 */
    __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_9) {
      __Pyx_AddTraceback("pyparma.ppl.C_Polyhedron.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2173; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_10);

      /* "pyparma/ppl.pyx":2174
 *             assert dim>=0
 *         except ValueError:
 *             raise ValueError, 'Cannot initialize C_Polyhedron with '+str(arg)+'.'             # <<<<<<<<<<<<<<
 *         degenerate_element = degenerate_element.lower()
 *         if degenerate_element=='universe':
 */
      __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2174; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_v_arg);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_arg);
      __Pyx_GIVEREF(__pyx_v_arg);
      __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_11, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2174; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_Cannot_initialize_C_Polyhedron_w, __pyx_t_12); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2174; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = PyNumber_Add(__pyx_t_11, __pyx_kp_s__5); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2174; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_12, 0, 0);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2174; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L9_exception_handled;
    }
    goto __pyx_L10_except_error;
    __pyx_L10_except_error:;
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
    goto __pyx_L1_error;
    __pyx_L9_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
    __pyx_L15_try_end:;
  }

  /* "pyparma/ppl.pyx":2175
 *         except ValueError:
 *             raise ValueError, 'Cannot initialize C_Polyhedron with '+str(arg)+'.'
 *         degenerate_element = degenerate_element.lower()             # <<<<<<<<<<<<<<
 *         if degenerate_element=='universe':
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)
 */
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_degenerate_element, __pyx_n_s_lower); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF_SET(__pyx_v_degenerate_element, __pyx_t_4);
  __pyx_t_4 = 0;

  /* "pyparma/ppl.pyx":2176
 *             raise ValueError, 'Cannot initialize C_Polyhedron with '+str(arg)+'.'
 *         degenerate_element = degenerate_element.lower()
 *         if degenerate_element=='universe':             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)
 *             return
 */
  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_degenerate_element, __pyx_n_s_universe, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2177
 *         degenerate_element = degenerate_element.lower()
 *         if degenerate_element=='universe':
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)             # <<<<<<<<<<<<<<
 *             return
 *         elif degenerate_element=='empty':
 */
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_v_dim); if (unlikely((__pyx_t_13 == (Parma_Polyhedra_Library::dimension_type)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_self->__pyx_base.thisptr = new Parma_Polyhedra_Library::C_Polyhedron(((Parma_Polyhedra_Library::dimension_type)__pyx_t_13), Parma_Polyhedra_Library::UNIVERSE);

    /* "pyparma/ppl.pyx":2178
 *         if degenerate_element=='universe':
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)
 *             return             # <<<<<<<<<<<<<<
 *         elif degenerate_element=='empty':
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_dimension_type>dim, EMPTY)
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2179
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)
 *             return
 *         elif degenerate_element=='empty':             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_dimension_type>dim, EMPTY)
 *             return
 */
  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_degenerate_element, __pyx_n_s_empty, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2180
 *             return
 *         elif degenerate_element=='empty':
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_dimension_type>dim, EMPTY)             # <<<<<<<<<<<<<<
 *             return
 *         else:
 */
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_v_dim); if (unlikely((__pyx_t_13 == (Parma_Polyhedra_Library::dimension_type)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_self->__pyx_base.thisptr = new Parma_Polyhedra_Library::C_Polyhedron(((Parma_Polyhedra_Library::dimension_type)__pyx_t_13), Parma_Polyhedra_Library::EMPTY);

    /* "pyparma/ppl.pyx":2181
 *         elif degenerate_element=='empty':
 *             self.thisptr = new PPL_C_Polyhedron(<PPL_dimension_type>dim, EMPTY)
 *             return             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError, 'Unknown value: degenerate_element='+str(degenerate_element)+'.'
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":2183
 *             return
 *         else:
 *             raise ValueError, 'Unknown value: degenerate_element='+str(degenerate_element)+'.'             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_degenerate_element);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_degenerate_element);
    __Pyx_GIVEREF(__pyx_v_degenerate_element);
    __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyNumber_Add(__pyx_kp_s_Unknown_value_degenerate_element, __pyx_t_10); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyNumber_Add(__pyx_t_4, __pyx_kp_s__5); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_10, 0, 0);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":2142
 * 
 * 
 *     def __cinit__(self, arg, degenerate_element='universe'):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pyparma.ppl.C_Polyhedron.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ph);
  __Pyx_XDECREF((PyObject *)__pyx_v_gs);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_dim);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_degenerate_element);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2186
 * 
 * 
 *     def __init__(self, *args):             # <<<<<<<<<<<<<<
 *         """
 *         The Python destructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_12C_Polyhedron_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_12C_Polyhedron_2__init__[] = "\n        The Python destructor.\n\n        See :class:`C_Polyhedron` for documentation.\n\n        TESTS::\n\n            sage: from sage.libs.ppl import C_Polyhedron\n            sage: C_Polyhedron(3, 'empty')   # indirect doctest\n            The empty polyhedron in QQ^3\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_12C_Polyhedron_2__init__;
#endif
static int __pyx_pw_7pyparma_3ppl_12C_Polyhedron_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_args = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_pf_7pyparma_3ppl_12C_Polyhedron_2__init__(((struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *)__pyx_v_self), __pyx_v_args);

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

static int __pyx_pf_7pyparma_3ppl_12C_Polyhedron_2__init__(CYTHON_UNUSED struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);

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

/* "pyparma/ppl.pyx":2202
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_12C_Polyhedron_5__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_12C_Polyhedron_5__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_12C_Polyhedron_4__dealloc__(((struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_12C_Polyhedron_4__dealloc__(struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":2206
 *         The Cython destructor.
 *         """
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->__pyx_base.thisptr;

  /* "pyparma/ppl.pyx":2202
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

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

/* "pyparma/ppl.pyx":2209
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_12C_Polyhedron_7__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_12C_Polyhedron_6__reduce__[] = "\n        Pickle object\n\n        TESTS::\n\n            sage: from sage.libs.ppl import C_Polyhedron, Variable\n            sage: P = C_Polyhedron(3, 'empty')\n            sage: loads(dumps(P))\n            The empty polyhedron in QQ^3\n\n            sage: Q = C_Polyhedron(5, 'universe')\n            sage: loads(dumps(Q))\n            The space-filling polyhedron in QQ^5\n\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: H = C_Polyhedron( 5*x-2*y >=  x+y-1 )\n            sage: loads(dumps(H))\n            A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 1 ray, 1 line\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_12C_Polyhedron_7__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_12C_Polyhedron_6__reduce__(((struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *)__pyx_v_self));

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

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

  /* "pyparma/ppl.pyx":2230
 *             A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 1 ray, 1 line
 *         """
 *         if self.is_empty():             # <<<<<<<<<<<<<<
 *             return (C_Polyhedron, (self.space_dimension(), 'empty'))
 *         elif self.is_universe():
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":2231
 *         """
 *         if self.is_empty():
 *             return (C_Polyhedron, (self.space_dimension(), 'empty'))             # <<<<<<<<<<<<<<
 *         elif self.is_universe():
 *             return (C_Polyhedron, (self.space_dimension(), 'universe'))
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_empty);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_empty);
    __Pyx_GIVEREF(__pyx_n_s_empty);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)));
    __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2232
 *         if self.is_empty():
 *             return (C_Polyhedron, (self.space_dimension(), 'empty'))
 *         elif self.is_universe():             # <<<<<<<<<<<<<<
 *             return (C_Polyhedron, (self.space_dimension(), 'universe'))
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_universe); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":2233
 *             return (C_Polyhedron, (self.space_dimension(), 'empty'))
 *         elif self.is_universe():
 *             return (C_Polyhedron, (self.space_dimension(), 'universe'))             # <<<<<<<<<<<<<<
 *         else:
 *             return (C_Polyhedron, (self.generators(),))
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_universe);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_universe);
    __Pyx_GIVEREF(__pyx_n_s_universe);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)));
    __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":2235
 *             return (C_Polyhedron, (self.space_dimension(), 'universe'))
 *         else:
 *             return (C_Polyhedron, (self.generators(),))             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_generators); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)));
    __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2209
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object
 */

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

/* "pyparma/ppl.pyx":2318
 * 
 * 
 *     def __cinit__(self, arg, degenerate_element='universe'):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_v_degenerate_element = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,&__pyx_n_s_degenerate_element,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_n_s_universe);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_degenerate_element);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2318; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arg = values[0];
    __pyx_v_degenerate_element = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2318; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.NNC_Polyhedron.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron___cinit__(((struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *)__pyx_v_self), __pyx_v_arg, __pyx_v_degenerate_element);

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

static int __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron___cinit__(struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *__pyx_v_self, PyObject *__pyx_v_arg, PyObject *__pyx_v_degenerate_element) {
  struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *__pyx_v_p_nnc = NULL;
  struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *__pyx_v_p_c = NULL;
  struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_gs = NULL;
  struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_cs = NULL;
  PyObject *__pyx_v_dim = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Parma_Polyhedra_Library::NNC_Polyhedron *__pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  Parma_Polyhedra_Library::dimension_type __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);
  __Pyx_INCREF(__pyx_v_arg);
  __Pyx_INCREF(__pyx_v_degenerate_element);

  /* "pyparma/ppl.pyx":2330
 *             The empty polyhedron in QQ^3
 *         """
 *         if isinstance(arg, NNC_Polyhedron):             # <<<<<<<<<<<<<<
 *             p_nnc = <NNC_Polyhedron>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_NNC_Polyhedron&>p_nnc.thisptr[0])
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2331
 *         """
 *         if isinstance(arg, NNC_Polyhedron):
 *             p_nnc = <NNC_Polyhedron>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_NNC_Polyhedron&>p_nnc.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_p_nnc = ((struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2332
 *         if isinstance(arg, NNC_Polyhedron):
 *             p_nnc = <NNC_Polyhedron>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_NNC_Polyhedron&>p_nnc.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, C_Polyhedron):
 */
    __pyx_v_self->__pyx_base.thisptr = new Parma_Polyhedra_Library::NNC_Polyhedron(((Parma_Polyhedra_Library::NNC_Polyhedron &)(__pyx_v_p_nnc->__pyx_base.thisptr[0])));

    /* "pyparma/ppl.pyx":2333
 *             p_nnc = <NNC_Polyhedron>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_NNC_Polyhedron&>p_nnc.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, C_Polyhedron):
 *             p_c = <C_Polyhedron>arg
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2334
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_NNC_Polyhedron&>p_nnc.thisptr[0])
 *             return
 *         if isinstance(arg, C_Polyhedron):             # <<<<<<<<<<<<<<
 *             p_c = <C_Polyhedron>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_C_Polyhedron&>p_c.thisptr[0])
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_C_Polyhedron)); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":2335
 *             return
 *         if isinstance(arg, C_Polyhedron):
 *             p_c = <C_Polyhedron>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_C_Polyhedron&>p_c.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_p_c = ((struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2336
 *         if isinstance(arg, C_Polyhedron):
 *             p_c = <C_Polyhedron>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_C_Polyhedron&>p_c.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, Generator):
 */
    __pyx_v_self->__pyx_base.thisptr = new Parma_Polyhedra_Library::NNC_Polyhedron(((Parma_Polyhedra_Library::C_Polyhedron &)(__pyx_v_p_c->__pyx_base.thisptr[0])));

    /* "pyparma/ppl.pyx":2337
 *             p_c = <C_Polyhedron>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_C_Polyhedron&>p_c.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Generator):
 *             arg = Generator_System(arg)
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2338
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_C_Polyhedron&>p_c.thisptr[0])
 *             return
 *         if isinstance(arg, Generator):             # <<<<<<<<<<<<<<
 *             arg = Generator_System(arg)
 *         if isinstance(arg, Constraint):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2339
 *             return
 *         if isinstance(arg, Generator):
 *             arg = Generator_System(arg)             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Constraint):
 *             arg = Constraint_System(arg)
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_arg);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_arg);
    __Pyx_GIVEREF(__pyx_v_arg);
    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_4);
    __pyx_t_4 = 0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "pyparma/ppl.pyx":2340
 *         if isinstance(arg, Generator):
 *             arg = Generator_System(arg)
 *         if isinstance(arg, Constraint):             # <<<<<<<<<<<<<<
 *             arg = Constraint_System(arg)
 *         if isinstance(arg, Generator_System):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint)); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":2341
 *             arg = Generator_System(arg)
 *         if isinstance(arg, Constraint):
 *             arg = Constraint_System(arg)             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Generator_System):
 *             gs = <Generator_System>arg
 */
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_arg);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_arg);
    __Pyx_GIVEREF(__pyx_v_arg);
    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L6;
  }
  __pyx_L6:;

  /* "pyparma/ppl.pyx":2342
 *         if isinstance(arg, Constraint):
 *             arg = Constraint_System(arg)
 *         if isinstance(arg, Generator_System):             # <<<<<<<<<<<<<<
 *             gs = <Generator_System>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(gs.thisptr[0])
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2343
 *             arg = Constraint_System(arg)
 *         if isinstance(arg, Generator_System):
 *             gs = <Generator_System>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_NNC_Polyhedron(gs.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_gs = ((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2344
 *         if isinstance(arg, Generator_System):
 *             gs = <Generator_System>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(gs.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, Constraint_System):
 */
    try {
      __pyx_t_5 = new Parma_Polyhedra_Library::NNC_Polyhedron((__pyx_v_gs->thisptr[0]));
    } catch(...) {
      try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_v_self->__pyx_base.thisptr = __pyx_t_5;

    /* "pyparma/ppl.pyx":2345
 *             gs = <Generator_System>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(gs.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Constraint_System):
 *             cs = <Constraint_System>arg
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2346
 *             self.thisptr = new PPL_NNC_Polyhedron(gs.thisptr[0])
 *             return
 *         if isinstance(arg, Constraint_System):             # <<<<<<<<<<<<<<
 *             cs = <Constraint_System>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(cs.thisptr[0])
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System)); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":2347
 *             return
 *         if isinstance(arg, Constraint_System):
 *             cs = <Constraint_System>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_NNC_Polyhedron(cs.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_cs = ((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2348
 *         if isinstance(arg, Constraint_System):
 *             cs = <Constraint_System>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(cs.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         try:
 */
    try {
      __pyx_t_5 = new Parma_Polyhedra_Library::NNC_Polyhedron((__pyx_v_cs->thisptr[0]));
    } catch(...) {
      try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_v_self->__pyx_base.thisptr = __pyx_t_5;

    /* "pyparma/ppl.pyx":2349
 *             cs = <Constraint_System>arg
 *             self.thisptr = new PPL_NNC_Polyhedron(cs.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         try:
 *             dim = int(arg)
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2350
 *             self.thisptr = new PPL_NNC_Polyhedron(cs.thisptr[0])
 *             return
 *         try:             # <<<<<<<<<<<<<<
 *             dim = int(arg)
 *             assert dim>=0
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    /*try:*/ {

      /* "pyparma/ppl.pyx":2351
 *             return
 *         try:
 *             dim = int(arg)             # <<<<<<<<<<<<<<
 *             assert dim>=0
 *         except ValueError:
 */
      __pyx_t_3 = PyNumber_Int(__pyx_v_arg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2351; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_v_dim = __pyx_t_3;
      __pyx_t_3 = 0;

      /* "pyparma/ppl.pyx":2352
 *         try:
 *             dim = int(arg)
 *             assert dim>=0             # <<<<<<<<<<<<<<
 *         except ValueError:
 *             raise ValueError, 'Cannot initialize NNC_Polyhedron with '+str(arg)+'.'
 */
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_3 = PyObject_RichCompare(__pyx_v_dim, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2352; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2352; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_1)) {
          PyErr_SetNone(PyExc_AssertionError);
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2352; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
        }
      }
      #endif
    }
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L16_try_end;
    __pyx_L9_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2353
 *             dim = int(arg)
 *             assert dim>=0
 *         except ValueError:             # <<<<<<<<<<<<<<
 *             raise ValueError, 'Cannot initialize NNC_Polyhedron with '+str(arg)+'.'
 *         degenerate_element = degenerate_element.lower()
 */
    __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_9) {
      __Pyx_AddTraceback("pyparma.ppl.NNC_Polyhedron.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2353; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_10);

      /* "pyparma/ppl.pyx":2354
 *             assert dim>=0
 *         except ValueError:
 *             raise ValueError, 'Cannot initialize NNC_Polyhedron with '+str(arg)+'.'             # <<<<<<<<<<<<<<
 *         degenerate_element = degenerate_element.lower()
 *         if degenerate_element=='universe':
 */
      __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2354; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_v_arg);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_arg);
      __Pyx_GIVEREF(__pyx_v_arg);
      __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_11, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2354; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_Cannot_initialize_NNC_Polyhedron, __pyx_t_12); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2354; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = PyNumber_Add(__pyx_t_11, __pyx_kp_s__5); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2354; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_12, 0, 0);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2354; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L10_exception_handled;
    }
    goto __pyx_L11_except_error;
    __pyx_L11_except_error:;
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
    goto __pyx_L1_error;
    __pyx_L10_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
    __pyx_L16_try_end:;
  }

  /* "pyparma/ppl.pyx":2355
 *         except ValueError:
 *             raise ValueError, 'Cannot initialize NNC_Polyhedron with '+str(arg)+'.'
 *         degenerate_element = degenerate_element.lower()             # <<<<<<<<<<<<<<
 *         if degenerate_element=='universe':
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)
 */
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_degenerate_element, __pyx_n_s_lower); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF_SET(__pyx_v_degenerate_element, __pyx_t_4);
  __pyx_t_4 = 0;

  /* "pyparma/ppl.pyx":2356
 *             raise ValueError, 'Cannot initialize NNC_Polyhedron with '+str(arg)+'.'
 *         degenerate_element = degenerate_element.lower()
 *         if degenerate_element=='universe':             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)
 *             return
 */
  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_degenerate_element, __pyx_n_s_universe, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":2357
 *         degenerate_element = degenerate_element.lower()
 *         if degenerate_element=='universe':
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)             # <<<<<<<<<<<<<<
 *             return
 *         elif degenerate_element=='empty':
 */
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_v_dim); if (unlikely((__pyx_t_13 == (Parma_Polyhedra_Library::dimension_type)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_self->__pyx_base.thisptr = new Parma_Polyhedra_Library::NNC_Polyhedron(((Parma_Polyhedra_Library::dimension_type)__pyx_t_13), Parma_Polyhedra_Library::UNIVERSE);

    /* "pyparma/ppl.pyx":2358
 *         if degenerate_element=='universe':
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)
 *             return             # <<<<<<<<<<<<<<
 *         elif degenerate_element=='empty':
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_dimension_type>dim, EMPTY)
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2359
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_dimension_type>dim, UNIVERSE)
 *             return
 *         elif degenerate_element=='empty':             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_dimension_type>dim, EMPTY)
 *             return
 */
  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_degenerate_element, __pyx_n_s_empty, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":2360
 *             return
 *         elif degenerate_element=='empty':
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_dimension_type>dim, EMPTY)             # <<<<<<<<<<<<<<
 *             return
 *         else:
 */
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_v_dim); if (unlikely((__pyx_t_13 == (Parma_Polyhedra_Library::dimension_type)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_self->__pyx_base.thisptr = new Parma_Polyhedra_Library::NNC_Polyhedron(((Parma_Polyhedra_Library::dimension_type)__pyx_t_13), Parma_Polyhedra_Library::EMPTY);

    /* "pyparma/ppl.pyx":2361
 *         elif degenerate_element=='empty':
 *             self.thisptr = new PPL_NNC_Polyhedron(<PPL_dimension_type>dim, EMPTY)
 *             return             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError, 'Unknown value: degenerate_element='+str(degenerate_element)+'.'
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":2363
 *             return
 *         else:
 *             raise ValueError, 'Unknown value: degenerate_element='+str(degenerate_element)+'.'             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_degenerate_element);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_degenerate_element);
    __Pyx_GIVEREF(__pyx_v_degenerate_element);
    __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyNumber_Add(__pyx_kp_s_Unknown_value_degenerate_element, __pyx_t_10); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyNumber_Add(__pyx_t_4, __pyx_kp_s__5); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_10, 0, 0);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":2318
 * 
 * 
 *     def __cinit__(self, arg, degenerate_element='universe'):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pyparma.ppl.NNC_Polyhedron.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_p_nnc);
  __Pyx_XDECREF((PyObject *)__pyx_v_p_c);
  __Pyx_XDECREF((PyObject *)__pyx_v_gs);
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XDECREF(__pyx_v_dim);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_degenerate_element);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2366
 * 
 * 
 *     def __init__(self, *args):             # <<<<<<<<<<<<<<
 *         """
 *         The Python destructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_14NNC_Polyhedron_2__init__[] = "\n        The Python destructor.\n\n        See :class:`NNC_Polyhedron` for documentation.\n\n        TESTS::\n\n            sage: from sage.libs.ppl import NNC_Polyhedron\n            sage: NNC_Polyhedron(3, 'empty')   # indirect doctest\n            The empty polyhedron in QQ^3\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_14NNC_Polyhedron_2__init__;
#endif
static int __pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_args = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron_2__init__(((struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *)__pyx_v_self), __pyx_v_args);

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

static int __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron_2__init__(CYTHON_UNUSED struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);

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

/* "pyparma/ppl.pyx":2382
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_5__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_5__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron_4__dealloc__(((struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron_4__dealloc__(struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":2386
 *         The Cython destructor.
 *         """
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->__pyx_base.thisptr;

  /* "pyparma/ppl.pyx":2382
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

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

/* "pyparma/ppl.pyx":2389
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_7__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_14NNC_Polyhedron_6__reduce__[] = "\n        Pickle object\n\n        TESTS::\n\n            sage: from sage.libs.ppl import NNC_Polyhedron, Variable\n            sage: P = NNC_Polyhedron(3, 'empty')\n            sage: loads(dumps(P))\n            The empty polyhedron in QQ^3\n\n            sage: Q = NNC_Polyhedron(5, 'universe')\n            sage: loads(dumps(Q))\n            The space-filling polyhedron in QQ^5\n\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: H = NNC_Polyhedron( 5*x-2*y >  x+y-1 )\n            sage: loads(dumps(H))\n            A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point,\n            1 closure_point, 1 ray, 1 line\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_7__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_14NNC_Polyhedron_6__reduce__(((struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *)__pyx_v_self));

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

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

  /* "pyparma/ppl.pyx":2411
 *             1 closure_point, 1 ray, 1 line
 *         """
 *         if self.is_empty():             # <<<<<<<<<<<<<<
 *             return (NNC_Polyhedron, (self.space_dimension(), 'empty'))
 *         elif self.is_universe():
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":2412
 *         """
 *         if self.is_empty():
 *             return (NNC_Polyhedron, (self.space_dimension(), 'empty'))             # <<<<<<<<<<<<<<
 *         elif self.is_universe():
 *             return (NNC_Polyhedron, (self.space_dimension(), 'universe'))
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_empty);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_empty);
    __Pyx_GIVEREF(__pyx_n_s_empty);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)));
    __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2413
 *         if self.is_empty():
 *             return (NNC_Polyhedron, (self.space_dimension(), 'empty'))
 *         elif self.is_universe():             # <<<<<<<<<<<<<<
 *             return (NNC_Polyhedron, (self.space_dimension(), 'universe'))
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_universe); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":2414
 *             return (NNC_Polyhedron, (self.space_dimension(), 'empty'))
 *         elif self.is_universe():
 *             return (NNC_Polyhedron, (self.space_dimension(), 'universe'))             # <<<<<<<<<<<<<<
 *         else:
 *             return (NNC_Polyhedron, (self.generators(),))
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_universe);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_universe);
    __Pyx_GIVEREF(__pyx_n_s_universe);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)));
    __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":2416
 *             return (NNC_Polyhedron, (self.space_dimension(), 'universe'))
 *         else:
 *             return (NNC_Polyhedron, (self.generators(),))             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_generators); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)));
    __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_NNC_Polyhedron)));
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2389
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object
 */

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

/* "pyparma/ppl.pyx":2477
 * 
 * 
 *     def __cinit__(self, PPL_dimension_type i):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_8Variable_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_8Variable_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  Parma_Polyhedra_Library::dimension_type __pyx_v_i;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2477; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_i = __Pyx_PyInt_As_size_t(values[0]); if (unlikely((__pyx_v_i == (Parma_Polyhedra_Library::dimension_type)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2477; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2477; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Variable.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable___cinit__(((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_self), __pyx_v_i);

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

static int __pyx_pf_7pyparma_3ppl_8Variable___cinit__(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self, Parma_Polyhedra_Library::dimension_type __pyx_v_i) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":2489
 *             x123
 *         """
 *         self.thisptr = new PPL_Variable(i)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Variable(__pyx_v_i);

  /* "pyparma/ppl.pyx":2477
 * 
 * 
 *     def __cinit__(self, PPL_dimension_type i):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

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

/* "pyparma/ppl.pyx":2492
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_8Variable_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_8Variable_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_8Variable_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_8Variable_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":2496
 *         The Cython destructor.
 *         """
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->thisptr;

  /* "pyparma/ppl.pyx":2492
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

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

/* "pyparma/ppl.pyx":2499
 * 
 * 
 *     def id(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the index of the Cartesian axis associated to the variable.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_5id(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8Variable_4id[] = "\n        Return the index of the Cartesian axis associated to the variable.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(123)\n            sage: x.id()\n            123\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_5id(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("id (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_4id(((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_4id(struct __pyx_obj_7pyparma_3ppl_Variable *__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("id", 0);

  /* "pyparma/ppl.pyx":2510
 *             123
 *         """
 *         return self.thisptr.id()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->thisptr->id()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2499
 * 
 * 
 *     def id(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the index of the Cartesian axis associated to the variable.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Variable.id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2513
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Checks if all the invariants are satisfied.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_7OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8Variable_6OK[] = "\n        Checks if all the invariants are satisfied.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: x.OK()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_7OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("OK (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_6OK(((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_6OK(struct __pyx_obj_7pyparma_3ppl_Variable *__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("OK", 0);

  /* "pyparma/ppl.pyx":2528
 *             True
 *         """
 *         return self.thisptr.OK()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->OK()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2513
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Checks if all the invariants are satisfied.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Variable.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2531
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_9space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8Variable_8space_dimension[] = "\n        Return the dimension of the vector space enclosing ``self``.\n\n        OUPUT:\n\n        Integer. The returned value is ``self.id()+1``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: x.space_dimension()\n            1\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_9space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("space_dimension (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_8space_dimension(((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_8space_dimension(struct __pyx_obj_7pyparma_3ppl_Variable *__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("space_dimension", 0);

  /* "pyparma/ppl.pyx":2546
 *             1
 *         """
 *         return self.thisptr.space_dimension()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->thisptr->space_dimension()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2531
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Variable.space_dimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2549
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a string representation.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_11__repr__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8Variable_10__repr__[] = "\n        Return a string representation.\n\n        OUTPUT:\n\n        String.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: x.__repr__()\n            'x0'\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_8Variable_10__repr__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_11__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_10__repr__(((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_self));

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

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

  /* "pyparma/ppl.pyx":2564
 *             'x0'
 *         """
 *         return 'x{0}'.format(self.id())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_x_0, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_id); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2549
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a string representation.
 */

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

/* "pyparma/ppl.pyx":2567
 * 
 * 
 *     def __add__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the sum ``self`` + ``other``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_13__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8Variable_12__add__[] = "\n        Return the sum ``self`` + ``other``.\n\n        INPUT:\n\n        - ``self``, ``other`` -- anything convertible to\n          ``Linear_Expression``: An integer, a :class:`Variable`, or a\n          :class:`Linear_Expression`.\n\n        OUTPUT:\n\n        A :class:`Linear_Expression` representing ``self`` + ``other``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0); y = Variable(1)\n            sage: x + 15\n            x0+15\n            sage: 15 + y\n            x1+15\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_8Variable_12__add__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_13__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__add__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_12__add__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_12__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__add__", 0);

  /* "pyparma/ppl.pyx":2590
 *             x1+15
 *         """
 *         return Linear_Expression(self)+Linear_Expression(other)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_other);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_other);
  __Pyx_GIVEREF(__pyx_v_other);
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2567
 * 
 * 
 *     def __add__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the sum ``self`` + ``other``.
 */

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

/* "pyparma/ppl.pyx":2593
 * 
 * 
 *     def __sub__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the difference ``self`` - ``other``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_15__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8Variable_14__sub__[] = "\n        Return the difference ``self`` - ``other``.\n\n        INPUT:\n\n        - ``self``, ``other`` -- anything convertible to\n          ``Linear_Expression``: An integer, a :class:`Variable`, or a\n          :class:`Linear_Expression`.\n\n        OUTPUT:\n\n        A :class:`Linear_Expression` representing ``self`` - ``other``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0); y = Variable(1)\n            sage: x - 15\n            x0-15\n            sage: 15 - y\n            -x1+15\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_8Variable_14__sub__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_15__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__sub__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_14__sub__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_14__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__sub__", 0);

  /* "pyparma/ppl.pyx":2616
 *             -x1+15
 *         """
 *         return Linear_Expression(self)-Linear_Expression(other)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_other);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_other);
  __Pyx_GIVEREF(__pyx_v_other);
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2593
 * 
 * 
 *     def __sub__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the difference ``self`` - ``other``.
 */

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

/* "pyparma/ppl.pyx":2619
 * 
 * 
 *     def __mul__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the product ``self`` * ``other``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_17__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8Variable_16__mul__[] = "\n        Return the product ``self`` * ``other``.\n\n        INPUT:\n\n        - ``self``, ``other`` -- One must be an integer, the other a\n          :class:`Variable`.\n\n        OUTPUT:\n\n        A :class:`Linear_Expression` representing ``self`` * ``other``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0); y = Variable(1)\n            sage: x * 15\n            15*x0\n            sage: 15 * y\n            15*x1\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_8Variable_16__mul__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_17__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__mul__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_16__mul__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_16__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__mul__", 0);

  /* "pyparma/ppl.pyx":2641
 *             15*x1
 *         """
 *         if isinstance(self, Variable):             # <<<<<<<<<<<<<<
 *             return Linear_Expression(self) * other
 *         else:
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Variable)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2642
 *         """
 *         if isinstance(self, Variable):
 *             return Linear_Expression(self) * other             # <<<<<<<<<<<<<<
 *         else:
 *             return Linear_Expression(other) * self
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self);
    __Pyx_GIVEREF(__pyx_v_self);
    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":2644
 *             return Linear_Expression(self) * other
 *         else:
 *             return Linear_Expression(other) * self             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_other);
    __Pyx_GIVEREF(__pyx_v_other);
    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_v_self); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2619
 * 
 * 
 *     def __mul__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the product ``self`` * ``other``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyparma.ppl.Variable.__mul__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2647
 * 
 * 
 *     def __pos__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return ``self`` as :class:`Linear_Expression`
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_19__pos__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8Variable_18__pos__[] = "\n        Return ``self`` as :class:`Linear_Expression`\n\n        OUTPUT:\n\n        The :class:`Linear_Expression` ``+self``\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0); x\n            x0\n            sage: +x\n            x0\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_8Variable_18__pos__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_19__pos__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pos__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_18__pos__(((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_18__pos__(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pos__", 0);

  /* "pyparma/ppl.pyx":2663
 *             x0
 *         """
 *         return Linear_Expression(self)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2647
 * 
 * 
 *     def __pos__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return ``self`` as :class:`Linear_Expression`
 */

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

/* "pyparma/ppl.pyx":2666
 * 
 * 
 *     def __neg__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return -``self`` as :class:`Linear_Expression`
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_21__neg__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8Variable_20__neg__[] = "\n        Return -``self`` as :class:`Linear_Expression`\n\n        OUTPUT:\n\n        The :class:`Linear_Expression` ``-self``\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0); x\n            x0\n            sage: -x\n            -x0\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_8Variable_20__neg__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_21__neg__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__neg__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_20__neg__(((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_20__neg__(struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__neg__", 0);

  /* "pyparma/ppl.pyx":2682
 *             -x0
 *         """
 *         return Linear_Expression(self)*(-1)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_int_neg_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2666
 * 
 * 
 *     def __neg__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return -``self`` as :class:`Linear_Expression`
 */

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

/* "pyparma/ppl.pyx":2685
 * 
 * 
 *     def __richcmp__(self, other, op):             # <<<<<<<<<<<<<<
 *         """
 *         Construct :class:`Constraint` from equalities or inequalities.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_23__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_arg_op); /*proto*/
static PyObject *__pyx_pw_7pyparma_3ppl_8Variable_23__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_arg_op) {
  PyObject *__pyx_v_op = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_v_op = __Pyx_PyInt_From_int(__pyx_arg_op); if (unlikely(!__pyx_v_op)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2685; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __Pyx_GOTREF(__pyx_v_op);
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Variable.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_8Variable_22__richcmp__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((PyObject *)__pyx_v_op));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8Variable_22__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_op) {
  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("__richcmp__", 0);

  /* "pyparma/ppl.pyx":2716
 *             -1==0
 *         """
 *         return _make_Constraint_from_richcmp(self, other, op)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__make_Constraint_from_richcmp(__pyx_v_self, __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2685
 * 
 * 
 *     def __richcmp__(self, other, op):             # <<<<<<<<<<<<<<
 *         """
 *         Construct :class:`Constraint` from equalities or inequalities.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Variable.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2782
 *     cdef mpz_t temp
 * 
 *     def __cinit__(self, *args):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_17Linear_Expression_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_17Linear_Expression_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_args = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression___cinit__(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self), __pyx_v_args);

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

static int __pyx_pf_7pyparma_3ppl_17Linear_Expression___cinit__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self, PyObject *__pyx_v_args) {
  PyObject *__pyx_v_a = NULL;
  PyObject *__pyx_v_b = NULL;
  PyObject *__pyx_v_ex = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_arg = NULL;
  struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_v = NULL;
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_e = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __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;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":2794
 *             10
 *         """
 *         mpz_init(self.temp)             # <<<<<<<<<<<<<<
 *         if len(args)==2:
 *             a = args[0]
 */
  mpz_init(__pyx_v_self->temp);

  /* "pyparma/ppl.pyx":2795
 *         """
 *         mpz_init(self.temp)
 *         if len(args)==2:             # <<<<<<<<<<<<<<
 *             a = args[0]
 *             b = args[1]
 */
  __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = ((__pyx_t_1 == 2) != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2796
 *         mpz_init(self.temp)
 *         if len(args)==2:
 *             a = args[0]             # <<<<<<<<<<<<<<
 *             b = args[1]
 *             ex = Linear_Expression(0)
 */
    __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2796; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_a = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2797
 *         if len(args)==2:
 *             a = args[0]
 *             b = args[1]             # <<<<<<<<<<<<<<
 *             ex = Linear_Expression(0)
 *             for i in range(0,len(a)):
 */
    __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2797; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_b = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2798
 *             a = args[0]
 *             b = args[1]
 *             ex = Linear_Expression(0)             # <<<<<<<<<<<<<<
 *             for i in range(0,len(a)):
 *                 ex = ex + Variable(i).__mul__(a[i])
 */
    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_ex = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":2799
 *             b = args[1]
 *             ex = Linear_Expression(0)
 *             for i in range(0,len(a)):             # <<<<<<<<<<<<<<
 *                 ex = ex + Variable(i).__mul__(a[i])
 *             arg = ex + b
 */
    __pyx_t_1 = PyObject_Length(__pyx_v_a); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_1; __pyx_t_4+=1) {
      __pyx_v_i = __pyx_t_4;

      /* "pyparma/ppl.pyx":2800
 *             ex = Linear_Expression(0)
 *             for i in range(0,len(a)):
 *                 ex = ex + Variable(i).__mul__(a[i])             # <<<<<<<<<<<<<<
 *             arg = ex + b
 *         elif len(args)==1:
 */
      __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Variable)), __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_mul); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_a, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_Add(__pyx_v_ex, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_ex, __pyx_t_6);
      __pyx_t_6 = 0;
    }

    /* "pyparma/ppl.pyx":2801
 *             for i in range(0,len(a)):
 *                 ex = ex + Variable(i).__mul__(a[i])
 *             arg = ex + b             # <<<<<<<<<<<<<<
 *         elif len(args)==1:
 *             arg = args[0]
 */
    __pyx_t_6 = PyNumber_Add(__pyx_v_ex, __pyx_v_b); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_v_arg = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":2802
 *                 ex = ex + Variable(i).__mul__(a[i])
 *             arg = ex + b
 *         elif len(args)==1:             # <<<<<<<<<<<<<<
 *             arg = args[0]
 *         elif len(args)==0:
 */
  __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = ((__pyx_t_1 == 1) != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2803
 *             arg = ex + b
 *         elif len(args)==1:
 *             arg = args[0]             # <<<<<<<<<<<<<<
 *         elif len(args)==0:
 *             self.thisptr = new PPL_Linear_Expression()
 */
    __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_v_arg = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":2804
 *         elif len(args)==1:
 *             arg = args[0]
 *         elif len(args)==0:             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Linear_Expression()
 *             return
 */
  __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = ((__pyx_t_1 == 0) != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2805
 *             arg = args[0]
 *         elif len(args)==0:
 *             self.thisptr = new PPL_Linear_Expression()             # <<<<<<<<<<<<<<
 *             return
 *         else:
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Linear_Expression();

    /* "pyparma/ppl.pyx":2806
 *         elif len(args)==0:
 *             self.thisptr = new PPL_Linear_Expression()
 *             return             # <<<<<<<<<<<<<<
 *         else:
 *             assert False, 'Cannot initialize with more than 2 arguments.'
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":2808
 *             return
 *         else:
 *             assert False, 'Cannot initialize with more than 2 arguments.'             # <<<<<<<<<<<<<<
 * 
 *         if isinstance(arg, Variable):
 */
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Cannot_initialize_with_more_than);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
    }
    #endif
  }
  __pyx_L3:;

  /* "pyparma/ppl.pyx":2810
 *             assert False, 'Cannot initialize with more than 2 arguments.'
 * 
 *         if isinstance(arg, Variable):             # <<<<<<<<<<<<<<
 *             v = <Variable>arg
 *             self.thisptr = new PPL_Linear_Expression(v.thisptr[0])
 */
  if (unlikely(!__pyx_v_arg)) { __Pyx_RaiseUnboundLocalError("arg"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Variable)); 
  __pyx_t_7 = (__pyx_t_2 != 0);
  if (__pyx_t_7) {

    /* "pyparma/ppl.pyx":2811
 * 
 *         if isinstance(arg, Variable):
 *             v = <Variable>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Linear_Expression(v.thisptr[0])
 *             return
 */
    if (unlikely(!__pyx_v_arg)) { __Pyx_RaiseUnboundLocalError("arg"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2811; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
    __pyx_t_6 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_v_v = ((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_t_6);
    __pyx_t_6 = 0;

    /* "pyparma/ppl.pyx":2812
 *         if isinstance(arg, Variable):
 *             v = <Variable>arg
 *             self.thisptr = new PPL_Linear_Expression(v.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, Linear_Expression):
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Linear_Expression((__pyx_v_v->thisptr[0]));

    /* "pyparma/ppl.pyx":2813
 *             v = <Variable>arg
 *             self.thisptr = new PPL_Linear_Expression(v.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Linear_Expression):
 *             e = <Linear_Expression>arg
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2814
 *             self.thisptr = new PPL_Linear_Expression(v.thisptr[0])
 *             return
 *         if isinstance(arg, Linear_Expression):             # <<<<<<<<<<<<<<
 *             e = <Linear_Expression>arg
 *             self.thisptr = new PPL_Linear_Expression(e.thisptr[0])
 */
  if (unlikely(!__pyx_v_arg)) { __Pyx_RaiseUnboundLocalError("arg"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2814; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
  __pyx_t_7 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)); 
  __pyx_t_2 = (__pyx_t_7 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":2815
 *             return
 *         if isinstance(arg, Linear_Expression):
 *             e = <Linear_Expression>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Linear_Expression(e.thisptr[0])
 *             return
 */
    if (unlikely(!__pyx_v_arg)) { __Pyx_RaiseUnboundLocalError("arg"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2815; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
    __pyx_t_6 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_v_e = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_6);
    __pyx_t_6 = 0;

    /* "pyparma/ppl.pyx":2816
 *         if isinstance(arg, Linear_Expression):
 *             e = <Linear_Expression>arg
 *             self.thisptr = new PPL_Linear_Expression(e.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         try:
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Linear_Expression((__pyx_v_e->thisptr[0]));

    /* "pyparma/ppl.pyx":2817
 *             e = <Linear_Expression>arg
 *             self.thisptr = new PPL_Linear_Expression(e.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         try:
 *             if isinstance(arg, int) or isinstance(arg, long):
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":2818
 *             self.thisptr = new PPL_Linear_Expression(e.thisptr[0])
 *             return
 *         try:             # <<<<<<<<<<<<<<
 *             if isinstance(arg, int) or isinstance(arg, long):
 *                 mpz_set_pyintlong(self.temp, arg)
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_10);
    /*try:*/ {

      /* "pyparma/ppl.pyx":2819
 *             return
 *         try:
 *             if isinstance(arg, int) or isinstance(arg, long):             # <<<<<<<<<<<<<<
 *                 mpz_set_pyintlong(self.temp, arg)
 *                 self.thisptr = new PPL_Linear_Expression(PPL_Coefficient(self.temp))
 */
      if (unlikely(!__pyx_v_arg)) { __Pyx_RaiseUnboundLocalError("arg"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2819; __pyx_clineno = __LINE__; goto __pyx_L8_error;} }
      __pyx_t_2 = PyInt_Check(__pyx_v_arg); 
      if (!(__pyx_t_2 != 0)) {
        if (unlikely(!__pyx_v_arg)) { __Pyx_RaiseUnboundLocalError("arg"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2819; __pyx_clineno = __LINE__; goto __pyx_L8_error;} }
        __pyx_t_7 = PyLong_Check(__pyx_v_arg); 
        __pyx_t_11 = (__pyx_t_7 != 0);
      } else {
        __pyx_t_11 = (__pyx_t_2 != 0);
      }
      if (__pyx_t_11) {

        /* "pyparma/ppl.pyx":2820
 *         try:
 *             if isinstance(arg, int) or isinstance(arg, long):
 *                 mpz_set_pyintlong(self.temp, arg)             # <<<<<<<<<<<<<<
 *                 self.thisptr = new PPL_Linear_Expression(PPL_Coefficient(self.temp))
 *                 return
 */
        if (unlikely(!__pyx_v_arg)) { __Pyx_RaiseUnboundLocalError("arg"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2820; __pyx_clineno = __LINE__; goto __pyx_L8_error;} }
        __pyx_t_12 = __pyx_f_7pyparma_6pylong_mpz_set_pyintlong(__pyx_v_self->temp, __pyx_v_arg); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2820; __pyx_clineno = __LINE__; goto __pyx_L8_error;}

        /* "pyparma/ppl.pyx":2821
 *             if isinstance(arg, int) or isinstance(arg, long):
 *                 mpz_set_pyintlong(self.temp, arg)
 *                 self.thisptr = new PPL_Linear_Expression(PPL_Coefficient(self.temp))             # <<<<<<<<<<<<<<
 *                 return
 *         except:
 */
        __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Linear_Expression(Parma_Polyhedra_Library::Coefficient(__pyx_v_self->temp));

        /* "pyparma/ppl.pyx":2822
 *                 mpz_set_pyintlong(self.temp, arg)
 *                 self.thisptr = new PPL_Linear_Expression(PPL_Coefficient(self.temp))
 *                 return             # <<<<<<<<<<<<<<
 *         except:
 *             print "Error has occured..."
 */
        __pyx_r = 0;
        goto __pyx_L12_try_return;
      }
    }
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L15_try_end;
    __pyx_L8_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "pyparma/ppl.pyx":2823
 *                 self.thisptr = new PPL_Linear_Expression(PPL_Coefficient(self.temp))
 *                 return
 *         except:             # <<<<<<<<<<<<<<
 *             print "Error has occured..."
 *             print sys.exc_info()[0]
 */
    /*except:*/ {
      __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_3, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2823; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_5);

      /* "pyparma/ppl.pyx":2824
 *                 return
 *         except:
 *             print "Error has occured..."             # <<<<<<<<<<<<<<
 *             print sys.exc_info()[0]
 *             pass
 */
      if (__Pyx_PrintOne(0, __pyx_kp_s_Error_has_occured) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2824; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}

      /* "pyparma/ppl.pyx":2825
 *         except:
 *             print "Error has occured..."
 *             print sys.exc_info()[0]             # <<<<<<<<<<<<<<
 *             pass
 *         raise ValueError, 'Cannot initialize with '+str(args)+'. Note: '+str(arg)
 */
      __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_14 = __Pyx_GetItemInt(__pyx_t_13, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_14 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;};
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (__Pyx_PrintOne(0, __pyx_t_14) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L9_exception_handled;
    }
    __pyx_L10_except_error:;
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    goto __pyx_L1_error;
    __pyx_L12_try_return:;
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    goto __pyx_L0;
    __pyx_L9_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    __pyx_L15_try_end:;
  }

  /* "pyparma/ppl.pyx":2827
 *             print sys.exc_info()[0]
 *             pass
 *         raise ValueError, 'Cannot initialize with '+str(args)+'. Note: '+str(arg)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_args);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_args);
  __Pyx_GIVEREF(__pyx_v_args);
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Add(__pyx_kp_s_Cannot_initialize_with, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_5, __pyx_kp_s_Note); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_v_arg)) { __Pyx_RaiseUnboundLocalError("arg"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_arg);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_arg);
  __Pyx_GIVEREF(__pyx_v_arg);
  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Add(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_5, 0, 0);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":2782
 *     cdef mpz_t temp
 * 
 *     def __cinit__(self, *args):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

  /* 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_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_b);
  __Pyx_XDECREF(__pyx_v_ex);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF((PyObject *)__pyx_v_v);
  __Pyx_XDECREF((PyObject *)__pyx_v_e);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2830
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_17Linear_Expression_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_17Linear_Expression_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_17Linear_Expression_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_17Linear_Expression_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":2834
 *         The Cython destructor.
 *         """
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->thisptr;

  /* "pyparma/ppl.pyx":2830
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

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

/* "pyparma/ppl.pyx":2837
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the dimension of the vector space necessary for the
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_5space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_4space_dimension[] = "\n        Return the dimension of the vector space necessary for the\n        linear expression.\n\n        OUTPUT:\n\n        Integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: ( x+y+1 ).space_dimension()\n            2\n            sage: ( x+y   ).space_dimension()\n            2\n            sage: (   y+1 ).space_dimension()\n            2\n            sage: ( x  +1 ).space_dimension()\n            1\n            sage: ( y+1-y ).space_dimension()\n            2\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_5space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("space_dimension (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_4space_dimension(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_4space_dimension(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__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("space_dimension", 0);

  /* "pyparma/ppl.pyx":2862
 *             2
 *         """
 *         return self.thisptr.space_dimension()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->thisptr->space_dimension()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2862; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2837
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the dimension of the vector space necessary for the
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.space_dimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2865
 * 
 * 
 *     def coefficient(self, Variable v):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficient of the variable ``v``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_7coefficient(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_6coefficient[] = "\n        Return the coefficient of the variable ``v``.\n\n        INPUT:\n\n        - ``v`` -- a :class:`Variable`.\n\n        OUTPUT:\n\n        An integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: e = 3*x+1\n            sage: e.coefficient(x)\n            3\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_7coefficient(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coefficient (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_7pyparma_3ppl_Variable, 1, "v", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2865; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_6coefficient(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_v));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_6coefficient(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_v) {
  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("coefficient", 0);

  /* "pyparma/ppl.pyx":2885
 *             3
 *         """
 *         return mpz_get_pyintlong(self.thisptr.coefficient(v.thisptr[0]).get_mpz_t())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_6pylong_mpz_get_pyintlong(__pyx_v_self->thisptr->coefficient((__pyx_v_v->thisptr[0])).get_mpz_t()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2865
 * 
 * 
 *     def coefficient(self, Variable v):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficient of the variable ``v``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.coefficient", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2888
 * 
 * 
 *     def coefficients(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficients of the linear expression.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_9coefficients(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_8coefficients[] = "\n        Return the coefficients of the linear expression.\n\n        OUTPUT:\n\n        A tuple of integers of length :meth:`space_dimension`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0);  y = Variable(1)\n            sage: e = 3*x+5*y+1\n            sage: e.coefficients()\n            (3, 5)\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_9coefficients(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coefficients (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_8coefficients(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_8coefficients(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self) {
  int __pyx_v_d;
  int __pyx_v_i;
  PyObject *__pyx_v_coeffs = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("coefficients", 0);

  /* "pyparma/ppl.pyx":2904
 *             (3, 5)
 *         """
 *         cdef int d = self.space_dimension()             # <<<<<<<<<<<<<<
 *         cdef int i
 *         coeffs = []
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_d = __pyx_t_3;

  /* "pyparma/ppl.pyx":2906
 *         cdef int d = self.space_dimension()
 *         cdef int i
 *         coeffs = []             # <<<<<<<<<<<<<<
 *         for i in range(0,d):
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2906; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_coeffs = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":2907
 *         cdef int i
 *         coeffs = []
 *         for i in range(0,d):             # <<<<<<<<<<<<<<
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))
 *         return tuple(coeffs)
 */
  __pyx_t_3 = __pyx_v_d;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;

    /* "pyparma/ppl.pyx":2908
 *         coeffs = []
 *         for i in range(0,d):
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))             # <<<<<<<<<<<<<<
 *         return tuple(coeffs)
 * 
 */
    __pyx_t_2 = __pyx_f_7pyparma_6pylong_mpz_get_pyintlong(__pyx_v_self->thisptr->coefficient(Parma_Polyhedra_Library::Variable(__pyx_v_i)).get_mpz_t()); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_coeffs, __pyx_t_2); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }

  /* "pyparma/ppl.pyx":2909
 *         for i in range(0,d):
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))
 *         return tuple(coeffs)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyList_AsTuple(__pyx_v_coeffs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2888
 * 
 * 
 *     def coefficients(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficients of the linear expression.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.coefficients", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_coeffs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2912
 * 
 * 
 *     def inhomogeneous_term(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the inhomogeneous term of the linear expression.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_11inhomogeneous_term(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_10inhomogeneous_term[] = "\n        Return the inhomogeneous term of the linear expression.\n\n        OUTPUT:\n\n        Integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Linear_Expression\n            sage: Linear_Expression(10).inhomogeneous_term()\n            10\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_11inhomogeneous_term(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inhomogeneous_term (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_10inhomogeneous_term(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_10inhomogeneous_term(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__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("inhomogeneous_term", 0);

  /* "pyparma/ppl.pyx":2926
 *             10
 *         """
 *         return mpz_get_pyintlong(self.thisptr.inhomogeneous_term().get_mpz_t())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_6pylong_mpz_get_pyintlong(__pyx_v_self->thisptr->inhomogeneous_term().get_mpz_t()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2912
 * 
 * 
 *     def inhomogeneous_term(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the inhomogeneous term of the linear expression.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.inhomogeneous_term", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2929
 * 
 * 
 *     def is_zero(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test if ``self`` is the zero linear expression.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_13is_zero(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_12is_zero[] = "\n        Test if ``self`` is the zero linear expression.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Linear_Expression\n            sage: Linear_Expression(0).is_zero()\n            True\n            sage: Linear_Expression(10).is_zero()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_13is_zero(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_zero (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_12is_zero(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_12is_zero(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__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("is_zero", 0);

  /* "pyparma/ppl.pyx":2945
 *             False
 *         """
 *         return self.thisptr.is_zero()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_zero()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2945; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2929
 * 
 * 
 *     def is_zero(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test if ``self`` is the zero linear expression.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.is_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2948
 * 
 * 
 *     def all_homogeneous_terms_are_zero(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test if ``self`` is a constant linear expression.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_15all_homogeneous_terms_are_zero(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_14all_homogeneous_terms_are_zero[] = "\n        Test if ``self`` is a constant linear expression.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Linear_Expression\n            sage: Linear_Expression(10).all_homogeneous_terms_are_zero()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_15all_homogeneous_terms_are_zero(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("all_homogeneous_terms_are_zero (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_14all_homogeneous_terms_are_zero(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_14all_homogeneous_terms_are_zero(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__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("all_homogeneous_terms_are_zero", 0);

  /* "pyparma/ppl.pyx":2962
 *             True
 *         """
 *         return self.thisptr.all_homogeneous_terms_are_zero()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->all_homogeneous_terms_are_zero()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2948
 * 
 * 
 *     def all_homogeneous_terms_are_zero(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test if ``self`` is a constant linear expression.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.all_homogeneous_terms_are_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":2965
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_17ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_16ascii_dump[] = "\n        Write an ASCII dump to stderr.\n\n        EXAMPLES::\n\n            sage: sage_cmd  = 'from sage.libs.ppl import Linear_Expression, Variable\\n'\n            sage: sage_cmd += 'x = Variable(0)\\n'\n            sage: sage_cmd += 'y = Variable(1)\\n'\n            sage: sage_cmd += 'e = 3*x+2*y+1\\n'\n            sage: sage_cmd += 'e.ascii_dump()\\n'\n            sage: from sage.tests.cmdline import test_executable\n            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest\n            sage: print err  # long time\n            size 3 1 3 2\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_17ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_16ascii_dump(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_16ascii_dump(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump", 0);

  /* "pyparma/ppl.pyx":2981
 *             size 3 1 3 2
 *         """
 *         self.thisptr.ascii_dump()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->ascii_dump();

  /* "pyparma/ppl.pyx":2965
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

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

/* "pyparma/ppl.pyx":2984
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_19OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_18OK[] = "\n        Check if all the invariants are satisfied.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: e = 3*x+2*y+1\n            sage: e.OK()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_19OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("OK (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_18OK(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_18OK(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__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("OK", 0);

  /* "pyparma/ppl.pyx":2997
 *             True
 *         """
 *         return self.thisptr.OK()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->OK()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2997; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":2984
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3000
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation of the linear expression.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_21__repr__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_20__repr__[] = "\n        Return a string representation of the linear expression.\n\n        OUTPUT:\n\n        A string.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: x+1\n            x0+1\n            sage: x+1-x\n            1\n            sage: 2*x\n            2*x0\n            sage: x-x-1\n            -1\n            sage: x-x\n            0\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_20__repr__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_21__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_20__repr__(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_20__repr__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self) {
  PyObject *__pyx_v_s = NULL;
  int __pyx_v_first;
  PyObject *__pyx_v_i = NULL;
  struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_x = NULL;
  PyObject *__pyx_v_coeff = NULL;
  PyObject *__pyx_v_inhomog = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int __pyx_t_8;
  int __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyparma/ppl.pyx":3024
 *             0
 *         """
 *         s = ''             # <<<<<<<<<<<<<<
 *         first = True
 *         for i in range(0,self.space_dimension()):
 */
  __Pyx_INCREF(__pyx_kp_s__7);
  __pyx_v_s = __pyx_kp_s__7;

  /* "pyparma/ppl.pyx":3025
 *         """
 *         s = ''
 *         first = True             # <<<<<<<<<<<<<<
 *         for i in range(0,self.space_dimension()):
 *             x = Variable(i)
 */
  __pyx_v_first = 1;

  /* "pyparma/ppl.pyx":3026
 *         s = ''
 *         first = True
 *         for i in range(0,self.space_dimension()):             # <<<<<<<<<<<<<<
 *             x = Variable(i)
 *             coeff = self.coefficient(x)
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) {
    __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_1)) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_1)) {
      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_2 = __pyx_t_4(__pyx_t_1);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":3027
 *         first = True
 *         for i in range(0,self.space_dimension()):
 *             x = Variable(i)             # <<<<<<<<<<<<<<
 *             coeff = self.coefficient(x)
 *             if coeff==0: continue
 */
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Variable)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_x, ((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_t_5));
    __pyx_t_5 = 0;

    /* "pyparma/ppl.pyx":3028
 *         for i in range(0,self.space_dimension()):
 *             x = Variable(i)
 *             coeff = self.coefficient(x)             # <<<<<<<<<<<<<<
 *             if coeff==0: continue
 *             if first and coeff==1:
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_coefficient); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3028; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3028; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)__pyx_v_x));
    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_x));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_x));
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3028; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_coeff, __pyx_t_6);
    __pyx_t_6 = 0;

    /* "pyparma/ppl.pyx":3029
 *             x = Variable(i)
 *             coeff = self.coefficient(x)
 *             if coeff==0: continue             # <<<<<<<<<<<<<<
 *             if first and coeff==1:
 *                 s += '%r' % x
 */
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_coeff, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3029; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3029; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_7) {
      goto __pyx_L3_continue;
    }

    /* "pyparma/ppl.pyx":3030
 *             coeff = self.coefficient(x)
 *             if coeff==0: continue
 *             if first and coeff==1:             # <<<<<<<<<<<<<<
 *                 s += '%r' % x
 *                 first = False
 */
    __pyx_t_7 = __pyx_v_first;
    if (__pyx_t_7) {
      __pyx_t_6 = PyObject_RichCompare(__pyx_v_coeff, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_9 = __pyx_t_8;
    } else {
      __pyx_t_9 = __pyx_t_7;
    }
    if (__pyx_t_9) {

      /* "pyparma/ppl.pyx":3031
 *             if coeff==0: continue
 *             if first and coeff==1:
 *                 s += '%r' % x             # <<<<<<<<<<<<<<
 *                 first = False
 *             elif first and coeff==-1:
 */
      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_r, ((PyObject *)__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_2);
      __pyx_t_2 = 0;

      /* "pyparma/ppl.pyx":3032
 *             if first and coeff==1:
 *                 s += '%r' % x
 *                 first = False             # <<<<<<<<<<<<<<
 *             elif first and coeff==-1:
 *                 s += '-%r' % x
 */
      __pyx_v_first = 0;
      goto __pyx_L6;
    }

    /* "pyparma/ppl.pyx":3033
 *                 s += '%r' % x
 *                 first = False
 *             elif first and coeff==-1:             # <<<<<<<<<<<<<<
 *                 s += '-%r' % x
 *                 first = False
 */
    __pyx_t_9 = __pyx_v_first;
    if (__pyx_t_9) {
      __pyx_t_2 = PyObject_RichCompare(__pyx_v_coeff, __pyx_int_neg_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_8 = __pyx_t_7;
    } else {
      __pyx_t_8 = __pyx_t_9;
    }
    if (__pyx_t_8) {

      /* "pyparma/ppl.pyx":3034
 *                 first = False
 *             elif first and coeff==-1:
 *                 s += '-%r' % x             # <<<<<<<<<<<<<<
 *                 first = False
 *             elif first and coeff!=1:
 */
      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_r_2, ((PyObject *)__pyx_v_x)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3034; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3034; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_6);
      __pyx_t_6 = 0;

      /* "pyparma/ppl.pyx":3035
 *             elif first and coeff==-1:
 *                 s += '-%r' % x
 *                 first = False             # <<<<<<<<<<<<<<
 *             elif first and coeff!=1:
 *                 s += '%d*%r' % (coeff, x)
 */
      __pyx_v_first = 0;
      goto __pyx_L6;
    }

    /* "pyparma/ppl.pyx":3036
 *                 s += '-%r' % x
 *                 first = False
 *             elif first and coeff!=1:             # <<<<<<<<<<<<<<
 *                 s += '%d*%r' % (coeff, x)
 *                 first = False
 */
    __pyx_t_8 = __pyx_v_first;
    if (__pyx_t_8) {
      __pyx_t_6 = PyObject_RichCompare(__pyx_v_coeff, __pyx_int_1, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_7 = __pyx_t_9;
    } else {
      __pyx_t_7 = __pyx_t_8;
    }
    if (__pyx_t_7) {

      /* "pyparma/ppl.pyx":3037
 *                 first = False
 *             elif first and coeff!=1:
 *                 s += '%d*%r' % (coeff, x)             # <<<<<<<<<<<<<<
 *                 first = False
 *             elif coeff==1:
 */
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_coeff);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_coeff);
      __Pyx_GIVEREF(__pyx_v_coeff);
      __Pyx_INCREF(((PyObject *)__pyx_v_x));
      PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_x));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_x));
      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_d_r, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_6);
      __pyx_t_6 = 0;

      /* "pyparma/ppl.pyx":3038
 *             elif first and coeff!=1:
 *                 s += '%d*%r' % (coeff, x)
 *                 first = False             # <<<<<<<<<<<<<<
 *             elif coeff==1:
 *                 s += '+%r' % x
 */
      __pyx_v_first = 0;
      goto __pyx_L6;
    }

    /* "pyparma/ppl.pyx":3039
 *                 s += '%d*%r' % (coeff, x)
 *                 first = False
 *             elif coeff==1:             # <<<<<<<<<<<<<<
 *                 s += '+%r' % x
 *             elif coeff==-1:
 */
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_coeff, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_7) {

      /* "pyparma/ppl.pyx":3040
 *                 first = False
 *             elif coeff==1:
 *                 s += '+%r' % x             # <<<<<<<<<<<<<<
 *             elif coeff==-1:
 *                 s += '-%r' % x
 */
      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_r_3, ((PyObject *)__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_2);
      __pyx_t_2 = 0;
      goto __pyx_L6;
    }

    /* "pyparma/ppl.pyx":3041
 *             elif coeff==1:
 *                 s += '+%r' % x
 *             elif coeff==-1:             # <<<<<<<<<<<<<<
 *                 s += '-%r' % x
 *             else:
 */
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_coeff, __pyx_int_neg_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_7) {

      /* "pyparma/ppl.pyx":3042
 *                 s += '+%r' % x
 *             elif coeff==-1:
 *                 s += '-%r' % x             # <<<<<<<<<<<<<<
 *             else:
 *                 s += '%+d*%r' % (coeff, x)
 */
      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_r_2, ((PyObject *)__pyx_v_x)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_6);
      __pyx_t_6 = 0;
      goto __pyx_L6;
    }
    /*else*/ {

      /* "pyparma/ppl.pyx":3044
 *                 s += '-%r' % x
 *             else:
 *                 s += '%+d*%r' % (coeff, x)             # <<<<<<<<<<<<<<
 *         inhomog = self.inhomogeneous_term()
 *         if inhomog!=0:
 */
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_coeff);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_coeff);
      __Pyx_GIVEREF(__pyx_v_coeff);
      __Pyx_INCREF(((PyObject *)__pyx_v_x));
      PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_x));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_x));
      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_d_r_2, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __pyx_L6:;
    __pyx_L3_continue:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":3045
 *             else:
 *                 s += '%+d*%r' % (coeff, x)
 *         inhomog = self.inhomogeneous_term()             # <<<<<<<<<<<<<<
 *         if inhomog!=0:
 *             if first:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_inhomogeneous_term); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_inhomog = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "pyparma/ppl.pyx":3046
 *                 s += '%+d*%r' % (coeff, x)
 *         inhomog = self.inhomogeneous_term()
 *         if inhomog!=0:             # <<<<<<<<<<<<<<
 *             if first:
 *                 s += '%d' % inhomog
 */
  __pyx_t_6 = PyObject_RichCompare(__pyx_v_inhomog, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3046; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3046; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_7) {

    /* "pyparma/ppl.pyx":3047
 *         inhomog = self.inhomogeneous_term()
 *         if inhomog!=0:
 *             if first:             # <<<<<<<<<<<<<<
 *                 s += '%d' % inhomog
 *                 first = False
 */
    __pyx_t_7 = (__pyx_v_first != 0);
    if (__pyx_t_7) {

      /* "pyparma/ppl.pyx":3048
 *         if inhomog!=0:
 *             if first:
 *                 s += '%d' % inhomog             # <<<<<<<<<<<<<<
 *                 first = False
 *             else:
 */
      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_d, __pyx_v_inhomog); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_1);
      __pyx_t_1 = 0;

      /* "pyparma/ppl.pyx":3049
 *             if first:
 *                 s += '%d' % inhomog
 *                 first = False             # <<<<<<<<<<<<<<
 *             else:
 *                 s += '%+d' % inhomog
 */
      __pyx_v_first = 0;
      goto __pyx_L8;
    }
    /*else*/ {

      /* "pyparma/ppl.pyx":3051
 *                 first = False
 *             else:
 *                 s += '%+d' % inhomog             # <<<<<<<<<<<<<<
 *         if first:
 *             s = '0'
 */
      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_d_2, __pyx_v_inhomog); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3051; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3051; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __pyx_L8:;
    goto __pyx_L7;
  }
  __pyx_L7:;

  /* "pyparma/ppl.pyx":3052
 *             else:
 *                 s += '%+d' % inhomog
 *         if first:             # <<<<<<<<<<<<<<
 *             s = '0'
 *         return s
 */
  __pyx_t_7 = (__pyx_v_first != 0);
  if (__pyx_t_7) {

    /* "pyparma/ppl.pyx":3053
 *                 s += '%+d' % inhomog
 *         if first:
 *             s = '0'             # <<<<<<<<<<<<<<
 *         return s
 * 
 */
    __Pyx_INCREF(__pyx_kp_s_0);
    __Pyx_DECREF_SET(__pyx_v_s, __pyx_kp_s_0);
    goto __pyx_L9;
  }
  __pyx_L9:;

  /* "pyparma/ppl.pyx":3054
 *         if first:
 *             s = '0'
 *         return s             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_s);
  __pyx_r = __pyx_v_s;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3000
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation of the linear expression.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF((PyObject *)__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_coeff);
  __Pyx_XDECREF(__pyx_v_inhomog);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3057
 * 
 * 
 *     def __add__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add ``self`` and ``other``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_23__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_22__add__[] = "\n        Add ``self`` and ``other``.\n\n        INPUT:\n\n        - ``self``, ``other`` -- anything that can be used to\n          construct a :class:`Linear_Expression`. One of them, not\n          necessarily ``self``, is guaranteed to be a\n          :class:``Linear_Expression``, otherwise Python would not\n          have called this method.\n\n        OUTPUT:\n\n        The sum as a :class:`Linear_Expression`\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: 9+x+y+(1+x)+y+y\n            2*x0+3*x1+10\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_22__add__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_23__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__add__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_22__add__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_22__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_lhs = 0;
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_rhs = 0;
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__add__", 0);

  /* "pyparma/ppl.pyx":3081
 *             2*x0+3*x1+10
 *         """
 *         cdef Linear_Expression lhs = Linear_Expression(self)             # <<<<<<<<<<<<<<
 *         cdef Linear_Expression rhs = Linear_Expression(other)
 *         cdef Linear_Expression result = Linear_Expression()
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_lhs = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3082
 *         """
 *         cdef Linear_Expression lhs = Linear_Expression(self)
 *         cdef Linear_Expression rhs = Linear_Expression(other)             # <<<<<<<<<<<<<<
 *         cdef Linear_Expression result = Linear_Expression()
 *         result.thisptr[0] = lhs.thisptr[0] + rhs.thisptr[0]
 */
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3082; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_other);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other);
  __Pyx_GIVEREF(__pyx_v_other);
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3082; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_rhs = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":3083
 *         cdef Linear_Expression lhs = Linear_Expression(self)
 *         cdef Linear_Expression rhs = Linear_Expression(other)
 *         cdef Linear_Expression result = Linear_Expression()             # <<<<<<<<<<<<<<
 *         result.thisptr[0] = lhs.thisptr[0] + rhs.thisptr[0]
 *         return result
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3083; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":3084
 *         cdef Linear_Expression rhs = Linear_Expression(other)
 *         cdef Linear_Expression result = Linear_Expression()
 *         result.thisptr[0] = lhs.thisptr[0] + rhs.thisptr[0]             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  (__pyx_v_result->thisptr[0]) = ((__pyx_v_lhs->thisptr[0]) + (__pyx_v_rhs->thisptr[0]));

  /* "pyparma/ppl.pyx":3085
 *         cdef Linear_Expression result = Linear_Expression()
 *         result.thisptr[0] = lhs.thisptr[0] + rhs.thisptr[0]
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_result));
  __pyx_r = ((PyObject *)__pyx_v_result);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3057
 * 
 * 
 *     def __add__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Add ``self`` and ``other``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_lhs);
  __Pyx_XDECREF((PyObject *)__pyx_v_rhs);
  __Pyx_XDECREF((PyObject *)__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3088
 * 
 * 
 *     def __sub__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Subtract ``other`` from ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_25__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_24__sub__[] = "\n        Subtract ``other`` from ``self``.\n\n        INPUT:\n\n        - ``self``, ``other`` -- anything that can be used to\n          construct a :class:`Linear_Expression`. One of them, not\n          necessarily ``self``, is guaranteed to be a\n          :class:``Linear_Expression``, otherwise Python would not\n          have called this method.\n\n        OUTPUT:\n\n        The difference as a :class:`Linear_Expression`\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: 9-x-y-(1-x)-y-y\n            -3*x1+8\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_24__sub__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_25__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__sub__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_24__sub__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_24__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_lhs = 0;
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_rhs = 0;
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__sub__", 0);

  /* "pyparma/ppl.pyx":3112
 *             -3*x1+8
 *         """
 *         cdef Linear_Expression lhs = Linear_Expression(self)             # <<<<<<<<<<<<<<
 *         cdef Linear_Expression rhs = Linear_Expression(other)
 *         cdef Linear_Expression result = Linear_Expression()
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_lhs = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3113
 *         """
 *         cdef Linear_Expression lhs = Linear_Expression(self)
 *         cdef Linear_Expression rhs = Linear_Expression(other)             # <<<<<<<<<<<<<<
 *         cdef Linear_Expression result = Linear_Expression()
 *         result.thisptr[0] = lhs.thisptr[0] - rhs.thisptr[0]
 */
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_other);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other);
  __Pyx_GIVEREF(__pyx_v_other);
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_rhs = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":3114
 *         cdef Linear_Expression lhs = Linear_Expression(self)
 *         cdef Linear_Expression rhs = Linear_Expression(other)
 *         cdef Linear_Expression result = Linear_Expression()             # <<<<<<<<<<<<<<
 *         result.thisptr[0] = lhs.thisptr[0] - rhs.thisptr[0]
 *         return result
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":3115
 *         cdef Linear_Expression rhs = Linear_Expression(other)
 *         cdef Linear_Expression result = Linear_Expression()
 *         result.thisptr[0] = lhs.thisptr[0] - rhs.thisptr[0]             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  (__pyx_v_result->thisptr[0]) = ((__pyx_v_lhs->thisptr[0]) - (__pyx_v_rhs->thisptr[0]));

  /* "pyparma/ppl.pyx":3116
 *         cdef Linear_Expression result = Linear_Expression()
 *         result.thisptr[0] = lhs.thisptr[0] - rhs.thisptr[0]
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_result));
  __pyx_r = ((PyObject *)__pyx_v_result);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3088
 * 
 * 
 *     def __sub__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Subtract ``other`` from ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.__sub__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_lhs);
  __Pyx_XDECREF((PyObject *)__pyx_v_rhs);
  __Pyx_XDECREF((PyObject *)__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3119
 * 
 * 
 *     def __mul__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Multiply ``self`` with ``other``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_27__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_26__mul__[] = "\n        Multiply ``self`` with ``other``.\n\n        INPUT:\n\n        - ``self``, ``other`` -- anything that can be used to\n          construct a :class:`Linear_Expression`. One of them, not\n          necessarily ``self``, is guaranteed to be a\n          :class:``Linear_Expression``, otherwise Python would not\n          have called this method.\n\n        OUTPUT:\n\n        The product as a :class:`Linear_Expression`\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: 8*(x+1)\n            8*x0+8\n            sage: y*8\n            8*x1\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_26__mul__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_27__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__mul__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_26__mul__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_26__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_e = 0;
  mpz_t __pyx_v_value;
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__mul__", 0);

  /* "pyparma/ppl.pyx":3147
 *         cdef Linear_Expression e
 *         cdef mpz_t value
 *         mpz_init(value)             # <<<<<<<<<<<<<<
 *         if isinstance(self, Linear_Expression):
 *             e = <Linear_Expression>self
 */
  mpz_init(__pyx_v_value);

  /* "pyparma/ppl.pyx":3148
 *         cdef mpz_t value
 *         mpz_init(value)
 *         if isinstance(self, Linear_Expression):             # <<<<<<<<<<<<<<
 *             e = <Linear_Expression>self
 *             mpz_set_pyintlong(value, other)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":3149
 *         mpz_init(value)
 *         if isinstance(self, Linear_Expression):
 *             e = <Linear_Expression>self             # <<<<<<<<<<<<<<
 *             mpz_set_pyintlong(value, other)
 *         else:
 */
    __pyx_t_3 = __pyx_v_self;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_e = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":3150
 *         if isinstance(self, Linear_Expression):
 *             e = <Linear_Expression>self
 *             mpz_set_pyintlong(value, other)             # <<<<<<<<<<<<<<
 *         else:
 *             e = <Linear_Expression>other
 */
    __pyx_t_4 = __pyx_f_7pyparma_6pylong_mpz_set_pyintlong(__pyx_v_value, __pyx_v_other); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L3;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":3152
 *             mpz_set_pyintlong(value, other)
 *         else:
 *             e = <Linear_Expression>other             # <<<<<<<<<<<<<<
 *             mpz_set_pyintlong(value, self)
 * 
 */
    __pyx_t_3 = __pyx_v_other;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_e = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":3153
 *         else:
 *             e = <Linear_Expression>other
 *             mpz_set_pyintlong(value, self)             # <<<<<<<<<<<<<<
 * 
 *         cdef Linear_Expression result = Linear_Expression()
 */
    __pyx_t_4 = __pyx_f_7pyparma_6pylong_mpz_set_pyintlong(__pyx_v_value, __pyx_v_self); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L3:;

  /* "pyparma/ppl.pyx":3155
 *             mpz_set_pyintlong(value, self)
 * 
 *         cdef Linear_Expression result = Linear_Expression()             # <<<<<<<<<<<<<<
 *         result.thisptr[0] = e.thisptr[0] * PPL_Coefficient(value)
 *         return result
 */
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_result = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "pyparma/ppl.pyx":3156
 * 
 *         cdef Linear_Expression result = Linear_Expression()
 *         result.thisptr[0] = e.thisptr[0] * PPL_Coefficient(value)             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  (__pyx_v_result->thisptr[0]) = ((__pyx_v_e->thisptr[0]) * Parma_Polyhedra_Library::Coefficient(__pyx_v_value));

  /* "pyparma/ppl.pyx":3157
 *         cdef Linear_Expression result = Linear_Expression()
 *         result.thisptr[0] = e.thisptr[0] * PPL_Coefficient(value)
 *         return result             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_result));
  __pyx_r = ((PyObject *)__pyx_v_result);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3119
 * 
 * 
 *     def __mul__(self, other):             # <<<<<<<<<<<<<<
 *         r"""
 *         Multiply ``self`` with ``other``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.__mul__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_e);
  __Pyx_XDECREF((PyObject *)__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3160
 * 
 * 
 *     def __pos__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_29__pos__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_28__pos__[] = "\n        Return ``self``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Linear_Expression\n            sage: +Linear_Expression(1)\n            1\n            sage: x = Variable(0)\n            sage: +(x+1)\n            x0+1\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_28__pos__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_29__pos__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pos__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_28__pos__(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_28__pos__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pos__", 0);

  /* "pyparma/ppl.pyx":3173
 *             x0+1
 *         """
 *         return self             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3160
 * 
 * 
 *     def __pos__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return ``self``.
 */

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

/* "pyparma/ppl.pyx":3176
 * 
 * 
 *     def __neg__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the negative of ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_31__neg__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_30__neg__[] = "\n        Return the negative of ``self``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Linear_Expression\n            sage: -Linear_Expression(1)\n            -1\n            sage: x = Variable(0)\n            sage: -(x+1)\n            -x0-1\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_30__neg__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_31__neg__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__neg__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_30__neg__(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_30__neg__(struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__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("__neg__", 0);

  /* "pyparma/ppl.pyx":3189
 *             -x0-1
 *         """
 *         return self*(-1)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyNumber_Multiply(((PyObject *)__pyx_v_self), __pyx_int_neg_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3176
 * 
 * 
 *     def __neg__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the negative of ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Linear_Expression.__neg__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3192
 * 
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         """
 *         Construct :class:`Constraint`s
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_33__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_33__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_32__richcmp__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Linear_Expression_32__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  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("__richcmp__", 0);

  /* "pyparma/ppl.pyx":3212
 *             x0-x1+3>0
 *         """
 *         return _make_Constraint_from_richcmp(self, other, op)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_op); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_7pyparma_3ppl__make_Constraint_from_richcmp(__pyx_v_self, __pyx_v_other, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3192
 * 
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         """
 *         Construct :class:`Constraint`s
 */

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

/* "pyparma/ppl.pyx":3215
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_35__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Linear_Expression_34__reduce__[] = "\n        Pickle object\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression\n            sage: le = loads(dumps(Linear_Expression([1,2,3],4)))\n            sage: le.coefficients() == (1,2,3)\n            True\n            sage: le.inhomogeneous_term() == 4\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Linear_Expression_35__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Linear_Expression_34__reduce__(((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_v_self));

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

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

  /* "pyparma/ppl.pyx":3228
 *             True
 *         """
 *         return (Linear_Expression, (self.coefficients(), self.inhomogeneous_term()))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_coefficients); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_inhomogeneous_term); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)));
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3215
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object
 */

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

/* "pyparma/ppl.pyx":3234
 * ### Generator ######################################
 * ####################################################
 * cdef _wrap_Generator(PPL_Generator generator):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Generator`` into a Cython ``Generator``.
 */

static PyObject *__pyx_f_7pyparma_3ppl__wrap_Generator(Parma_Polyhedra_Library::Generator __pyx_v_generator) {
  struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_wrap_Generator", 0);

  /* "pyparma/ppl.pyx":3238
 *     Wrap a C++ ``PPL_Generator`` into a Cython ``Generator``.
 *     """
 *     cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *     g.thisptr = new PPL_Generator(generator)
 *     return g
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)), __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_g = ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":3239
 *     """
 *     cdef Generator g = Generator(True)
 *     g.thisptr = new PPL_Generator(generator)             # <<<<<<<<<<<<<<
 *     return g
 * 
 */
  __pyx_v_g->thisptr = new Parma_Polyhedra_Library::Generator(__pyx_v_generator);

  /* "pyparma/ppl.pyx":3240
 *     cdef Generator g = Generator(True)
 *     g.thisptr = new PPL_Generator(generator)
 *     return g             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_g));
  __pyx_r = ((PyObject *)__pyx_v_g);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3234
 * ### Generator ######################################
 * ####################################################
 * cdef _wrap_Generator(PPL_Generator generator):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Generator`` into a Cython ``Generator``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl._wrap_Generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_g);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3304
 * 
 * 
 *     def __cinit__(self, do_not_construct_manually=False):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_9Generator_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_9Generator_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_do_not_construct_manually = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_do_not_construct_manually,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_do_not_construct_manually);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_do_not_construct_manually = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Generator.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator___cinit__(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self), __pyx_v_do_not_construct_manually);

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

static int __pyx_pf_7pyparma_3ppl_9Generator___cinit__(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self, PyObject *__pyx_v_do_not_construct_manually) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":3317
 *             line(1)
 *         """
 *         assert(do_not_construct_manually)             # <<<<<<<<<<<<<<
 *         self.thisptr = NULL
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_do_not_construct_manually); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (unlikely(!__pyx_t_1)) {
      PyErr_SetNone(PyExc_AssertionError);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":3318
 *         """
 *         assert(do_not_construct_manually)
 *         self.thisptr = NULL             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr = NULL;

  /* "pyparma/ppl.pyx":3304
 * 
 * 
 *     def __cinit__(self, do_not_construct_manually=False):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Generator.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3321
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_9Generator_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_9Generator_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_9Generator_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_9Generator_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":3325
 *         The Cython destructor.
 *         """
 *         assert self.thisptr!=NULL, 'Do not construct Generators manually!'             # <<<<<<<<<<<<<<
 *         del self.thisptr
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_self->thisptr != NULL) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Do_not_construct_Generators_manu);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":3326
 *         """
 *         assert self.thisptr!=NULL, 'Do not construct Generators manually!'
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->thisptr;

  /* "pyparma/ppl.pyx":3321
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("pyparma.ppl.Generator.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "pyparma/ppl.pyx":3330
 * 
 *     @classmethod
 *     def line(cls, expression):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a line.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_5line(PyObject *__pyx_v_cls, PyObject *__pyx_v_expression); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_4line[] = "\n        Construct a line.\n\n        INPUT:\n\n        - ``expression`` -- a :class:`Linear_Expression` or something\n          convertible to it (:class:`Variable` or integer).\n\n        OUTPUT:\n\n        A new :class:`Generator` representing the line.\n\n        Raises a ``ValueError` if the homogeneous part of\n        ``expression`` represents the origin of the vector space.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator, Variable\n            sage: y = Variable(1)\n            sage: Generator.line(2*y)\n            line(0, 1)\n            sage: Generator.line(y)\n            line(0, 1)\n            sage: Generator.line(1)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::line(e):\n            e == 0, but the origin cannot be a line.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_5line(PyObject *__pyx_v_cls, PyObject *__pyx_v_expression) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("line (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_4line(((PyObject*)__pyx_v_cls), ((PyObject *)__pyx_v_expression));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_4line(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_expression) {
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_e = 0;
  struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g = 0;
  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;
  Parma_Polyhedra_Library::Generator *__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("line", 0);

  /* "pyparma/ppl.pyx":3360
 *             e == 0, but the origin cannot be a line.
 *         """
 *         cdef Linear_Expression e = Linear_Expression(expression)             # <<<<<<<<<<<<<<
 *         # This does not work as Cython gets confused by the private default ctor
 *         #   return _wrap_Generator(PPL_line(e.thisptr[0]))
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_expression);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_expression);
  __Pyx_GIVEREF(__pyx_v_expression);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_e = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3364
 *         #   return _wrap_Generator(PPL_line(e.thisptr[0]))
 *         # workaround follows
 *         cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *         try:
 *             g.thisptr = new_line(e.thisptr[0])
 */
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)), __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_g = ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3365
 *         # workaround follows
 *         cdef Generator g = Generator(True)
 *         try:             # <<<<<<<<<<<<<<
 *             g.thisptr = new_line(e.thisptr[0])
 *         except BaseException:
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    /*try:*/ {

      /* "pyparma/ppl.pyx":3366
 *         cdef Generator g = Generator(True)
 *         try:
 *             g.thisptr = new_line(e.thisptr[0])             # <<<<<<<<<<<<<<
 *         except BaseException:
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 */
      try {
        __pyx_t_6 = new_line((__pyx_v_e->thisptr[0]));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
      __pyx_v_g->thisptr = __pyx_t_6;
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L10_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":3367
 *         try:
 *             g.thisptr = new_line(e.thisptr[0])
 *         except BaseException:             # <<<<<<<<<<<<<<
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 */
    __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_BaseException);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyparma.ppl.Generator.line", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3367; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_8);

      /* "pyparma/ppl.pyx":3369
 *         except BaseException:
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))             # <<<<<<<<<<<<<<
 *             raise
 *         return g
 */
      try {
        __pyx_t_6 = new_point((__pyx_v_e->thisptr[0]), Parma_Polyhedra_Library::Coefficient(1));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3369; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      }
      __pyx_v_g->thisptr = __pyx_t_6;

      /* "pyparma/ppl.pyx":3370
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 *             raise             # <<<<<<<<<<<<<<
 *         return g
 * 
 */
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_2, __pyx_t_1, __pyx_t_8);
      __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_8 = 0; 
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3370; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    __pyx_L10_try_end:;
  }

  /* "pyparma/ppl.pyx":3371
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 *             raise
 *         return g             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_g));
  __pyx_r = ((PyObject *)__pyx_v_g);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3330
 * 
 *     @classmethod
 *     def line(cls, expression):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a line.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyparma.ppl.Generator.line", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_e);
  __Pyx_XDECREF((PyObject *)__pyx_v_g);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3375
 * 
 *     @classmethod
 *     def ray(cls, expression):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a ray.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_7ray(PyObject *__pyx_v_cls, PyObject *__pyx_v_expression); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_6ray[] = "\n        Construct a ray.\n\n        INPUT:\n\n        - ``expression`` -- a :class:`Linear_Expression` or something\n          convertible to it (:class:`Variable` or integer).\n\n        OUTPUT:\n\n        A new :class:`Generator` representing the ray.\n\n        Raises a ``ValueError` if the homogeneous part of\n        ``expression`` represents the origin of the vector space.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator, Variable\n            sage: y = Variable(1)\n            sage: Generator.ray(2*y)\n            ray(0, 1)\n            sage: Generator.ray(y)\n            ray(0, 1)\n            sage: Generator.ray(1)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::ray(e):\n            e == 0, but the origin cannot be a ray.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_7ray(PyObject *__pyx_v_cls, PyObject *__pyx_v_expression) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ray (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_6ray(((PyObject*)__pyx_v_cls), ((PyObject *)__pyx_v_expression));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_6ray(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_expression) {
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_e = 0;
  struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g = 0;
  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;
  Parma_Polyhedra_Library::Generator *__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("ray", 0);

  /* "pyparma/ppl.pyx":3405
 *             e == 0, but the origin cannot be a ray.
 *         """
 *         cdef Linear_Expression e = Linear_Expression(expression)             # <<<<<<<<<<<<<<
 *         # This does not work as Cython gets confused by the private default ctor
 *         #   return _wrap_Generator(PPL_ray(e.thisptr[0]))
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_expression);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_expression);
  __Pyx_GIVEREF(__pyx_v_expression);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_e = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3409
 *         #   return _wrap_Generator(PPL_ray(e.thisptr[0]))
 *         # workaround follows
 *         cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *         try:
 *             g.thisptr = new_ray(e.thisptr[0])
 */
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)), __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_g = ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3410
 *         # workaround follows
 *         cdef Generator g = Generator(True)
 *         try:             # <<<<<<<<<<<<<<
 *             g.thisptr = new_ray(e.thisptr[0])
 *         except BaseException:
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    /*try:*/ {

      /* "pyparma/ppl.pyx":3411
 *         cdef Generator g = Generator(True)
 *         try:
 *             g.thisptr = new_ray(e.thisptr[0])             # <<<<<<<<<<<<<<
 *         except BaseException:
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 */
      try {
        __pyx_t_6 = new_ray((__pyx_v_e->thisptr[0]));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3411; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
      __pyx_v_g->thisptr = __pyx_t_6;
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L10_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":3412
 *         try:
 *             g.thisptr = new_ray(e.thisptr[0])
 *         except BaseException:             # <<<<<<<<<<<<<<
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 */
    __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_BaseException);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyparma.ppl.Generator.ray", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3412; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_8);

      /* "pyparma/ppl.pyx":3414
 *         except BaseException:
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))             # <<<<<<<<<<<<<<
 *             raise
 *         return g
 */
      try {
        __pyx_t_6 = new_point((__pyx_v_e->thisptr[0]), Parma_Polyhedra_Library::Coefficient(1));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3414; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      }
      __pyx_v_g->thisptr = __pyx_t_6;

      /* "pyparma/ppl.pyx":3415
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 *             raise             # <<<<<<<<<<<<<<
 *         return g
 * 
 */
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_2, __pyx_t_1, __pyx_t_8);
      __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_8 = 0; 
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3415; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    __pyx_L10_try_end:;
  }

  /* "pyparma/ppl.pyx":3416
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 *             raise
 *         return g             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_g));
  __pyx_r = ((PyObject *)__pyx_v_g);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3375
 * 
 *     @classmethod
 *     def ray(cls, expression):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a ray.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyparma.ppl.Generator.ray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_e);
  __Pyx_XDECREF((PyObject *)__pyx_v_g);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3420
 * 
 *     @classmethod
 *     def point(cls, expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a point.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_9point(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_8point[] = "\n        Construct a point.\n\n        INPUT:\n\n        - ``expression`` -- a :class:`Linear_Expression` or something\n          convertible to it (:class:`Variable` or integer).\n\n        - ``divisor`` -- an integer.\n\n        OUTPUT:\n\n        A new :class:`Generator` representing the point.\n\n        Raises a ``ValueError` if ``divisor==0``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator, Variable\n            sage: y = Variable(1)\n            sage: Generator.point(2*y+7, 3)\n            point(0/3, 2/3)\n            sage: Generator.point(y+7, 3)\n            point(0/3, 1/3)\n            sage: Generator.point(7, 3)\n            point()\n            sage: Generator.point(0, 0)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::point(e, d):\n            d == 0.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_9point(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_expression = 0;
  PyObject *__pyx_v_divisor = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("point (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_expression,&__pyx_n_s_divisor,0};
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)__pyx_int_0);
    values[1] = ((PyObject *)__pyx_int_1);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_expression);
          if (value) { values[0] = value; kw_args--; }
        }
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_divisor);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "point") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3420; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_expression = values[0];
    __pyx_v_divisor = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("point", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3420; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Generator.point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_8point(((PyObject*)__pyx_v_cls), __pyx_v_expression, __pyx_v_divisor);

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_8point(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_expression, PyObject *__pyx_v_divisor) {
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_e = 0;
  mpz_t __pyx_v_d;
  struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  Parma_Polyhedra_Library::Generator *__pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("point", 0);

  /* "pyparma/ppl.pyx":3453
 *             d == 0.
 *         """
 *         cdef Linear_Expression e = Linear_Expression(expression)             # <<<<<<<<<<<<<<
 *         cdef mpz_t d
 *         mpz_init(d)
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_expression);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_expression);
  __Pyx_GIVEREF(__pyx_v_expression);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_e = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3455
 *         cdef Linear_Expression e = Linear_Expression(expression)
 *         cdef mpz_t d
 *         mpz_init(d)             # <<<<<<<<<<<<<<
 *         mpz_set_pyintlong(d, divisor)
 *         # This does not work as Cython gets confused by the private default ctor
 */
  mpz_init(__pyx_v_d);

  /* "pyparma/ppl.pyx":3456
 *         cdef mpz_t d
 *         mpz_init(d)
 *         mpz_set_pyintlong(d, divisor)             # <<<<<<<<<<<<<<
 *         # This does not work as Cython gets confused by the private default ctor
 *         #   return _wrap_Generator(PPL_point(e.thisptr[0], PPL_Coefficient(d.value)))
 */
  __pyx_t_3 = __pyx_f_7pyparma_6pylong_mpz_set_pyintlong(__pyx_v_d, __pyx_v_divisor); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":3460
 *         #   return _wrap_Generator(PPL_point(e.thisptr[0], PPL_Coefficient(d.value)))
 *         # workaround follows
 *         cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *         try:
 *             g.thisptr = new_point(e.thisptr[0], PPL_Coefficient(d))
 */
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)), __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_g = ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3461
 *         # workaround follows
 *         cdef Generator g = Generator(True)
 *         try:             # <<<<<<<<<<<<<<
 *             g.thisptr = new_point(e.thisptr[0], PPL_Coefficient(d))
 *         except BaseException:
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_6);
    /*try:*/ {

      /* "pyparma/ppl.pyx":3462
 *         cdef Generator g = Generator(True)
 *         try:
 *             g.thisptr = new_point(e.thisptr[0], PPL_Coefficient(d))             # <<<<<<<<<<<<<<
 *         except BaseException:
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 */
      try {
        __pyx_t_7 = new_point((__pyx_v_e->thisptr[0]), Parma_Polyhedra_Library::Coefficient(__pyx_v_d));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3462; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
      __pyx_v_g->thisptr = __pyx_t_7;
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L10_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":3463
 *         try:
 *             g.thisptr = new_point(e.thisptr[0], PPL_Coefficient(d))
 *         except BaseException:             # <<<<<<<<<<<<<<
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 */
    __pyx_t_3 = PyErr_ExceptionMatches(__pyx_builtin_BaseException);
    if (__pyx_t_3) {
      __Pyx_AddTraceback("pyparma.ppl.Generator.point", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3463; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_8);

      /* "pyparma/ppl.pyx":3465
 *         except BaseException:
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))             # <<<<<<<<<<<<<<
 *             raise
 *         return g
 */
      try {
        __pyx_t_7 = new_point((__pyx_v_e->thisptr[0]), Parma_Polyhedra_Library::Coefficient(1));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3465; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      }
      __pyx_v_g->thisptr = __pyx_t_7;

      /* "pyparma/ppl.pyx":3466
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 *             raise             # <<<<<<<<<<<<<<
 *         return g
 * 
 */
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_2, __pyx_t_1, __pyx_t_8);
      __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_8 = 0; 
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3466; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    __pyx_L10_try_end:;
  }

  /* "pyparma/ppl.pyx":3467
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 *             raise
 *         return g             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_g));
  __pyx_r = ((PyObject *)__pyx_v_g);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3420
 * 
 *     @classmethod
 *     def point(cls, expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a point.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyparma.ppl.Generator.point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_e);
  __Pyx_XDECREF((PyObject *)__pyx_v_g);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3471
 * 
 *     @classmethod
 *     def closure_point(cls, expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a closure point.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_11closure_point(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_10closure_point[] = "\n        Construct a closure point.\n\n        A closure point is a point of the topological closure of a\n        polyhedron that is not a point of the polyhedron itself.\n\n        INPUT:\n\n        - ``expression`` -- a :class:`Linear_Expression` or something\n          convertible to it (:class:`Variable` or integer).\n\n        - ``divisor`` -- an integer.\n\n        OUTPUT:\n\n        A new :class:`Generator` representing the point.\n\n        Raises a ``ValueError` if ``divisor==0``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator, Variable\n            sage: y = Variable(1)\n            sage: Generator.closure_point(2*y+7, 3)\n            closure_point(0/3, 2/3)\n            sage: Generator.closure_point(y+7, 3)\n            closure_point(0/3, 1/3)\n            sage: Generator.closure_point(7, 3)\n            closure_point()\n            sage: Generator.closure_point(0, 0)\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::closure_point(e, d):\n            d == 0.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_11closure_point(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_expression = 0;
  PyObject *__pyx_v_divisor = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("closure_point (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_expression,&__pyx_n_s_divisor,0};
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)__pyx_int_0);
    values[1] = ((PyObject *)__pyx_int_1);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_expression);
          if (value) { values[0] = value; kw_args--; }
        }
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_divisor);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "closure_point") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3471; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_expression = values[0];
    __pyx_v_divisor = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("closure_point", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3471; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Generator.closure_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_10closure_point(((PyObject*)__pyx_v_cls), __pyx_v_expression, __pyx_v_divisor);

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_10closure_point(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_expression, PyObject *__pyx_v_divisor) {
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_e = 0;
  mpz_t __pyx_v_d;
  struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  signed long __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  Parma_Polyhedra_Library::Generator *__pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("closure_point", 0);

  /* "pyparma/ppl.pyx":3507
 *             d == 0.
 *         """
 *         cdef Linear_Expression e = Linear_Expression(expression)             # <<<<<<<<<<<<<<
 *         cdef mpz_t d
 *         mpz_init(d)
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_expression);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_expression);
  __Pyx_GIVEREF(__pyx_v_expression);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_e = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3509
 *         cdef Linear_Expression e = Linear_Expression(expression)
 *         cdef mpz_t d
 *         mpz_init(d)             # <<<<<<<<<<<<<<
 *         mpz_set_si(d, divisor)
 *         # This does not work as Cython gets confused by the private default ctor
 */
  mpz_init(__pyx_v_d);

  /* "pyparma/ppl.pyx":3510
 *         cdef mpz_t d
 *         mpz_init(d)
 *         mpz_set_si(d, divisor)             # <<<<<<<<<<<<<<
 *         # This does not work as Cython gets confused by the private default ctor
 *         #   return _wrap_Generator(PPL_closure_point(e.thisptr[0], PPL_Coefficient(d.value)))
 */
  __pyx_t_3 = __Pyx_PyInt_As_signed__long(__pyx_v_divisor); if (unlikely((__pyx_t_3 == (signed long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  mpz_set_si(__pyx_v_d, __pyx_t_3);

  /* "pyparma/ppl.pyx":3514
 *         #   return _wrap_Generator(PPL_closure_point(e.thisptr[0], PPL_Coefficient(d.value)))
 *         # workaround follows
 *         cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *         try:
 *             g.thisptr = new_closure_point(e.thisptr[0], PPL_Coefficient(d))
 */
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)), __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_g = ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3515
 *         # workaround follows
 *         cdef Generator g = Generator(True)
 *         try:             # <<<<<<<<<<<<<<
 *             g.thisptr = new_closure_point(e.thisptr[0], PPL_Coefficient(d))
 *         except BaseException:
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_6);
    /*try:*/ {

      /* "pyparma/ppl.pyx":3516
 *         cdef Generator g = Generator(True)
 *         try:
 *             g.thisptr = new_closure_point(e.thisptr[0], PPL_Coefficient(d))             # <<<<<<<<<<<<<<
 *         except BaseException:
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 */
      try {
        __pyx_t_7 = new_closure_point((__pyx_v_e->thisptr[0]), Parma_Polyhedra_Library::Coefficient(__pyx_v_d));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
      __pyx_v_g->thisptr = __pyx_t_7;
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L10_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":3517
 *         try:
 *             g.thisptr = new_closure_point(e.thisptr[0], PPL_Coefficient(d))
 *         except BaseException:             # <<<<<<<<<<<<<<
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 */
    __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_BaseException);
    if (__pyx_t_8) {
      __Pyx_AddTraceback("pyparma.ppl.Generator.closure_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3517; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_9);

      /* "pyparma/ppl.pyx":3519
 *         except BaseException:
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))             # <<<<<<<<<<<<<<
 *             raise
 *         return g
 */
      try {
        __pyx_t_7 = new_point((__pyx_v_e->thisptr[0]), Parma_Polyhedra_Library::Coefficient(1));
      } catch(...) {
        try { throw; } catch(const std::exception& exn) { PyErr_SetString(__pyx_builtin_ValueError, exn.what()); } catch(...) { PyErr_SetNone(__pyx_builtin_ValueError); }
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3519; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      }
      __pyx_v_g->thisptr = __pyx_t_7;

      /* "pyparma/ppl.pyx":3520
 *             # g.thisptr must be set to something valid or g.__dealloc__() will segfault
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 *             raise             # <<<<<<<<<<<<<<
 *         return g
 * 
 */
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ErrRestore(__pyx_t_2, __pyx_t_1, __pyx_t_9);
      __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_9 = 0; 
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3520; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    __pyx_L10_try_end:;
  }

  /* "pyparma/ppl.pyx":3521
 *             g.thisptr = new_point(e.thisptr[0],PPL_Coefficient(1))
 *             raise
 *         return g             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_g));
  __pyx_r = ((PyObject *)__pyx_v_g);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3471
 * 
 *     @classmethod
 *     def closure_point(cls, expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a closure point.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyparma.ppl.Generator.closure_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_e);
  __Pyx_XDECREF((PyObject *)__pyx_v_g);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3524
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a string representation of the generator.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_13__repr__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_12__repr__[] = "\n        Return a string representation of the generator.\n\n        OUTPUT:\n\n        String.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: e = 2*x-y+5\n            sage: Generator.line(e)\n            line(2, -1)\n            sage: Generator.ray(e)\n            ray(2, -1)\n            sage: Generator.point(e, 3)\n            point(2/3, -1/3)\n            sage: Generator.closure_point(e, 3)\n            closure_point(2/3, -1/3)\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_9Generator_12__repr__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_13__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_12__repr__(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_12__repr__(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self) {
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_v_div = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyparma/ppl.pyx":3547
 *             closure_point(2/3, -1/3)
 *         """
 *         t = self.type()             # <<<<<<<<<<<<<<
 *         if t=='line':
 *             s = 'line('
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_type); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_t = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3548
 *         """
 *         t = self.type()
 *         if t=='line':             # <<<<<<<<<<<<<<
 *             s = 'line('
 *             div = ''
 */
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_t, __pyx_n_s_line_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":3549
 *         t = self.type()
 *         if t=='line':
 *             s = 'line('             # <<<<<<<<<<<<<<
 *             div = ''
 *         elif t=='ray':
 */
    __Pyx_INCREF(__pyx_kp_s_line_3);
    __pyx_v_s = __pyx_kp_s_line_3;

    /* "pyparma/ppl.pyx":3550
 *         if t=='line':
 *             s = 'line('
 *             div = ''             # <<<<<<<<<<<<<<
 *         elif t=='ray':
 *             s = 'ray('
 */
    __Pyx_INCREF(__pyx_kp_s__7);
    __pyx_v_div = __pyx_kp_s__7;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":3551
 *             s = 'line('
 *             div = ''
 *         elif t=='ray':             # <<<<<<<<<<<<<<
 *             s = 'ray('
 *             div = ''
 */
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_t, __pyx_n_s_ray_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3551; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":3552
 *             div = ''
 *         elif t=='ray':
 *             s = 'ray('             # <<<<<<<<<<<<<<
 *             div = ''
 *         elif t=='point':
 */
    __Pyx_INCREF(__pyx_kp_s_ray_3);
    __pyx_v_s = __pyx_kp_s_ray_3;

    /* "pyparma/ppl.pyx":3553
 *         elif t=='ray':
 *             s = 'ray('
 *             div = ''             # <<<<<<<<<<<<<<
 *         elif t=='point':
 *             s = 'point('
 */
    __Pyx_INCREF(__pyx_kp_s__7);
    __pyx_v_div = __pyx_kp_s__7;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":3554
 *             s = 'ray('
 *             div = ''
 *         elif t=='point':             # <<<<<<<<<<<<<<
 *             s = 'point('
 *             div = '/'+str(self.divisor())
 */
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_t, __pyx_n_s_point_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":3555
 *             div = ''
 *         elif t=='point':
 *             s = 'point('             # <<<<<<<<<<<<<<
 *             div = '/'+str(self.divisor())
 *         elif t=='closure_point':
 */
    __Pyx_INCREF(__pyx_kp_s_point_3);
    __pyx_v_s = __pyx_kp_s_point_3;

    /* "pyparma/ppl.pyx":3556
 *         elif t=='point':
 *             s = 'point('
 *             div = '/'+str(self.divisor())             # <<<<<<<<<<<<<<
 *         elif t=='closure_point':
 *             s = 'closure_point('
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_divisor); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Add(__pyx_kp_s__13, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_div = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L3;
  }

  /* "pyparma/ppl.pyx":3557
 *             s = 'point('
 *             div = '/'+str(self.divisor())
 *         elif t=='closure_point':             # <<<<<<<<<<<<<<
 *             s = 'closure_point('
 *             div = '/'+str(self.divisor())
 */
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_t, __pyx_n_s_closure_point_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":3558
 *             div = '/'+str(self.divisor())
 *         elif t=='closure_point':
 *             s = 'closure_point('             # <<<<<<<<<<<<<<
 *             div = '/'+str(self.divisor())
 *         else:
 */
    __Pyx_INCREF(__pyx_kp_s_closure_point_3);
    __pyx_v_s = __pyx_kp_s_closure_point_3;

    /* "pyparma/ppl.pyx":3559
 *         elif t=='closure_point':
 *             s = 'closure_point('
 *             div = '/'+str(self.divisor())             # <<<<<<<<<<<<<<
 *         else:
 *             assert(False)
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_divisor); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Add(__pyx_kp_s__13, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_div = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":3561
 *             div = '/'+str(self.divisor())
 *         else:
 *             assert(False)             # <<<<<<<<<<<<<<
 * 
 *         for i in range(0,self.space_dimension()):
 */
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        PyErr_SetNone(PyExc_AssertionError);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
    }
    #endif
  }
  __pyx_L3:;

  /* "pyparma/ppl.pyx":3563
 *             assert(False)
 * 
 *         for i in range(0,self.space_dimension()):             # <<<<<<<<<<<<<<
 *             if i>0:
 *                 s += ', '
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_2)) {
      if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_2)) {
      if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_1 = __pyx_t_5(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyparma/ppl.pyx":3564
 * 
 *         for i in range(0,self.space_dimension()):
 *             if i>0:             # <<<<<<<<<<<<<<
 *                 s += ', '
 *             s += str(self.coefficient(Variable(i))) + div
 */
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {

      /* "pyparma/ppl.pyx":3565
 *         for i in range(0,self.space_dimension()):
 *             if i>0:
 *                 s += ', '             # <<<<<<<<<<<<<<
 *             s += str(self.coefficient(Variable(i))) + div
 * 
 */
      if (unlikely(!__pyx_v_s)) { __Pyx_RaiseUnboundLocalError("s"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
      __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_kp_s__2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_1);
      __pyx_t_1 = 0;
      goto __pyx_L6;
    }
    __pyx_L6:;

    /* "pyparma/ppl.pyx":3566
 *             if i>0:
 *                 s += ', '
 *             s += str(self.coefficient(Variable(i))) + div             # <<<<<<<<<<<<<<
 * 
 *         s += ')'
 */
    if (unlikely(!__pyx_v_s)) { __Pyx_RaiseUnboundLocalError("s"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_coefficient); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Variable)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_v_div)) { __Pyx_RaiseUnboundLocalError("div"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
    __pyx_t_6 = PyNumber_Add(__pyx_t_7, __pyx_v_div); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_7);
    __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3568
 *             s += str(self.coefficient(Variable(i))) + div
 * 
 *         s += ')'             # <<<<<<<<<<<<<<
 *         return s
 * 
 */
  if (unlikely(!__pyx_v_s)) { __Pyx_RaiseUnboundLocalError("s"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
  __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_kp_s__14); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3569
 * 
 *         s += ')'
 *         return s             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_s);
  __pyx_r = __pyx_v_s;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3524
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a string representation of the generator.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyparma.ppl.Generator.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_div);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3572
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_15space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_14space_dimension[] = "\n        Return the dimension of the vector space enclosing ``self``.\n\n        OUTPUT:\n\n        Integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, point\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: point(x).space_dimension()\n            1\n            sage: point(y).space_dimension()\n            2\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_15space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("space_dimension (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_14space_dimension(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_14space_dimension(struct __pyx_obj_7pyparma_3ppl_Generator *__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("space_dimension", 0);

  /* "pyparma/ppl.pyx":3590
 *             2
 *         """
 *         return self.thisptr.space_dimension()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->thisptr->space_dimension()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3572
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator.space_dimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3593
 * 
 * 
 *     def type(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the generator type of ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_17type(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_16type[] = "\n        Return the generator type of ``self``.\n\n        OUTPUT:\n\n        String. One of ``'line'``, ``'ray'``, ``'point'``, or\n        ``'closure_point'``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, point, closure_point, ray, line\n            sage: x = Variable(0)\n            sage: line(x).type()\n            'line'\n            sage: ray(x).type()\n            'ray'\n            sage: point(x,2).type()\n            'point'\n            sage: closure_point(x,2).type()\n            'closure_point'\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_17type(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("type (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_16type(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_16type(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self) {
  Parma_Polyhedra_Library::Generator::Type __pyx_v_t;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("type", 0);

  /* "pyparma/ppl.pyx":3615
 *             'closure_point'
 *         """
 *         t = self.thisptr.type()             # <<<<<<<<<<<<<<
 *         if t==LINE:
 *             return 'line'
 */
  __pyx_v_t = __pyx_v_self->thisptr->type();

  /* "pyparma/ppl.pyx":3622
 *         elif t==POINT:
 *             return 'point'
 *         elif t==CLOSURE_POINT:             # <<<<<<<<<<<<<<
 *             return 'closure_point'
 *         assert False
 */
  switch (__pyx_v_t) {

    /* "pyparma/ppl.pyx":3616
 *         """
 *         t = self.thisptr.type()
 *         if t==LINE:             # <<<<<<<<<<<<<<
 *             return 'line'
 *         elif t==RAY:
 */
    case Parma_Polyhedra_Library::Generator::LINE:

    /* "pyparma/ppl.pyx":3617
 *         t = self.thisptr.type()
 *         if t==LINE:
 *             return 'line'             # <<<<<<<<<<<<<<
 *         elif t==RAY:
 *             return 'ray'
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_line_2);
    __pyx_r = __pyx_n_s_line_2;
    goto __pyx_L0;
    break;

    /* "pyparma/ppl.pyx":3618
 *         if t==LINE:
 *             return 'line'
 *         elif t==RAY:             # <<<<<<<<<<<<<<
 *             return 'ray'
 *         elif t==POINT:
 */
    case Parma_Polyhedra_Library::Generator::RAY:

    /* "pyparma/ppl.pyx":3619
 *             return 'line'
 *         elif t==RAY:
 *             return 'ray'             # <<<<<<<<<<<<<<
 *         elif t==POINT:
 *             return 'point'
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_ray_2);
    __pyx_r = __pyx_n_s_ray_2;
    goto __pyx_L0;
    break;

    /* "pyparma/ppl.pyx":3620
 *         elif t==RAY:
 *             return 'ray'
 *         elif t==POINT:             # <<<<<<<<<<<<<<
 *             return 'point'
 *         elif t==CLOSURE_POINT:
 */
    case Parma_Polyhedra_Library::Generator::POINT:

    /* "pyparma/ppl.pyx":3621
 *             return 'ray'
 *         elif t==POINT:
 *             return 'point'             # <<<<<<<<<<<<<<
 *         elif t==CLOSURE_POINT:
 *             return 'closure_point'
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_point_2);
    __pyx_r = __pyx_n_s_point_2;
    goto __pyx_L0;
    break;

    /* "pyparma/ppl.pyx":3622
 *         elif t==POINT:
 *             return 'point'
 *         elif t==CLOSURE_POINT:             # <<<<<<<<<<<<<<
 *             return 'closure_point'
 *         assert False
 */
    case Parma_Polyhedra_Library::Generator::CLOSURE_POINT:

    /* "pyparma/ppl.pyx":3623
 *             return 'point'
 *         elif t==CLOSURE_POINT:
 *             return 'closure_point'             # <<<<<<<<<<<<<<
 *         assert False
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_closure_point_2);
    __pyx_r = __pyx_n_s_closure_point_2;
    goto __pyx_L0;
    break;
    default: break;
  }

  /* "pyparma/ppl.pyx":3624
 *         elif t==CLOSURE_POINT:
 *             return 'closure_point'
 *         assert False             # <<<<<<<<<<<<<<
 * 
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!0)) {
      PyErr_SetNone(PyExc_AssertionError);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":3593
 * 
 * 
 *     def type(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the generator type of ``self``.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Generator.type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3627
 * 
 * 
 *     def is_line(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a line.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_19is_line(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_18is_line[] = "\n        Test whether ``self`` is a line.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, point, closure_point, ray, line\n            sage: x = Variable(0)\n            sage: line(x).is_line()\n            True\n            sage: ray(x).is_line()\n            False\n            sage: point(x,2).is_line()\n            False\n            sage: closure_point(x,2).is_line()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_19is_line(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_line (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_18is_line(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_18is_line(struct __pyx_obj_7pyparma_3ppl_Generator *__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("is_line", 0);

  /* "pyparma/ppl.pyx":3648
 *             False
 *         """
 *         return self.thisptr.is_line()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_line()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3627
 * 
 * 
 *     def is_line(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a line.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator.is_line", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3651
 * 
 * 
 *     def is_ray(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a ray.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_21is_ray(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_20is_ray[] = "\n        Test whether ``self`` is a ray.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, point, closure_point, ray, line\n            sage: x = Variable(0)\n            sage: line(x).is_ray()\n            False\n            sage: ray(x).is_ray()\n            True\n            sage: point(x,2).is_ray()\n            False\n            sage: closure_point(x,2).is_ray()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_21is_ray(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_ray (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_20is_ray(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_20is_ray(struct __pyx_obj_7pyparma_3ppl_Generator *__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("is_ray", 0);

  /* "pyparma/ppl.pyx":3672
 *             False
 *         """
 *         return self.thisptr.is_ray()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_ray()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3651
 * 
 * 
 *     def is_ray(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a ray.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator.is_ray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3675
 * 
 * 
 *     def is_line_or_ray(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a line or a ray.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_23is_line_or_ray(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_22is_line_or_ray[] = "\n        Test whether ``self`` is a line or a ray.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, point, closure_point, ray, line\n            sage: x = Variable(0)\n            sage: line(x).is_line_or_ray()\n            True\n            sage: ray(x).is_line_or_ray()\n            True\n            sage: point(x,2).is_line_or_ray()\n            False\n            sage: closure_point(x,2).is_line_or_ray()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_23is_line_or_ray(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_line_or_ray (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_22is_line_or_ray(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_22is_line_or_ray(struct __pyx_obj_7pyparma_3ppl_Generator *__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("is_line_or_ray", 0);

  /* "pyparma/ppl.pyx":3696
 *             False
 *         """
 *         return self.thisptr.is_line_or_ray()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_line_or_ray()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3696; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3675
 * 
 * 
 *     def is_line_or_ray(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a line or a ray.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator.is_line_or_ray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3699
 * 
 * 
 *     def is_point(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a point.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_25is_point(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_24is_point[] = "\n        Test whether ``self`` is a point.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, point, closure_point, ray, line\n            sage: x = Variable(0)\n            sage: line(x).is_point()\n            False\n            sage: ray(x).is_point()\n            False\n            sage: point(x,2).is_point()\n            True\n            sage: closure_point(x,2).is_point()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_25is_point(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_point (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_24is_point(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_24is_point(struct __pyx_obj_7pyparma_3ppl_Generator *__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("is_point", 0);

  /* "pyparma/ppl.pyx":3720
 *             False
 *         """
 *         return self.thisptr.is_point()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_point()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3699
 * 
 * 
 *     def is_point(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a point.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator.is_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3723
 * 
 * 
 *     def is_closure_point(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a closure point.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_27is_closure_point(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_26is_closure_point[] = "\n        Test whether ``self`` is a closure point.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, point, closure_point, ray, line\n            sage: x = Variable(0)\n            sage: line(x).is_closure_point()\n            False\n            sage: ray(x).is_closure_point()\n            False\n            sage: point(x,2).is_closure_point()\n            False\n            sage: closure_point(x,2).is_closure_point()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_27is_closure_point(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_closure_point (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_26is_closure_point(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_26is_closure_point(struct __pyx_obj_7pyparma_3ppl_Generator *__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("is_closure_point", 0);

  /* "pyparma/ppl.pyx":3744
 *             True
 *         """
 *         return self.thisptr.is_closure_point()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_closure_point()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3723
 * 
 * 
 *     def is_closure_point(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a closure point.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator.is_closure_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3747
 * 
 * 
 *     def coefficient(self, Variable v):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficient of the variable ``v``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_29coefficient(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_28coefficient[] = "\n        Return the coefficient of the variable ``v``.\n\n        INPUT:\n\n        - ``v`` -- a :class:`Variable`.\n\n        OUTPUT:\n\n        An integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, line\n            sage: x = Variable(0)\n            sage: line = line(3*x+1)\n            sage: line\n            line(1)\n            sage: line.coefficient(x)\n            1\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_29coefficient(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coefficient (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_7pyparma_3ppl_Variable, 1, "v", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_28coefficient(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_v));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_28coefficient(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_v) {
  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("coefficient", 0);

  /* "pyparma/ppl.pyx":3769
 *             1
 *         """
 *         return mpz_get_pyintlong(self.thisptr.coefficient(v.thisptr[0]).get_mpz_t())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_6pylong_mpz_get_pyintlong(__pyx_v_self->thisptr->coefficient((__pyx_v_v->thisptr[0])).get_mpz_t()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3747
 * 
 * 
 *     def coefficient(self, Variable v):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficient of the variable ``v``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator.coefficient", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3772
 * 
 * 
 *     def coefficients(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficients of the generator.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_31coefficients(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_30coefficients[] = "\n        Return the coefficients of the generator.\n\n        See also :meth:`coefficient`.\n\n        OUTPUT:\n\n        A tuple of integers of length :meth:`space_dimension`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, point\n            sage: x = Variable(0);  y = Variable(1)\n            sage: p = point(3*x+5*y+1, 2); p\n            point(3/2, 5/2)\n            sage: p.coefficients()\n            (3, 5)\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_31coefficients(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coefficients (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_30coefficients(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_30coefficients(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self) {
  int __pyx_v_d;
  int __pyx_v_i;
  PyObject *__pyx_v_coeffs = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("coefficients", 0);

  /* "pyparma/ppl.pyx":3791
 *             (3, 5)
 *         """
 *         cdef int d = self.space_dimension()             # <<<<<<<<<<<<<<
 *         cdef int i
 *         coeffs = []
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3791; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3791; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3791; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_d = __pyx_t_3;

  /* "pyparma/ppl.pyx":3793
 *         cdef int d = self.space_dimension()
 *         cdef int i
 *         coeffs = []             # <<<<<<<<<<<<<<
 *         for i in range(0,d):
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_coeffs = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3794
 *         cdef int i
 *         coeffs = []
 *         for i in range(0,d):             # <<<<<<<<<<<<<<
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))
 *         return tuple(coeffs)
 */
  __pyx_t_3 = __pyx_v_d;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;

    /* "pyparma/ppl.pyx":3795
 *         coeffs = []
 *         for i in range(0,d):
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))             # <<<<<<<<<<<<<<
 *         return tuple(coeffs)
 * 
 */
    __pyx_t_2 = __pyx_f_7pyparma_6pylong_mpz_get_pyintlong(__pyx_v_self->thisptr->coefficient(Parma_Polyhedra_Library::Variable(__pyx_v_i)).get_mpz_t()); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_coeffs, __pyx_t_2); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }

  /* "pyparma/ppl.pyx":3796
 *         for i in range(0,d):
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))
 *         return tuple(coeffs)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyList_AsTuple(__pyx_v_coeffs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3772
 * 
 * 
 *     def coefficients(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficients of the generator.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Generator.coefficients", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_coeffs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3799
 * 
 * 
 *     def divisor(self):             # <<<<<<<<<<<<<<
 *         """
 *         If ``self`` is either a point or a closure point, return its
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_33divisor(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_32divisor[] = "\n        If ``self`` is either a point or a closure point, return its\n        divisor.\n\n        OUTPUT:\n\n        An integer. If ``self`` is a ray or a line, raises\n        ``ValueError``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: point = Generator.point(2*x-y+5)\n            sage: point.divisor()\n            1\n            sage: line = Generator.line(2*x-y+5)\n            sage: line.divisor()\n            Traceback (most recent call last):\n            ...\n            ValueError: PPL::Generator::divisor():\n            *this is neither a point nor a closure point.\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_33divisor(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("divisor (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_32divisor(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_32divisor(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Parma_Polyhedra_Library::Coefficient __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("divisor", 0);

  /* "pyparma/ppl.pyx":3824
 *             *this is neither a point nor a closure point.
 *         """
 *         return mpz_get_pyintlong(self.thisptr.divisor().get_mpz_t())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->divisor();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_2 = __pyx_f_7pyparma_6pylong_mpz_get_pyintlong(__pyx_t_1.get_mpz_t()); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3799
 * 
 * 
 *     def divisor(self):             # <<<<<<<<<<<<<<
 *         """
 *         If ``self`` is either a point or a closure point, return its
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Generator.divisor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3827
 * 
 * 
 *     def is_equivalent_to(self, Generator g):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` and ``g`` are equivalent.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_35is_equivalent_to(PyObject *__pyx_v_self, PyObject *__pyx_v_g); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_34is_equivalent_to[] = "\n        Test whether ``self`` and ``g`` are equivalent.\n\n        INPUT:\n\n        - ``g`` -- a :class:`Generator`.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` and ``g``\n        are equivalent generators.\n\n        Note that generators having different space dimensions are not\n        equivalent.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator, Variable, point, line\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: point(2*x    , 2).is_equivalent_to( point(x) )\n            True\n            sage: point(2*x+0*y, 2).is_equivalent_to( point(x) )\n            False\n            sage: line(4*x).is_equivalent_to(line(x))\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_35is_equivalent_to(PyObject *__pyx_v_self, PyObject *__pyx_v_g) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_equivalent_to (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_7pyparma_3ppl_Generator, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_34is_equivalent_to(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_g));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_34is_equivalent_to(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g) {
  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("is_equivalent_to", 0);

  /* "pyparma/ppl.pyx":3855
 *             True
 *         """
 *         return self.thisptr.is_equivalent_to(g.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_equivalent_to((__pyx_v_g->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3827
 * 
 * 
 *     def is_equivalent_to(self, Generator g):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` and ``g`` are equivalent.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator.is_equivalent_to", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3858
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_37ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_36ascii_dump[] = "\n        Write an ASCII dump to stderr.\n\n        EXAMPLES::\n\n            sage: sage_cmd  = 'from sage.libs.ppl import Linear_Expression, Variable, point\\n'\n            sage: sage_cmd += 'x = Variable(0)\\n'\n            sage: sage_cmd += 'y = Variable(1)\\n'\n            sage: sage_cmd += 'p = point(3*x+2*y)\\n'\n            sage: sage_cmd += 'p.ascii_dump()\\n'\n            sage: from sage.tests.cmdline import test_executable\n            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest\n            sage: print err  # long time\n            size 3 1 3 2 P (C)\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_37ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_36ascii_dump(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_36ascii_dump(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump", 0);

  /* "pyparma/ppl.pyx":3874
 *             size 3 1 3 2 P (C)
 *         """
 *         self.thisptr.ascii_dump()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->ascii_dump();

  /* "pyparma/ppl.pyx":3858
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

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

/* "pyparma/ppl.pyx":3877
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_39OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_38OK[] = "\n        Check if all the invariants are satisfied.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: e = 3*x+2*y+1\n            sage: e.OK()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_39OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("OK (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_38OK(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_38OK(struct __pyx_obj_7pyparma_3ppl_Generator *__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("OK", 0);

  /* "pyparma/ppl.pyx":3890
 *             True
 *         """
 *         return self.thisptr.OK()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->OK()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3877
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3893
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_41__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_9Generator_40__reduce__[] = "\n        Pickle object.\n\n        TESTS::\n\n            sage: from sage.libs.ppl import Generator, Variable, line, ray, point, closure_point\n            sage: x = Variable(0); y = Variable(1);\n            sage: loads(dumps(Generator.point(2*x+7*y, 3)))\n            point(2/3, 7/3)\n            sage: loads(dumps(Generator.closure_point(2*x+7*y, 3)))\n            closure_point(2/3, 7/3)\n            sage: loads(dumps(Generator.line(2*x+7*y)))\n            line(2, 7)\n            sage: loads(dumps(Generator.ray(2*x+7*y)))\n            ray(2, 7)\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_9Generator_41__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_9Generator_40__reduce__(((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_9Generator_40__reduce__(struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_self) {
  Parma_Polyhedra_Library::Generator::Type __pyx_v_t;
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_le = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce__", 0);

  /* "pyparma/ppl.pyx":3910
 *             ray(2, 7)
 *         """
 *         t = self.thisptr.type()             # <<<<<<<<<<<<<<
 *         le = Linear_Expression(self.coefficients(), 0)
 *         if t==LINE:
 */
  __pyx_v_t = __pyx_v_self->thisptr->type();

  /* "pyparma/ppl.pyx":3911
 *         """
 *         t = self.thisptr.type()
 *         le = Linear_Expression(self.coefficients(), 0)             # <<<<<<<<<<<<<<
 *         if t==LINE:
 *             return (line, (le,))
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_coefficients); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3911; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3911; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3911; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3911; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_le = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3918
 *         elif t==POINT:
 *             return (point, (le, self.divisor()))
 *         elif t==CLOSURE_POINT:             # <<<<<<<<<<<<<<
 *             return (closure_point, (le, self.divisor()))
 *         assert False
 */
  switch (__pyx_v_t) {

    /* "pyparma/ppl.pyx":3912
 *         t = self.thisptr.type()
 *         le = Linear_Expression(self.coefficients(), 0)
 *         if t==LINE:             # <<<<<<<<<<<<<<
 *             return (line, (le,))
 *         elif t==RAY:
 */
    case Parma_Polyhedra_Library::Generator::LINE:

    /* "pyparma/ppl.pyx":3913
 *         le = Linear_Expression(self.coefficients(), 0)
 *         if t==LINE:
 *             return (line, (le,))             # <<<<<<<<<<<<<<
 *         elif t==RAY:
 *             return (ray, (le,))
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_line_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3913; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3913; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)__pyx_v_le));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_le));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_le));
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3913; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
    break;

    /* "pyparma/ppl.pyx":3914
 *         if t==LINE:
 *             return (line, (le,))
 *         elif t==RAY:             # <<<<<<<<<<<<<<
 *             return (ray, (le,))
 *         elif t==POINT:
 */
    case Parma_Polyhedra_Library::Generator::RAY:

    /* "pyparma/ppl.pyx":3915
 *             return (line, (le,))
 *         elif t==RAY:
 *             return (ray, (le,))             # <<<<<<<<<<<<<<
 *         elif t==POINT:
 *             return (point, (le, self.divisor()))
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ray_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3915; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3915; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)__pyx_v_le));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_le));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_le));
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3915; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_3 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
    break;

    /* "pyparma/ppl.pyx":3916
 *         elif t==RAY:
 *             return (ray, (le,))
 *         elif t==POINT:             # <<<<<<<<<<<<<<
 *             return (point, (le, self.divisor()))
 *         elif t==CLOSURE_POINT:
 */
    case Parma_Polyhedra_Library::Generator::POINT:

    /* "pyparma/ppl.pyx":3917
 *             return (ray, (le,))
 *         elif t==POINT:
 *             return (point, (le, self.divisor()))             # <<<<<<<<<<<<<<
 *         elif t==CLOSURE_POINT:
 *             return (closure_point, (le, self.divisor()))
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_point_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3917; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_divisor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3917; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3917; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3917; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)__pyx_v_le));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_le));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_le));
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3917; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
    break;

    /* "pyparma/ppl.pyx":3918
 *         elif t==POINT:
 *             return (point, (le, self.divisor()))
 *         elif t==CLOSURE_POINT:             # <<<<<<<<<<<<<<
 *             return (closure_point, (le, self.divisor()))
 *         assert False
 */
    case Parma_Polyhedra_Library::Generator::CLOSURE_POINT:

    /* "pyparma/ppl.pyx":3919
 *             return (point, (le, self.divisor()))
 *         elif t==CLOSURE_POINT:
 *             return (closure_point, (le, self.divisor()))             # <<<<<<<<<<<<<<
 *         assert False
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_closure_point_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_divisor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)__pyx_v_le));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_le));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_le));
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_3 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
    break;
    default: break;
  }

  /* "pyparma/ppl.pyx":3920
 *         elif t==CLOSURE_POINT:
 *             return (closure_point, (le, self.divisor()))
 *         assert False             # <<<<<<<<<<<<<<
 * 
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!0)) {
      PyErr_SetNone(PyExc_AssertionError);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":3893
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object.
 */

  /* 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("pyparma.ppl.Generator.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_le);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":3925
 * 
 * ####################################################
 * def line(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a line.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_1line(PyObject *__pyx_self, PyObject *__pyx_v_expression); /*proto*/
static char __pyx_doc_7pyparma_3ppl_line[] = "\n    Constuct a line.\n\n    See :meth:`Generator.line` for documentation.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Variable, line\n        sage: y = Variable(1)\n        sage: line(2*y)\n        line(0, 1)\n    ";
static PyMethodDef __pyx_mdef_7pyparma_3ppl_1line = {__Pyx_NAMESTR("line"), (PyCFunction)__pyx_pw_7pyparma_3ppl_1line, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_line)};
static PyObject *__pyx_pw_7pyparma_3ppl_1line(PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("line (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_line(__pyx_self, ((PyObject *)__pyx_v_expression));

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

static PyObject *__pyx_pf_7pyparma_3ppl_line(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  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("line", 0);

  /* "pyparma/ppl.pyx":3938
 *         line(0, 1)
 *     """
 *     return Generator.line(expression)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)), __pyx_n_s_line_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_expression);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_expression);
  __Pyx_GIVEREF(__pyx_v_expression);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3925
 * 
 * ####################################################
 * def line(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a line.
 */

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

/* "pyparma/ppl.pyx":3942
 * 
 * ####################################################
 * def ray(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a ray.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_3ray(PyObject *__pyx_self, PyObject *__pyx_v_expression); /*proto*/
static char __pyx_doc_7pyparma_3ppl_2ray[] = "\n    Constuct a ray.\n\n    See :meth:`Generator.ray` for documentation.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Variable, ray\n        sage: y = Variable(1)\n        sage: ray(2*y)\n        ray(0, 1)\n    ";
static PyMethodDef __pyx_mdef_7pyparma_3ppl_3ray = {__Pyx_NAMESTR("ray"), (PyCFunction)__pyx_pw_7pyparma_3ppl_3ray, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_2ray)};
static PyObject *__pyx_pw_7pyparma_3ppl_3ray(PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ray (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_2ray(__pyx_self, ((PyObject *)__pyx_v_expression));

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

static PyObject *__pyx_pf_7pyparma_3ppl_2ray(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  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("ray", 0);

  /* "pyparma/ppl.pyx":3955
 *         ray(0, 1)
 *     """
 *     return Generator.ray(expression)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)), __pyx_n_s_ray_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3955; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3955; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_expression);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_expression);
  __Pyx_GIVEREF(__pyx_v_expression);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3955; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3942
 * 
 * ####################################################
 * def ray(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a ray.
 */

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

/* "pyparma/ppl.pyx":3959
 * 
 * ####################################################
 * def point(expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a point.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_5point(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_4point[] = "\n    Constuct a point.\n\n    See :meth:`Generator.point` for documentation.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Variable, point\n        sage: y = Variable(1)\n        sage: point(2*y, 5)\n        point(0/5, 2/5)\n    ";
static PyMethodDef __pyx_mdef_7pyparma_3ppl_5point = {__Pyx_NAMESTR("point"), (PyCFunction)__pyx_pw_7pyparma_3ppl_5point, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_4point)};
static PyObject *__pyx_pw_7pyparma_3ppl_5point(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_expression = 0;
  PyObject *__pyx_v_divisor = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("point (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_expression,&__pyx_n_s_divisor,0};
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)__pyx_int_0);
    values[1] = ((PyObject *)__pyx_int_1);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_expression);
          if (value) { values[0] = value; kw_args--; }
        }
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_divisor);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "point") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_expression = values[0];
    __pyx_v_divisor = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("point", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_4point(__pyx_self, __pyx_v_expression, __pyx_v_divisor);

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

static PyObject *__pyx_pf_7pyparma_3ppl_4point(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression, PyObject *__pyx_v_divisor) {
  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("point", 0);

  /* "pyparma/ppl.pyx":3972
 *         point(0/5, 2/5)
 *     """
 *     return Generator.point(expression, divisor)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)), __pyx_n_s_point_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_expression);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_expression);
  __Pyx_GIVEREF(__pyx_v_expression);
  __Pyx_INCREF(__pyx_v_divisor);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_divisor);
  __Pyx_GIVEREF(__pyx_v_divisor);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3959
 * 
 * ####################################################
 * def point(expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a point.
 */

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

/* "pyparma/ppl.pyx":3976
 * 
 * ####################################################
 * def closure_point(expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a closure point.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_7closure_point(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_6closure_point[] = "\n    Constuct a closure point.\n\n    See :meth:`Generator.closure_point` for documentation.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Variable, closure_point\n        sage: y = Variable(1)\n        sage: closure_point(2*y, 5)\n        closure_point(0/5, 2/5)\n    ";
static PyMethodDef __pyx_mdef_7pyparma_3ppl_7closure_point = {__Pyx_NAMESTR("closure_point"), (PyCFunction)__pyx_pw_7pyparma_3ppl_7closure_point, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_6closure_point)};
static PyObject *__pyx_pw_7pyparma_3ppl_7closure_point(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_expression = 0;
  PyObject *__pyx_v_divisor = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("closure_point (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_expression,&__pyx_n_s_divisor,0};
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)__pyx_int_0);
    values[1] = ((PyObject *)__pyx_int_1);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_expression);
          if (value) { values[0] = value; kw_args--; }
        }
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_divisor);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "closure_point") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3976; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_expression = values[0];
    __pyx_v_divisor = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("closure_point", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3976; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.closure_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_6closure_point(__pyx_self, __pyx_v_expression, __pyx_v_divisor);

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

static PyObject *__pyx_pf_7pyparma_3ppl_6closure_point(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression, PyObject *__pyx_v_divisor) {
  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("closure_point", 0);

  /* "pyparma/ppl.pyx":3989
 *         closure_point(0/5, 2/5)
 *     """
 *     return Generator.closure_point(expression, divisor)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)), __pyx_n_s_closure_point_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3989; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3989; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_expression);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_expression);
  __Pyx_GIVEREF(__pyx_v_expression);
  __Pyx_INCREF(__pyx_v_divisor);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_divisor);
  __Pyx_GIVEREF(__pyx_v_divisor);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3989; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3976
 * 
 * ####################################################
 * def closure_point(expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a closure point.
 */

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

/* "pyparma/ppl.pyx":3996
 * ### Generator_System  ##############################
 * ####################################################
 * cdef _wrap_Generator_System(PPL_Generator_System generator_system):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Generator_System`` into a Cython ``Generator_System``.
 */

static PyObject *__pyx_f_7pyparma_3ppl__wrap_Generator_System(Parma_Polyhedra_Library::Generator_System __pyx_v_generator_system) {
  struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_gs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_wrap_Generator_System", 0);

  /* "pyparma/ppl.pyx":4000
 *     Wrap a C++ ``PPL_Generator_System`` into a Cython ``Generator_System``.
 *     """
 *     cdef Generator_System gs = Generator_System()             # <<<<<<<<<<<<<<
 *     del gs.thisptr
 *     gs.thisptr = new PPL_Generator_System(generator_system)
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4000; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_gs = ((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":4001
 *     """
 *     cdef Generator_System gs = Generator_System()
 *     del gs.thisptr             # <<<<<<<<<<<<<<
 *     gs.thisptr = new PPL_Generator_System(generator_system)
 *     return gs
 */
  delete __pyx_v_gs->thisptr;

  /* "pyparma/ppl.pyx":4002
 *     cdef Generator_System gs = Generator_System()
 *     del gs.thisptr
 *     gs.thisptr = new PPL_Generator_System(generator_system)             # <<<<<<<<<<<<<<
 *     return gs
 * 
 */
  __pyx_v_gs->thisptr = new Parma_Polyhedra_Library::Generator_System(__pyx_v_generator_system);

  /* "pyparma/ppl.pyx":4003
 *     del gs.thisptr
 *     gs.thisptr = new PPL_Generator_System(generator_system)
 *     return gs             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_gs));
  __pyx_r = ((PyObject *)__pyx_v_gs);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":3996
 * ### Generator_System  ##############################
 * ####################################################
 * cdef _wrap_Generator_System(PPL_Generator_System generator_system):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Generator_System`` into a Cython ``Generator_System``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl._wrap_Generator_System", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_gs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4038
 * 
 * 
 *     def __cinit__(self, arg=None):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_16Generator_System_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_16Generator_System_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arg);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4038; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4038; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Generator_System.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System___cinit__(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self), __pyx_v_arg);

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

static int __pyx_pf_7pyparma_3ppl_16Generator_System___cinit__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self, PyObject *__pyx_v_arg) {
  struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g = NULL;
  struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_gs = NULL;
  PyObject *__pyx_v_generator = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":4050
 *             Generator_System {}
 *         """
 *         if arg is None:             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Generator_System()
 *             return
 */
  __pyx_t_1 = (__pyx_v_arg == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":4051
 *         """
 *         if arg is None:
 *             self.thisptr = new PPL_Generator_System()             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, Generator):
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Generator_System();

    /* "pyparma/ppl.pyx":4052
 *         if arg is None:
 *             self.thisptr = new PPL_Generator_System()
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Generator):
 *             g = <Generator>arg
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4053
 *             self.thisptr = new PPL_Generator_System()
 *             return
 *         if isinstance(arg, Generator):             # <<<<<<<<<<<<<<
 *             g = <Generator>arg
 *             self.thisptr = new PPL_Generator_System(g.thisptr[0])
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator)); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":4054
 *             return
 *         if isinstance(arg, Generator):
 *             g = <Generator>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Generator_System(g.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_g = ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":4055
 *         if isinstance(arg, Generator):
 *             g = <Generator>arg
 *             self.thisptr = new PPL_Generator_System(g.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, Generator_System):
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Generator_System((__pyx_v_g->thisptr[0]));

    /* "pyparma/ppl.pyx":4056
 *             g = <Generator>arg
 *             self.thisptr = new PPL_Generator_System(g.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Generator_System):
 *             gs = <Generator_System>arg
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4057
 *             self.thisptr = new PPL_Generator_System(g.thisptr[0])
 *             return
 *         if isinstance(arg, Generator_System):             # <<<<<<<<<<<<<<
 *             gs = <Generator_System>arg
 *             self.thisptr = new PPL_Generator_System(gs.thisptr[0])
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":4058
 *             return
 *         if isinstance(arg, Generator_System):
 *             gs = <Generator_System>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Generator_System(gs.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_gs = ((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":4059
 *         if isinstance(arg, Generator_System):
 *             gs = <Generator_System>arg
 *             self.thisptr = new PPL_Generator_System(gs.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, (list,tuple)):
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Generator_System((__pyx_v_gs->thisptr[0]));

    /* "pyparma/ppl.pyx":4060
 *             gs = <Generator_System>arg
 *             self.thisptr = new PPL_Generator_System(gs.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, (list,tuple)):
 *             self.thisptr = new PPL_Generator_System()
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4061
 *             self.thisptr = new PPL_Generator_System(gs.thisptr[0])
 *             return
 *         if isinstance(arg, (list,tuple)):             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Generator_System()
 *             for generator in arg:
 */
  __pyx_t_2 = PyList_Check(__pyx_v_arg); 
  if (!__pyx_t_2) {
    __pyx_t_1 = PyTuple_Check(__pyx_v_arg); 
    __pyx_t_4 = __pyx_t_1;
  } else {
    __pyx_t_4 = __pyx_t_2;
  }
  __pyx_t_2 = (__pyx_t_4 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":4062
 *             return
 *         if isinstance(arg, (list,tuple)):
 *             self.thisptr = new PPL_Generator_System()             # <<<<<<<<<<<<<<
 *             for generator in arg:
 *                 self.insert(generator)
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Generator_System();

    /* "pyparma/ppl.pyx":4063
 *         if isinstance(arg, (list,tuple)):
 *             self.thisptr = new PPL_Generator_System()
 *             for generator in arg:             # <<<<<<<<<<<<<<
 *                 self.insert(generator)
 *             return
 */
    if (PyList_CheckExact(__pyx_v_arg) || PyTuple_CheckExact(__pyx_v_arg)) {
      __pyx_t_3 = __pyx_v_arg; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_arg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4063; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext;
    }
    for (;;) {
      if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_COMPILING_IN_CPYTHON
        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4063; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4063; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        #endif
      } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_COMPILING_IN_CPYTHON
        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4063; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4063; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        #endif
      } else {
        __pyx_t_7 = __pyx_t_6(__pyx_t_3);
        if (unlikely(!__pyx_t_7)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4063; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_7);
      }
      __Pyx_XDECREF_SET(__pyx_v_generator, __pyx_t_7);
      __pyx_t_7 = 0;

      /* "pyparma/ppl.pyx":4064
 *             self.thisptr = new PPL_Generator_System()
 *             for generator in arg:
 *                 self.insert(generator)             # <<<<<<<<<<<<<<
 *             return
 *         raise ValueError, 'Cannot initialize with '+str(arg)+'.'
 */
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_insert); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4064; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4064; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_v_generator);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_generator);
      __Pyx_GIVEREF(__pyx_v_generator);
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4064; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":4065
 *             for generator in arg:
 *                 self.insert(generator)
 *             return             # <<<<<<<<<<<<<<
 *         raise ValueError, 'Cannot initialize with '+str(arg)+'.'
 * 
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4066
 *                 self.insert(generator)
 *             return
 *         raise ValueError, 'Cannot initialize with '+str(arg)+'.'             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4066; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_arg);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_arg);
  __Pyx_GIVEREF(__pyx_v_arg);
  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4066; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Cannot_initialize_with, __pyx_t_9); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4066; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyNumber_Add(__pyx_t_3, __pyx_kp_s__5); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4066; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_9, 0, 0);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4066; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":4038
 * 
 * 
 *     def __cinit__(self, arg=None):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyparma.ppl.Generator_System.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_g);
  __Pyx_XDECREF((PyObject *)__pyx_v_gs);
  __Pyx_XDECREF(__pyx_v_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4069
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_16Generator_System_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_16Generator_System_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_16Generator_System_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_16Generator_System_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":4073
 *         The Cython destructor.
 *         """
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->thisptr;

  /* "pyparma/ppl.pyx":4069
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

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

/* "pyparma/ppl.pyx":4076
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_5space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_4space_dimension[] = "\n        Return the dimension of the vector space enclosing ``self``.\n\n        OUTPUT:\n\n        Integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Generator_System, point\n            sage: x = Variable(0)\n            sage: gs = Generator_System( point(3*x) )\n            sage: gs.space_dimension()\n            1\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_5space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("space_dimension (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_4space_dimension(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_4space_dimension(struct __pyx_obj_7pyparma_3ppl_Generator_System *__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("space_dimension", 0);

  /* "pyparma/ppl.pyx":4092
 *             1
 *         """
 *         return self.thisptr.space_dimension()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->thisptr->space_dimension()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4076
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator_System.space_dimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4095
 * 
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Removes all generators from the generator system and sets its
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_7clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_6clear[] = "\n        Removes all generators from the generator system and sets its\n        space dimension to 0.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Generator_System, point\n            sage: x = Variable(0)\n            sage: gs = Generator_System( point(3*x) ); gs\n            Generator_System {point(3/1)}\n            sage: gs.clear()\n            sage: gs\n            Generator_System {}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_7clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_6clear(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_6clear(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear", 0);

  /* "pyparma/ppl.pyx":4110
 *             Generator_System {}
 *         """
 *         self.thisptr.clear()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->clear();

  /* "pyparma/ppl.pyx":4095
 * 
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Removes all generators from the generator system and sets its
 */

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

/* "pyparma/ppl.pyx":4113
 * 
 * 
 *     def insert(self, Generator g):             # <<<<<<<<<<<<<<
 *         """
 *         Insert ``g`` into the generator system.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_9insert(PyObject *__pyx_v_self, PyObject *__pyx_v_g); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_8insert[] = "\n        Insert ``g`` into the generator system.\n\n        The number of space dimensions of ``self`` is increased, if needed.\n\n        INPUT:\n\n        - ``g`` -- a :class:`Generator`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Generator_System, point\n            sage: x = Variable(0)\n            sage: gs = Generator_System( point(3*x) )\n            sage: gs.insert( point(-3*x) )\n            sage: gs\n            Generator_System {point(3/1), point(-3/1)}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_9insert(PyObject *__pyx_v_self, PyObject *__pyx_v_g) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("insert (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_7pyparma_3ppl_Generator, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_8insert(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Generator *)__pyx_v_g));

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

static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_8insert(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator *__pyx_v_g) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("insert", 0);

  /* "pyparma/ppl.pyx":4132
 *             Generator_System {point(3/1), point(-3/1)}
 *         """
 *         self.thisptr.insert(g.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->insert((__pyx_v_g->thisptr[0]));

  /* "pyparma/ppl.pyx":4113
 * 
 * 
 *     def insert(self, Generator g):             # <<<<<<<<<<<<<<
 *         """
 *         Insert ``g`` into the generator system.
 */

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

/* "pyparma/ppl.pyx":4135
 * 
 * 
 *     def empty(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return ``True`` if and only if ``self`` has no generators.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_11empty(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_10empty[] = "\n        Return ``True`` if and only if ``self`` has no generators.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Generator_System, point\n            sage: x = Variable(0)\n            sage: gs = Generator_System()\n            sage: gs.empty()\n            True\n            sage: gs.insert( point(-3*x) )\n            sage: gs.empty()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_11empty(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("empty (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_10empty(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_10empty(struct __pyx_obj_7pyparma_3ppl_Generator_System *__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("empty", 0);

  /* "pyparma/ppl.pyx":4154
 *             False
 *         """
 *         return self.thisptr.empty()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->empty()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4135
 * 
 * 
 *     def empty(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return ``True`` if and only if ``self`` has no generators.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator_System.empty", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4157
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_13ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_12ascii_dump[] = "\n        Write an ASCII dump to stderr.\n\n        EXAMPLES::\n\n            sage: sage_cmd  = 'from sage.libs.ppl import Generator_System, point, Variable\\n'\n            sage: sage_cmd += 'x = Variable(0)\\n'\n            sage: sage_cmd += 'y = Variable(1)\\n'\n            sage: sage_cmd += 'gs = Generator_System( point(3*x+2*y+1) )\\n'\n            sage: sage_cmd += 'gs.ascii_dump()\\n'\n            sage: from sage.tests.cmdline import test_executable\n            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest\n            sage: print err  # long time\n            topology NECESSARILY_CLOSED\n            1 x 2 SPARSE (sorted)\n            index_first_pending 1\n            size 3 1 3 2 P (C)\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_13ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_12ascii_dump(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_12ascii_dump(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump", 0);

  /* "pyparma/ppl.pyx":4176
 *             size 3 1 3 2 P (C)
 *         """
 *         self.thisptr.ascii_dump()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->ascii_dump();

  /* "pyparma/ppl.pyx":4157
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

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

/* "pyparma/ppl.pyx":4179
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_15OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_14OK[] = "\n        Check if all the invariants are satisfied.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Generator_System, point\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: gs = Generator_System( point(3*x+2*y+1) )\n            sage: gs.OK()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_15OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("OK (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_14OK(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_14OK(struct __pyx_obj_7pyparma_3ppl_Generator_System *__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("OK", 0);

  /* "pyparma/ppl.pyx":4192
 *             True
 *         """
 *         return self.thisptr.OK()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->OK()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4179
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Generator_System.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4195
 * 
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of generators in the system.
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_7pyparma_3ppl_16Generator_System_17__len__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_16__len__[] = "\n        Return the number of generators in the system.\n\n            sage: from sage.libs.ppl import Variable, Generator_System, point\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: gs = Generator_System()\n            sage: gs.insert(point(3*x+2*y))\n            sage: gs.insert(point(x))\n            sage: gs.insert(point(y))\n            sage: len(gs)\n            3\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_16__len__;
#endif
static Py_ssize_t __pyx_pw_7pyparma_3ppl_16Generator_System_17__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_16__len__(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_7pyparma_3ppl_16Generator_System_16__len__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self) {
  CYTHON_UNUSED PyObject *__pyx_v_g = NULL;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__len__", 0);

  /* "pyparma/ppl.pyx":4209
 *             3
 *         """
 *         return sum([1 for g in self])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_INCREF(__pyx_int_0);
  __pyx_t_1 = __pyx_int_0;
  if (PyList_CheckExact(((PyObject *)__pyx_v_self)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
    __pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
  }
  for (;;) {
    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_XDECREF_SET(__pyx_v_g, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4195
 * 
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of generators in the system.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyparma.ppl.Generator_System.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_g);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4212
 * 
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Iterate through the generators of the system.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_19__iter__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_18__iter__[] = "\n        Iterate through the generators of the system.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator_System, Variable, point\n            sage: x = Variable(0)\n            sage: gs = Generator_System(point(3*x))\n            sage: iter = gs.__iter__()\n            sage: iter.next()\n            point(3/1)\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_18__iter__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_19__iter__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_18__iter__(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

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

  /* "pyparma/ppl.pyx":4225
 *             point(3/1)
 *         """
 *         return Generator_System_iterator(self)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System_iterator)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4212
 * 
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Iterate through the generators of the system.
 */

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

/* "pyparma/ppl.pyx":4228
 * 
 * 
 *     def __getitem__(self, int k):             # <<<<<<<<<<<<<<
 *         """
 *         Return the ``k``-th generator.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_21__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_k); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_20__getitem__[] = "\n        Return the ``k``-th generator.\n\n        The correct way to read the individual generators is to\n        iterate over the generator system. This method is for\n        convenience only.\n\n        INPUT:\n\n        - ``k`` -- integer. The index of the generator.\n\n        OUTPUT:\n\n        The ``k``-th constraint of the generator system.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator_System, Variable, point\n            sage: x = Variable(0)\n            sage: gs = Generator_System()\n            sage: gs.insert(point(3*x))\n            sage: gs.insert(point(-2*x))\n            sage: gs\n            Generator_System {point(3/1), point(-2/1)}\n            sage: gs[0]\n            point(3/1)\n            sage: gs[1]\n            point(-2/1)\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_20__getitem__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_21__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_k) {
  int __pyx_v_k;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_k); {
    __pyx_v_k = __Pyx_PyInt_As_int(__pyx_arg_k); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4228; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Generator_System.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_20__getitem__(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self), ((int)__pyx_v_k));

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

static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_20__getitem__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self, int __pyx_v_k) {
  PyObject *__pyx_v_iterator = NULL;
  CYTHON_UNUSED int __pyx_v_i;
  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;
  int __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pyparma/ppl.pyx":4258
 *             point(-2/1)
 *         """
 *         if k < 0:             # <<<<<<<<<<<<<<
 *             raise IndexError('index must be nonnegative')
 *         iterator = self.__iter__()
 */
  __pyx_t_1 = ((__pyx_v_k < 0) != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":4259
 *         """
 *         if k < 0:
 *             raise IndexError('index must be nonnegative')             # <<<<<<<<<<<<<<
 *         iterator = self.__iter__()
 *         try:
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4259; __pyx_clineno = __LINE__; goto __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_filename = __pyx_f[0]; __pyx_lineno = 4259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":4260
 *         if k < 0:
 *             raise IndexError('index must be nonnegative')
 *         iterator = self.__iter__()             # <<<<<<<<<<<<<<
 *         try:
 *             for i in range(k):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_iterator = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "pyparma/ppl.pyx":4261
 *             raise IndexError('index must be nonnegative')
 *         iterator = self.__iter__()
 *         try:             # <<<<<<<<<<<<<<
 *             for i in range(k):
 *                 iterator.next()
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_6);
    /*try:*/ {

      /* "pyparma/ppl.pyx":4262
 *         iterator = self.__iter__()
 *         try:
 *             for i in range(k):             # <<<<<<<<<<<<<<
 *                 iterator.next()
 *         except StopIteration:
 */
      __pyx_t_7 = __pyx_v_k;
      for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
        __pyx_v_i = __pyx_t_8;

        /* "pyparma/ppl.pyx":4263
 *         try:
 *             for i in range(k):
 *                 iterator.next()             # <<<<<<<<<<<<<<
 *         except StopIteration:
 *             raise IndexError('index is past-the-end')
 */
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_iterator, __pyx_n_s_next); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4263; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4263; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L11_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":4264
 *             for i in range(k):
 *                 iterator.next()
 *         except StopIteration:             # <<<<<<<<<<<<<<
 *             raise IndexError('index is past-the-end')
 *         return iterator.next()
 */
    __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_StopIteration);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyparma.ppl.Generator_System.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4264; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_9);

      /* "pyparma/ppl.pyx":4265
 *                 iterator.next()
 *         except StopIteration:
 *             raise IndexError('index is past-the-end')             # <<<<<<<<<<<<<<
 *         return iterator.next()
 * 
 */
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4265; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4265; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L5_exception_handled;
    }
    goto __pyx_L6_except_error;
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L5_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    __pyx_L11_try_end:;
  }

  /* "pyparma/ppl.pyx":4266
 *         except StopIteration:
 *             raise IndexError('index is past-the-end')
 *         return iterator.next()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_iterator, __pyx_n_s_next); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4228
 * 
 * 
 *     def __getitem__(self, int k):             # <<<<<<<<<<<<<<
 *         """
 *         Return the ``k``-th generator.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pyparma.ppl.Generator_System.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_iterator);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4269
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation of the generator system.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_23__repr__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_22__repr__[] = "\n        Return a string representation of the generator system.\n\n        OUTPUT:\n\n        A string.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator_System, Variable, point, ray\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: gs = Generator_System(point(3*x+2*y+1))\n            sage: gs.insert(ray(x))\n            sage: gs.__repr__()\n            'Generator_System {point(3/1, 2/1), ray(1, 0)}'\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_22__repr__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_23__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_22__repr__(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_22__repr__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self) {
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_v_g = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyparma/ppl.pyx":4287
 *             'Generator_System {point(3/1, 2/1), ray(1, 0)}'
 *         """
 *         s = 'Generator_System {'             # <<<<<<<<<<<<<<
 *         s += ', '.join([ g.__repr__() for g in self ])
 *         s += '}'
 */
  __Pyx_INCREF(__pyx_kp_s_Generator_System);
  __pyx_v_s = __pyx_kp_s_Generator_System;

  /* "pyparma/ppl.pyx":4288
 *         """
 *         s = 'Generator_System {'
 *         s += ', '.join([ g.__repr__() for g in self ])             # <<<<<<<<<<<<<<
 *         s += '}'
 *         return s
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyList_CheckExact(((PyObject *)__pyx_v_self)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
    __pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
  }
  for (;;) {
    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_XDECREF_SET(__pyx_v_g, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_g, __pyx_n_s_repr); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyString_Join(__pyx_kp_s__2, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":4289
 *         s = 'Generator_System {'
 *         s += ', '.join([ g.__repr__() for g in self ])
 *         s += '}'             # <<<<<<<<<<<<<<
 *         return s
 * 
 */
  __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_kp_s__17); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":4290
 *         s += ', '.join([ g.__repr__() for g in self ])
 *         s += '}'
 *         return s             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_s);
  __pyx_r = __pyx_v_s;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4269
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation of the generator system.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyparma.ppl.Generator_System.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_g);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4293
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_25__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_16Generator_System_24__reduce__[] = "\n        Pickle object.\n\n        TESTS::\n\n            sage: from sage.libs.ppl import Generator_System, Variable, point, ray\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: gs = Generator_System((point(3*x+2*y+1), ray(x)));  gs\n            Generator_System {point(3/1, 2/1), ray(1, 0)}\n            sage: loads(dumps(gs))\n            Generator_System {point(3/1, 2/1), ray(1, 0)}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_16Generator_System_25__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_16Generator_System_24__reduce__(((struct __pyx_obj_7pyparma_3ppl_Generator_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_16Generator_System_24__reduce__(struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce__", 0);

  /* "pyparma/ppl.pyx":4307
 *             Generator_System {point(3/1, 2/1), ray(1, 0)}
 *         """
 *         return (Generator_System, (tuple(self), ))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System)));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Generator_System)));
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4293
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object.
 */

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

/* "pyparma/ppl.pyx":4346
 * 
 * 
 *     def __cinit__(self, Generator_System gs):             # <<<<<<<<<<<<<<
 *         r"""
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_25Generator_System_iterator_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_25Generator_System_iterator_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_gs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gs,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_gs = ((struct __pyx_obj_7pyparma_3ppl_Generator_System *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Generator_System_iterator.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gs), __pyx_ptype_7pyparma_3ppl_Generator_System, 1, "gs", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_25Generator_System_iterator___cinit__(((struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *)__pyx_v_self), __pyx_v_gs);

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

static int __pyx_pf_7pyparma_3ppl_25Generator_System_iterator___cinit__(struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Generator_System *__pyx_v_gs) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":4355
 *             sage: iter = Generator_System_iterator(Generator_System())   # indirect doctest
 *         """
 *         self.gs = gs             # <<<<<<<<<<<<<<
 *         self.gsi_ptr = init_gs_iterator(gs.thisptr[0])
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_gs));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_gs));
  __Pyx_GOTREF(__pyx_v_self->gs);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->gs));
  __pyx_v_self->gs = __pyx_v_gs;

  /* "pyparma/ppl.pyx":4356
 *         """
 *         self.gs = gs
 *         self.gsi_ptr = init_gs_iterator(gs.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->gsi_ptr = init_gs_iterator((__pyx_v_gs->thisptr[0]));

  /* "pyparma/ppl.pyx":4346
 * 
 * 
 *     def __cinit__(self, Generator_System gs):             # <<<<<<<<<<<<<<
 *         r"""
 *         The Cython constructor.
 */

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

/* "pyparma/ppl.pyx":4359
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_25Generator_System_iterator_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_25Generator_System_iterator_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_25Generator_System_iterator_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_25Generator_System_iterator_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":4363
 *         The Cython destructor.
 *         """
 *         delete_gs_iterator(self.gsi_ptr)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete_gs_iterator(__pyx_v_self->gsi_ptr);

  /* "pyparma/ppl.pyx":4359
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

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

/* "pyparma/ppl.pyx":4366
 * 
 * 
 *     def __next__(Generator_System_iterator self):             # <<<<<<<<<<<<<<
 *         r"""
 *         The next iteration.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_25Generator_System_iterator_5__next__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_25Generator_System_iterator_4__next__[] = "\n        The next iteration.\n\n        OUTPUT:\n\n        A :class:`Generator`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Generator_System, Variable, point, Generator_System_iterator\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: gs = Generator_System( point(5*x-2*y) )\n            sage: Generator_System_iterator(gs).next()\n            point(5/1, -2/1)\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_25Generator_System_iterator_4__next__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_25Generator_System_iterator_5__next__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__next__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_25Generator_System_iterator_4__next__(((struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_25Generator_System_iterator_4__next__(struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *__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("__next__", 0);

  /* "pyparma/ppl.pyx":4383
 *             point(5/1, -2/1)
 *         """
 *         if is_end_gs_iterator((<Generator_System>self.gs).thisptr[0], self.gsi_ptr):             # <<<<<<<<<<<<<<
 *             raise StopIteration
 *         return _wrap_Generator(next_gs_iterator(self.gsi_ptr))
 */
  __pyx_t_1 = (is_end_gs_iterator((__pyx_v_self->gs->thisptr[0]), __pyx_v_self->gsi_ptr) != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":4384
 *         """
 *         if is_end_gs_iterator((<Generator_System>self.gs).thisptr[0], self.gsi_ptr):
 *             raise StopIteration             # <<<<<<<<<<<<<<
 *         return _wrap_Generator(next_gs_iterator(self.gsi_ptr))
 * 
 */
    __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":4385
 *         if is_end_gs_iterator((<Generator_System>self.gs).thisptr[0], self.gsi_ptr):
 *             raise StopIteration
 *         return _wrap_Generator(next_gs_iterator(self.gsi_ptr))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7pyparma_3ppl__wrap_Generator(next_gs_iterator(__pyx_v_self->gsi_ptr)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4366
 * 
 * 
 *     def __next__(Generator_System_iterator self):             # <<<<<<<<<<<<<<
 *         r"""
 *         The next iteration.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Generator_System_iterator.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4391
 * ### Constraint ######################################
 * ####################################################
 * cdef _wrap_Constraint(PPL_Constraint constraint):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Constraint`` into a Cython ``Constraint``.
 */

static PyObject *__pyx_f_7pyparma_3ppl__wrap_Constraint(Parma_Polyhedra_Library::Constraint __pyx_v_constraint) {
  struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_c = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_wrap_Constraint", 0);

  /* "pyparma/ppl.pyx":4395
 *     Wrap a C++ ``PPL_Constraint`` into a Cython ``Constraint``.
 *     """
 *     cdef Constraint c = Constraint(True)             # <<<<<<<<<<<<<<
 *     c.thisptr = new PPL_Constraint(constraint)
 *     return c
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint)), __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_c = ((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":4396
 *     """
 *     cdef Constraint c = Constraint(True)
 *     c.thisptr = new PPL_Constraint(constraint)             # <<<<<<<<<<<<<<
 *     return c
 * 
 */
  __pyx_v_c->thisptr = new Parma_Polyhedra_Library::Constraint(__pyx_v_constraint);

  /* "pyparma/ppl.pyx":4397
 *     cdef Constraint c = Constraint(True)
 *     c.thisptr = new PPL_Constraint(constraint)
 *     return c             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_c));
  __pyx_r = ((PyObject *)__pyx_v_c);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4391
 * ### Constraint ######################################
 * ####################################################
 * cdef _wrap_Constraint(PPL_Constraint constraint):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Constraint`` into a Cython ``Constraint``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl._wrap_Constraint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_c);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4401
 * 
 * ####################################################
 * cdef _make_Constraint_from_richcmp(lhs_, rhs_, op):             # <<<<<<<<<<<<<<
 *     cdef Linear_Expression lhs = Linear_Expression(lhs_)
 *     cdef Linear_Expression rhs = Linear_Expression(rhs_)
 */

static PyObject *__pyx_f_7pyparma_3ppl__make_Constraint_from_richcmp(PyObject *__pyx_v_lhs_, PyObject *__pyx_v_rhs_, PyObject *__pyx_v_op) {
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_lhs = 0;
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_rhs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_make_Constraint_from_richcmp", 0);

  /* "pyparma/ppl.pyx":4402
 * ####################################################
 * cdef _make_Constraint_from_richcmp(lhs_, rhs_, op):
 *     cdef Linear_Expression lhs = Linear_Expression(lhs_)             # <<<<<<<<<<<<<<
 *     cdef Linear_Expression rhs = Linear_Expression(rhs_)
 *     if op==0:      # <   0
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_lhs_);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_lhs_);
  __Pyx_GIVEREF(__pyx_v_lhs_);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_lhs = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":4403
 * cdef _make_Constraint_from_richcmp(lhs_, rhs_, op):
 *     cdef Linear_Expression lhs = Linear_Expression(lhs_)
 *     cdef Linear_Expression rhs = Linear_Expression(rhs_)             # <<<<<<<<<<<<<<
 *     if op==0:      # <   0
 *         return _wrap_Constraint(lhs.thisptr[0] <  rhs.thisptr[0])
 */
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_rhs_);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_rhs_);
  __Pyx_GIVEREF(__pyx_v_rhs_);
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_rhs = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":4404
 *     cdef Linear_Expression lhs = Linear_Expression(lhs_)
 *     cdef Linear_Expression rhs = Linear_Expression(rhs_)
 *     if op==0:      # <   0             # <<<<<<<<<<<<<<
 *         return _wrap_Constraint(lhs.thisptr[0] <  rhs.thisptr[0])
 *     elif op==1:    # <=  1
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":4405
 *     cdef Linear_Expression rhs = Linear_Expression(rhs_)
 *     if op==0:      # <   0
 *         return _wrap_Constraint(lhs.thisptr[0] <  rhs.thisptr[0])             # <<<<<<<<<<<<<<
 *     elif op==1:    # <=  1
 *         return _wrap_Constraint(lhs.thisptr[0] <= rhs.thisptr[0])
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Constraint(((__pyx_v_lhs->thisptr[0]) < (__pyx_v_rhs->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4406
 *     if op==0:      # <   0
 *         return _wrap_Constraint(lhs.thisptr[0] <  rhs.thisptr[0])
 *     elif op==1:    # <=  1             # <<<<<<<<<<<<<<
 *         return _wrap_Constraint(lhs.thisptr[0] <= rhs.thisptr[0])
 *     elif op==2:    # ==  2
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":4407
 *         return _wrap_Constraint(lhs.thisptr[0] <  rhs.thisptr[0])
 *     elif op==1:    # <=  1
 *         return _wrap_Constraint(lhs.thisptr[0] <= rhs.thisptr[0])             # <<<<<<<<<<<<<<
 *     elif op==2:    # ==  2
 *         return _wrap_Constraint(lhs.thisptr[0] == rhs.thisptr[0])
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Constraint(((__pyx_v_lhs->thisptr[0]) <= (__pyx_v_rhs->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4408
 *     elif op==1:    # <=  1
 *         return _wrap_Constraint(lhs.thisptr[0] <= rhs.thisptr[0])
 *     elif op==2:    # ==  2             # <<<<<<<<<<<<<<
 *         return _wrap_Constraint(lhs.thisptr[0] == rhs.thisptr[0])
 *     elif op==4:    # >   4
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":4409
 *         return _wrap_Constraint(lhs.thisptr[0] <= rhs.thisptr[0])
 *     elif op==2:    # ==  2
 *         return _wrap_Constraint(lhs.thisptr[0] == rhs.thisptr[0])             # <<<<<<<<<<<<<<
 *     elif op==4:    # >   4
 *         return _wrap_Constraint(lhs.thisptr[0] >  rhs.thisptr[0])
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Constraint(((__pyx_v_lhs->thisptr[0]) == (__pyx_v_rhs->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4410
 *     elif op==2:    # ==  2
 *         return _wrap_Constraint(lhs.thisptr[0] == rhs.thisptr[0])
 *     elif op==4:    # >   4             # <<<<<<<<<<<<<<
 *         return _wrap_Constraint(lhs.thisptr[0] >  rhs.thisptr[0])
 *     elif op==5:    # >=  5
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":4411
 *         return _wrap_Constraint(lhs.thisptr[0] == rhs.thisptr[0])
 *     elif op==4:    # >   4
 *         return _wrap_Constraint(lhs.thisptr[0] >  rhs.thisptr[0])             # <<<<<<<<<<<<<<
 *     elif op==5:    # >=  5
 *         return _wrap_Constraint(lhs.thisptr[0] >= rhs.thisptr[0])
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Constraint(((__pyx_v_lhs->thisptr[0]) > (__pyx_v_rhs->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4412
 *     elif op==4:    # >   4
 *         return _wrap_Constraint(lhs.thisptr[0] >  rhs.thisptr[0])
 *     elif op==5:    # >=  5             # <<<<<<<<<<<<<<
 *         return _wrap_Constraint(lhs.thisptr[0] >= rhs.thisptr[0])
 *     elif op==3:    # !=  3
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":4413
 *         return _wrap_Constraint(lhs.thisptr[0] >  rhs.thisptr[0])
 *     elif op==5:    # >=  5
 *         return _wrap_Constraint(lhs.thisptr[0] >= rhs.thisptr[0])             # <<<<<<<<<<<<<<
 *     elif op==3:    # !=  3
 *         raise NotImplementedError
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Constraint(((__pyx_v_lhs->thisptr[0]) >= (__pyx_v_rhs->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4414
 *     elif op==5:    # >=  5
 *         return _wrap_Constraint(lhs.thisptr[0] >= rhs.thisptr[0])
 *     elif op==3:    # !=  3             # <<<<<<<<<<<<<<
 *         raise NotImplementedError
 *     else:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_op, __pyx_int_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "pyparma/ppl.pyx":4415
 *         return _wrap_Constraint(lhs.thisptr[0] >= rhs.thisptr[0])
 *     elif op==3:    # !=  3
 *         raise NotImplementedError             # <<<<<<<<<<<<<<
 *     else:
 *         assert(False)
 */
    __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":4417
 *         raise NotImplementedError
 *     else:
 *         assert(False)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        PyErr_SetNone(PyExc_AssertionError);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
    }
    #endif
  }

  /* "pyparma/ppl.pyx":4401
 * 
 * ####################################################
 * cdef _make_Constraint_from_richcmp(lhs_, rhs_, op):             # <<<<<<<<<<<<<<
 *     cdef Linear_Expression lhs = Linear_Expression(lhs_)
 *     cdef Linear_Expression rhs = Linear_Expression(rhs_)
 */

  /* 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("pyparma.ppl._make_Constraint_from_richcmp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_lhs);
  __Pyx_XDECREF((PyObject *)__pyx_v_rhs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4472
 * 
 * 
 *     def __cinit__(self, do_not_construct_manually=False):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_10Constraint_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_10Constraint_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_do_not_construct_manually = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_do_not_construct_manually,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_do_not_construct_manually);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4472; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_do_not_construct_manually = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4472; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Constraint.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint___cinit__(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self), __pyx_v_do_not_construct_manually);

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

static int __pyx_pf_7pyparma_3ppl_10Constraint___cinit__(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self, PyObject *__pyx_v_do_not_construct_manually) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":4485
 *             x0>0
 *         """
 *         assert(do_not_construct_manually)             # <<<<<<<<<<<<<<
 *         self.thisptr = NULL
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_do_not_construct_manually); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (unlikely(!__pyx_t_1)) {
      PyErr_SetNone(PyExc_AssertionError);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":4486
 *         """
 *         assert(do_not_construct_manually)
 *         self.thisptr = NULL             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr = NULL;

  /* "pyparma/ppl.pyx":4472
 * 
 * 
 *     def __cinit__(self, do_not_construct_manually=False):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Constraint.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4489
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_10Constraint_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_10Constraint_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_10Constraint_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_10Constraint_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":4493
 *         The Cython destructor.
 *         """
 *         assert self.thisptr!=NULL, 'Do not construct Constraints manually!'             # <<<<<<<<<<<<<<
 *         del self.thisptr
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_self->thisptr != NULL) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Do_not_construct_Constraints_man);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":4494
 *         """
 *         assert self.thisptr!=NULL, 'Do not construct Constraints manually!'
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->thisptr;

  /* "pyparma/ppl.pyx":4489
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("pyparma.ppl.Constraint.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "pyparma/ppl.pyx":4497
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a string representation of the constraint.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_5__repr__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_4__repr__[] = "\n        Return a string representation of the constraint.\n\n        OUTPUT:\n\n        String.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Constraint, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: (2*x-y+5 >  x).__repr__()\n            'x0-x1+5>0'\n            sage: (2*x-y+5 == x).__repr__()\n            'x0-x1+5==0'\n            sage: (2*x-y+5 >= x).__repr__()\n            'x0-x1+5>=0'\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_10Constraint_4__repr__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_5__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_4__repr__(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_4__repr__(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self) {
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyparma/ppl.pyx":4517
 *             'x0-x1+5>=0'
 *         """
 *         e = sum([ self.coefficient(x)*x             # <<<<<<<<<<<<<<
 *                   for x in [Variable(i)
 *                             for i in range(0,self.space_dimension())] ])
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);

  /* "pyparma/ppl.pyx":4518
 *         """
 *         e = sum([ self.coefficient(x)*x
 *                   for x in [Variable(i)             # <<<<<<<<<<<<<<
 *                             for i in range(0,self.space_dimension())] ])
 *         e += self.inhomogeneous_term()
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);

  /* "pyparma/ppl.pyx":4519
 *         e = sum([ self.coefficient(x)*x
 *                   for x in [Variable(i)
 *                             for i in range(0,self.space_dimension())] ])             # <<<<<<<<<<<<<<
 *         e += self.inhomogeneous_term()
 *         s = e.__repr__()
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) {
    __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  for (;;) {
    if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) {
      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) {
      if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_4 = __pyx_t_6(__pyx_t_3);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "pyparma/ppl.pyx":4518
 *         """
 *         e = sum([ self.coefficient(x)*x
 *                   for x in [Variable(i)             # <<<<<<<<<<<<<<
 *                             for i in range(0,self.space_dimension())] ])
 *         e += self.inhomogeneous_term()
 */
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Variable)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_7))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
    #if CYTHON_COMPILING_IN_CPYTHON
    __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #else
    __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #endif
    __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":4517
 *             'x0-x1+5>=0'
 *         """
 *         e = sum([ self.coefficient(x)*x             # <<<<<<<<<<<<<<
 *                   for x in [Variable(i)
 *                             for i in range(0,self.space_dimension())] ])
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_coefficient); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

    /* "pyparma/ppl.pyx":4518
 *         """
 *         e = sum([ self.coefficient(x)*x
 *                   for x in [Variable(i)             # <<<<<<<<<<<<<<
 *                             for i in range(0,self.space_dimension())] ])
 *         e += self.inhomogeneous_term()
 */
    __pyx_t_7 = PyNumber_Multiply(__pyx_t_4, __pyx_v_x); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pyparma/ppl.pyx":4517
 *             'x0-x1+5>=0'
 *         """
 *         e = sum([ self.coefficient(x)*x             # <<<<<<<<<<<<<<
 *                   for x in [Variable(i)
 *                             for i in range(0,self.space_dimension())] ])
 */
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_e = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":4520
 *                   for x in [Variable(i)
 *                             for i in range(0,self.space_dimension())] ])
 *         e += self.inhomogeneous_term()             # <<<<<<<<<<<<<<
 *         s = e.__repr__()
 *         t = self.type()
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_inhomogeneous_term); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_e, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_e, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":4521
 *                             for i in range(0,self.space_dimension())] ])
 *         e += self.inhomogeneous_term()
 *         s = e.__repr__()             # <<<<<<<<<<<<<<
 *         t = self.type()
 *         if t=='equality':
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_e, __pyx_n_s_repr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_s = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "pyparma/ppl.pyx":4522
 *         e += self.inhomogeneous_term()
 *         s = e.__repr__()
 *         t = self.type()             # <<<<<<<<<<<<<<
 *         if t=='equality':
 *             s += '==0'
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_type); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_t = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":4523
 *         s = e.__repr__()
 *         t = self.type()
 *         if t=='equality':             # <<<<<<<<<<<<<<
 *             s += '==0'
 *         elif t=='nonstrict_inequality':
 */
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_t, __pyx_n_s_equality, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_8) {

    /* "pyparma/ppl.pyx":4524
 *         t = self.type()
 *         if t=='equality':
 *             s += '==0'             # <<<<<<<<<<<<<<
 *         elif t=='nonstrict_inequality':
 *             s += '>=0'
 */
    __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_kp_s_0_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L7;
  }

  /* "pyparma/ppl.pyx":4525
 *         if t=='equality':
 *             s += '==0'
 *         elif t=='nonstrict_inequality':             # <<<<<<<<<<<<<<
 *             s += '>=0'
 *         elif t=='strict_inequality':
 */
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_t, __pyx_n_s_nonstrict_inequality, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_8) {

    /* "pyparma/ppl.pyx":4526
 *             s += '==0'
 *         elif t=='nonstrict_inequality':
 *             s += '>=0'             # <<<<<<<<<<<<<<
 *         elif t=='strict_inequality':
 *             s += '>0'
 */
    __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_kp_s_0_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L7;
  }

  /* "pyparma/ppl.pyx":4527
 *         elif t=='nonstrict_inequality':
 *             s += '>=0'
 *         elif t=='strict_inequality':             # <<<<<<<<<<<<<<
 *             s += '>0'
 *         else:
 */
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_t, __pyx_n_s_strict_inequality, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_8) {

    /* "pyparma/ppl.pyx":4528
 *             s += '>=0'
 *         elif t=='strict_inequality':
 *             s += '>0'             # <<<<<<<<<<<<<<
 *         else:
 *             assert(False)
 */
    __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_kp_s_0_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L7;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":4530
 *             s += '>0'
 *         else:
 *             assert(False)             # <<<<<<<<<<<<<<
 *         return s
 * 
 */
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        PyErr_SetNone(PyExc_AssertionError);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
    }
    #endif
  }
  __pyx_L7:;

  /* "pyparma/ppl.pyx":4531
 *         else:
 *             assert(False)
 *         return s             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_s);
  __pyx_r = __pyx_v_s;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4497
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a string representation of the constraint.
 */

  /* 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_7);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4534
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_7space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_6space_dimension[] = "\n        Return the dimension of the vector space enclosing ``self``.\n\n        OUTPUT:\n\n        Integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: (x>=0).space_dimension()\n            1\n            sage: (y==1).space_dimension()\n            2\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_7space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("space_dimension (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_6space_dimension(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_6space_dimension(struct __pyx_obj_7pyparma_3ppl_Constraint *__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("space_dimension", 0);

  /* "pyparma/ppl.pyx":4552
 *             2
 *         """
 *         return self.thisptr.space_dimension()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->thisptr->space_dimension()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4534
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.space_dimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4555
 * 
 * 
 *     def type(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the constraint type of ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_9type(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_8type[] = "\n        Return the constraint type of ``self``.\n\n        OUTPUT:\n\n        String. One of ``'equality'``, ``'nonstrict_inequality'``, or\n        ``'strict_inequality'``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: (x==0).type()\n            'equality'\n            sage: (x>=0).type()\n            'nonstrict_inequality'\n            sage: (x>0).type()\n            'strict_inequality'\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_9type(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("type (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_8type(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_8type(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self) {
  Parma_Polyhedra_Library::Constraint::Type __pyx_v_t;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("type", 0);

  /* "pyparma/ppl.pyx":4575
 *             'strict_inequality'
 *         """
 *         t = self.thisptr.type()             # <<<<<<<<<<<<<<
 *         if t==EQUALITY:
 *             return 'equality'
 */
  __pyx_v_t = __pyx_v_self->thisptr->type();

  /* "pyparma/ppl.pyx":4580
 *         elif t==NONSTRICT_INEQUALITY:
 *             return 'nonstrict_inequality'
 *         elif t==STRICT_INEQUALITY:             # <<<<<<<<<<<<<<
 *             return 'strict_inequality'
 * 
 */
  switch (__pyx_v_t) {

    /* "pyparma/ppl.pyx":4576
 *         """
 *         t = self.thisptr.type()
 *         if t==EQUALITY:             # <<<<<<<<<<<<<<
 *             return 'equality'
 *         elif t==NONSTRICT_INEQUALITY:
 */
    case Parma_Polyhedra_Library::Constraint::EQUALITY:

    /* "pyparma/ppl.pyx":4577
 *         t = self.thisptr.type()
 *         if t==EQUALITY:
 *             return 'equality'             # <<<<<<<<<<<<<<
 *         elif t==NONSTRICT_INEQUALITY:
 *             return 'nonstrict_inequality'
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_equality);
    __pyx_r = __pyx_n_s_equality;
    goto __pyx_L0;
    break;

    /* "pyparma/ppl.pyx":4578
 *         if t==EQUALITY:
 *             return 'equality'
 *         elif t==NONSTRICT_INEQUALITY:             # <<<<<<<<<<<<<<
 *             return 'nonstrict_inequality'
 *         elif t==STRICT_INEQUALITY:
 */
    case Parma_Polyhedra_Library::Constraint::NONSTRICT_INEQUALITY:

    /* "pyparma/ppl.pyx":4579
 *             return 'equality'
 *         elif t==NONSTRICT_INEQUALITY:
 *             return 'nonstrict_inequality'             # <<<<<<<<<<<<<<
 *         elif t==STRICT_INEQUALITY:
 *             return 'strict_inequality'
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_nonstrict_inequality);
    __pyx_r = __pyx_n_s_nonstrict_inequality;
    goto __pyx_L0;
    break;

    /* "pyparma/ppl.pyx":4580
 *         elif t==NONSTRICT_INEQUALITY:
 *             return 'nonstrict_inequality'
 *         elif t==STRICT_INEQUALITY:             # <<<<<<<<<<<<<<
 *             return 'strict_inequality'
 * 
 */
    case Parma_Polyhedra_Library::Constraint::STRICT_INEQUALITY:

    /* "pyparma/ppl.pyx":4581
 *             return 'nonstrict_inequality'
 *         elif t==STRICT_INEQUALITY:
 *             return 'strict_inequality'             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_strict_inequality);
    __pyx_r = __pyx_n_s_strict_inequality;
    goto __pyx_L0;
    break;
    default: break;
  }

  /* "pyparma/ppl.pyx":4555
 * 
 * 
 *     def type(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the constraint type of ``self``.
 */

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

/* "pyparma/ppl.pyx":4584
 * 
 * 
 *     def is_equality(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is an equality.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_11is_equality(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_10is_equality[] = "\n        Test whether ``self`` is an equality.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` is an\n        equality constraint.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: (x==0).is_equality()\n            True\n            sage: (x>=0).is_equality()\n            False\n            sage: (x>0).is_equality()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_11is_equality(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_equality (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_10is_equality(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_10is_equality(struct __pyx_obj_7pyparma_3ppl_Constraint *__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("is_equality", 0);

  /* "pyparma/ppl.pyx":4604
 *             False
 *         """
 *         return self.thisptr.is_equality()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_equality()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4584
 * 
 * 
 *     def is_equality(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is an equality.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.is_equality", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4607
 * 
 * 
 *     def is_inequality(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is an inequality.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_13is_inequality(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_12is_inequality[] = "\n        Test whether ``self`` is an inequality.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` is an\n        inequality constraint, either strict or non-strict.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: (x==0).is_inequality()\n            False\n            sage: (x>=0).is_inequality()\n            True\n            sage: (x>0).is_inequality()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_13is_inequality(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_inequality (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_12is_inequality(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_12is_inequality(struct __pyx_obj_7pyparma_3ppl_Constraint *__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("is_inequality", 0);

  /* "pyparma/ppl.pyx":4627
 *             True
 *         """
 *         return self.thisptr.is_inequality()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_inequality()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4607
 * 
 * 
 *     def is_inequality(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is an inequality.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.is_inequality", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4630
 * 
 * 
 *     def is_nonstrict_inequality(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a non-strict inequality.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_15is_nonstrict_inequality(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_14is_nonstrict_inequality[] = "\n        Test whether ``self`` is a non-strict inequality.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` is an\n        non-strict inequality constraint.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: (x==0).is_nonstrict_inequality()\n            False\n            sage: (x>=0).is_nonstrict_inequality()\n            True\n            sage: (x>0).is_nonstrict_inequality()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_15is_nonstrict_inequality(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nonstrict_inequality (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_14is_nonstrict_inequality(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_14is_nonstrict_inequality(struct __pyx_obj_7pyparma_3ppl_Constraint *__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("is_nonstrict_inequality", 0);

  /* "pyparma/ppl.pyx":4650
 *             False
 *         """
 *         return self.thisptr.is_nonstrict_inequality()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_nonstrict_inequality()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4630
 * 
 * 
 *     def is_nonstrict_inequality(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a non-strict inequality.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.is_nonstrict_inequality", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4653
 * 
 * 
 *     def is_strict_inequality(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a strict inequality.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_17is_strict_inequality(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_16is_strict_inequality[] = "\n        Test whether ``self`` is a strict inequality.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` is an\n        strict inequality constraint.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: (x==0).is_strict_inequality()\n            False\n            sage: (x>=0).is_strict_inequality()\n            False\n            sage: (x>0).is_strict_inequality()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_17is_strict_inequality(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_strict_inequality (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_16is_strict_inequality(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_16is_strict_inequality(struct __pyx_obj_7pyparma_3ppl_Constraint *__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("is_strict_inequality", 0);

  /* "pyparma/ppl.pyx":4673
 *             True
 *         """
 *         return self.thisptr.is_strict_inequality()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_strict_inequality()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4653
 * 
 * 
 *     def is_strict_inequality(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a strict inequality.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.is_strict_inequality", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4676
 * 
 * 
 *     def coefficient(self, Variable v):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficient of the variable ``v``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_19coefficient(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_18coefficient[] = "\n        Return the coefficient of the variable ``v``.\n\n        INPUT:\n\n        - ``v`` -- a :class:`Variable`.\n\n        OUTPUT:\n\n        An integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: ineq = (3*x+1 > 0)\n            sage: ineq.coefficient(x)\n            3\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_19coefficient(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coefficient (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_7pyparma_3ppl_Variable, 1, "v", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_18coefficient(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Variable *)__pyx_v_v));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_18coefficient(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Variable *__pyx_v_v) {
  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("coefficient", 0);

  /* "pyparma/ppl.pyx":4696
 *             3
 *         """
 *         return mpz_get_pyintlong(self.thisptr.coefficient(v.thisptr[0]).get_mpz_t())             # <<<<<<<<<<<<<<
 * 
 *     def coefficients(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_6pylong_mpz_get_pyintlong(__pyx_v_self->thisptr->coefficient((__pyx_v_v->thisptr[0])).get_mpz_t()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4696; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4676
 * 
 * 
 *     def coefficient(self, Variable v):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficient of the variable ``v``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.coefficient", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4698
 *         return mpz_get_pyintlong(self.thisptr.coefficient(v.thisptr[0]).get_mpz_t())
 * 
 *     def coefficients(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficients of the constraint.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_21coefficients(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_20coefficients[] = "\n        Return the coefficients of the constraint.\n\n        See also :meth:`coefficient`.\n\n        OUTPUT:\n\n        A tuple of integers of length :meth:`space_dimension`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0);  y = Variable(1)\n            sage: ineq = ( 3*x+5*y+1 ==  2);  ineq\n            3*x0+5*x1-1==0\n            sage: ineq.coefficients()\n            (3, 5)\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_21coefficients(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("coefficients (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_20coefficients(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_20coefficients(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self) {
  int __pyx_v_d;
  int __pyx_v_i;
  PyObject *__pyx_v_coeffs = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("coefficients", 0);

  /* "pyparma/ppl.pyx":4717
 *             (3, 5)
 *         """
 *         cdef int d = self.space_dimension()             # <<<<<<<<<<<<<<
 *         cdef int i
 *         coeffs = []
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_space_dimension); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_d = __pyx_t_3;

  /* "pyparma/ppl.pyx":4719
 *         cdef int d = self.space_dimension()
 *         cdef int i
 *         coeffs = []             # <<<<<<<<<<<<<<
 *         for i in range(0,d):
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_coeffs = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":4720
 *         cdef int i
 *         coeffs = []
 *         for i in range(0,d):             # <<<<<<<<<<<<<<
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))
 *         return tuple(coeffs)
 */
  __pyx_t_3 = __pyx_v_d;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;

    /* "pyparma/ppl.pyx":4721
 *         coeffs = []
 *         for i in range(0,d):
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))             # <<<<<<<<<<<<<<
 *         return tuple(coeffs)
 * 
 */
    __pyx_t_2 = __pyx_f_7pyparma_6pylong_mpz_get_pyintlong(__pyx_v_self->thisptr->coefficient(Parma_Polyhedra_Library::Variable(__pyx_v_i)).get_mpz_t()); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_coeffs, __pyx_t_2); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }

  /* "pyparma/ppl.pyx":4722
 *         for i in range(0,d):
 *             coeffs.append(mpz_get_pyintlong(self.thisptr.coefficient(PPL_Variable(i)).get_mpz_t()))
 *         return tuple(coeffs)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyList_AsTuple(__pyx_v_coeffs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4698
 *         return mpz_get_pyintlong(self.thisptr.coefficient(v.thisptr[0]).get_mpz_t())
 * 
 *     def coefficients(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the coefficients of the constraint.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.coefficients", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_coeffs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4725
 * 
 * 
 *     def inhomogeneous_term(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the inhomogeneous term of the constraint.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_23inhomogeneous_term(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_22inhomogeneous_term[] = "\n        Return the inhomogeneous term of the constraint.\n\n        OUTPUT:\n\n        Integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: y = Variable(1)\n            sage: ineq = ( 10+y > 9 )\n            sage: ineq\n            x1+1>0\n            sage: ineq.inhomogeneous_term()\n            1\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_23inhomogeneous_term(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inhomogeneous_term (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_22inhomogeneous_term(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_22inhomogeneous_term(struct __pyx_obj_7pyparma_3ppl_Constraint *__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("inhomogeneous_term", 0);

  /* "pyparma/ppl.pyx":4743
 *             1
 *         """
 *         return mpz_get_pyintlong(self.thisptr.inhomogeneous_term().get_mpz_t())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_6pylong_mpz_get_pyintlong(__pyx_v_self->thisptr->inhomogeneous_term().get_mpz_t()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4743; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4725
 * 
 * 
 *     def inhomogeneous_term(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the inhomogeneous term of the constraint.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.inhomogeneous_term", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4746
 * 
 * 
 *     def is_tautological(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a tautological constraint.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_25is_tautological(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_24is_tautological[] = "\n        Test whether ``self`` is a tautological constraint.\n\n        A tautology can have either one of the following forms:\n\n        * an equality: `\\sum 0 x_i + 0 = 0`,\n\n        * a non-strict inequality: `\\sum 0 x_i + b \\geq 0` with `b\\geq 0`, or\n\n        * a strict inequality: `\\sum 0 x_i + b > 0` with `b> 0`.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` is a\n        tautological constraint.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: (x==0).is_tautological()\n            False\n            sage: (0*x>=0).is_tautological()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_25is_tautological(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_tautological (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_24is_tautological(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_24is_tautological(struct __pyx_obj_7pyparma_3ppl_Constraint *__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("is_tautological", 0);

  /* "pyparma/ppl.pyx":4772
 *             True
 *         """
 *         return self.thisptr.is_tautological()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_tautological()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4746
 * 
 * 
 *     def is_tautological(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is a tautological constraint.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.is_tautological", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4775
 * 
 * 
 *     def is_inconsistent(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is an inconsistent constraint, that is, always false.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_27is_inconsistent(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_26is_inconsistent[] = "\n        Test whether ``self`` is an inconsistent constraint, that is, always false.\n\n        An inconsistent constraint can have either one of the\n        following forms:\n\n        * an equality: `\\sum 0 x_i + b = 0` with `b\\not=0`,\n\n        * a non-strict inequality: `\\sum 0 x_i + b \\geq 0` with `b< 0`, or\n\n        * a strict inequality: `\\sum 0 x_i + b > 0` with `b\\leq 0`.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` is an\n        inconsistent constraint.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable\n            sage: x = Variable(0)\n            sage: (x==1).is_inconsistent()\n            False\n            sage: (0*x>=1).is_inconsistent()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_27is_inconsistent(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_inconsistent (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_26is_inconsistent(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_26is_inconsistent(struct __pyx_obj_7pyparma_3ppl_Constraint *__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("is_inconsistent", 0);

  /* "pyparma/ppl.pyx":4802
 *             True
 *         """
 *         return self.thisptr.is_inconsistent()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_inconsistent()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4775
 * 
 * 
 *     def is_inconsistent(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` is an inconsistent constraint, that is, always false.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.is_inconsistent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4805
 * 
 * 
 *     def is_equivalent_to(self, Constraint c):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` and ``c`` are equivalent.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_29is_equivalent_to(PyObject *__pyx_v_self, PyObject *__pyx_v_c); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_28is_equivalent_to[] = "\n        Test whether ``self`` and ``c`` are equivalent.\n\n        INPUT:\n\n        - ``c`` -- a :class:`Constraint`.\n\n        OUTPUT:\n\n        Boolean. Returns ``True`` if and only if ``self`` and ``c``\n        are equivalent constraints.\n\n        Note that constraints having different space dimensions are\n        not equivalent. However, constraints having different types\n        may nonetheless be equivalent, if they both are tautologies or\n        inconsistent.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Linear_Expression\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: ( x>0 ).is_equivalent_to( Linear_Expression(0)<x )\n            True\n            sage: ( x>0 ).is_equivalent_to( 0*y<x )\n            False\n            sage: ( 0*x>1 ).is_equivalent_to( 0*x==-2 )\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_29is_equivalent_to(PyObject *__pyx_v_self, PyObject *__pyx_v_c) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_equivalent_to (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_7pyparma_3ppl_Constraint, 1, "c", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_28is_equivalent_to(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_c));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_28is_equivalent_to(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_c) {
  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("is_equivalent_to", 0);

  /* "pyparma/ppl.pyx":4835
 *             True
 *         """
 *         return self.thisptr.is_equivalent_to(c.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->is_equivalent_to((__pyx_v_c->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4805
 * 
 * 
 *     def is_equivalent_to(self, Constraint c):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` and ``c`` are equivalent.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.is_equivalent_to", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4838
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_31ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_30ascii_dump[] = "\n        Write an ASCII dump to stderr.\n\n        EXAMPLES::\n\n            sage: sage_cmd  = 'from sage.libs.ppl import Linear_Expression, Variable\\n'\n            sage: sage_cmd += 'x = Variable(0)\\n'\n            sage: sage_cmd += 'y = Variable(1)\\n'\n            sage: sage_cmd += 'e = (3*x+2*y+1 > 0)\\n'\n            sage: sage_cmd += 'e.ascii_dump()\\n'\n            sage: from sage.tests.cmdline import test_executable\n            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest\n            sage: print err  # long time\n            size 4 1 3 2 -1 > (NNC)\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_31ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_30ascii_dump(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_30ascii_dump(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump", 0);

  /* "pyparma/ppl.pyx":4854
 *             size 4 1 3 2 -1 > (NNC)
 *         """
 *         self.thisptr.ascii_dump()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->ascii_dump();

  /* "pyparma/ppl.pyx":4838
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

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

/* "pyparma/ppl.pyx":4857
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_33OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_32OK[] = "\n        Check if all the invariants are satisfied.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: ineq = (3*x+2*y+1>=0)\n            sage: ineq.OK()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_33OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("OK (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_32OK(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_32OK(struct __pyx_obj_7pyparma_3ppl_Constraint *__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("OK", 0);

  /* "pyparma/ppl.pyx":4870
 *             True
 *         """
 *         return self.thisptr.OK()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->OK()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4857
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4873
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_35__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10Constraint_34__reduce__[] = "\n        Pickle object.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Linear_Expression, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: loads(dumps(3*x+2*y+1>=5))\n            3*x0+2*x1-4>=0\n            sage: loads(dumps(3*x+2*y+1>5))\n            3*x0+2*x1-4>0\n            sage: loads(dumps(3*x+2*y+1==5))\n            3*x0+2*x1-4==0\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_10Constraint_35__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10Constraint_34__reduce__(((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10Constraint_34__reduce__(struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_self) {
  struct __pyx_obj_7pyparma_3ppl_Linear_Expression *__pyx_v_le = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce__", 0);

  /* "pyparma/ppl.pyx":4889
 *             3*x0+2*x1-4==0
 *         """
 *         le = Linear_Expression(self.coefficients(), self.inhomogeneous_term())             # <<<<<<<<<<<<<<
 *         if self.is_nonstrict_inequality():
 *             return (inequality, (le, ))
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_coefficients); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_inhomogeneous_term); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Linear_Expression)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_le = ((struct __pyx_obj_7pyparma_3ppl_Linear_Expression *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "pyparma/ppl.pyx":4890
 *         """
 *         le = Linear_Expression(self.coefficients(), self.inhomogeneous_term())
 *         if self.is_nonstrict_inequality():             # <<<<<<<<<<<<<<
 *             return (inequality, (le, ))
 *         elif self.is_strict_inequality():
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_nonstrict_inequality); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {

    /* "pyparma/ppl.pyx":4891
 *         le = Linear_Expression(self.coefficients(), self.inhomogeneous_term())
 *         if self.is_nonstrict_inequality():
 *             return (inequality, (le, ))             # <<<<<<<<<<<<<<
 *         elif self.is_strict_inequality():
 *             return (strict_inequality, (le, ))
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_inequality); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_v_le));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_le));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_le));
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4892
 *         if self.is_nonstrict_inequality():
 *             return (inequality, (le, ))
 *         elif self.is_strict_inequality():             # <<<<<<<<<<<<<<
 *             return (strict_inequality, (le, ))
 *         elif self.is_equality():
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_strict_inequality); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {

    /* "pyparma/ppl.pyx":4893
 *             return (inequality, (le, ))
 *         elif self.is_strict_inequality():
 *             return (strict_inequality, (le, ))             # <<<<<<<<<<<<<<
 *         elif self.is_equality():
 *             return (equation, (le, ))
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_strict_inequality); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)__pyx_v_le));
    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_le));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_le));
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_3 = 0;
    __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":4894
 *         elif self.is_strict_inequality():
 *             return (strict_inequality, (le, ))
 *         elif self.is_equality():             # <<<<<<<<<<<<<<
 *             return (equation, (le, ))
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_equality); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {

    /* "pyparma/ppl.pyx":4895
 *             return (strict_inequality, (le, ))
 *         elif self.is_equality():
 *             return (equation, (le, ))             # <<<<<<<<<<<<<<
 *         else:
 *             assert False
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_equation); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)__pyx_v_le));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_le));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_le));
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":4897
 *             return (equation, (le, ))
 *         else:
 *             assert False             # <<<<<<<<<<<<<<
 * 
 * 
 */
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        PyErr_SetNone(PyExc_AssertionError);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
    }
    #endif
  }

  /* "pyparma/ppl.pyx":4873
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object.
 */

  /* 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("pyparma.ppl.Constraint.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_le);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":4902
 * 
 * ####################################################
 * def inequality(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct an inequality.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_9inequality(PyObject *__pyx_self, PyObject *__pyx_v_expression); /*proto*/
static char __pyx_doc_7pyparma_3ppl_8inequality[] = "\n    Constuct an inequality.\n\n    INPUT:\n\n    - ``expression`` -- a :class:`Linear_Expression`.\n\n    OUTPUT:\n\n    The inequality ``expression`` >= 0.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Variable, inequality\n        sage: y = Variable(1)\n        sage: 2*y+1 >= 0\n        2*x1+1>=0\n        sage: inequality(2*y+1)\n        2*x1+1>=0\n    ";
static PyMethodDef __pyx_mdef_7pyparma_3ppl_9inequality = {__Pyx_NAMESTR("inequality"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9inequality, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_8inequality)};
static PyObject *__pyx_pw_7pyparma_3ppl_9inequality(PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inequality (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_8inequality(__pyx_self, ((PyObject *)__pyx_v_expression));

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

static PyObject *__pyx_pf_7pyparma_3ppl_8inequality(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  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("inequality", 0);

  /* "pyparma/ppl.pyx":4923
 *         2*x1+1>=0
 *     """
 *     return expression >= 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_expression, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4902
 * 
 * ####################################################
 * def inequality(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct an inequality.
 */

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

/* "pyparma/ppl.pyx":4927
 * 
 * ####################################################
 * def strict_inequality(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a strict inequality.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_11strict_inequality(PyObject *__pyx_self, PyObject *__pyx_v_expression); /*proto*/
static char __pyx_doc_7pyparma_3ppl_10strict_inequality[] = "\n    Constuct a strict inequality.\n\n    INPUT:\n\n    - ``expression`` -- a :class:`Linear_Expression`.\n\n    OUTPUT:\n\n    The inequality ``expression`` > 0.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Variable, strict_inequality\n        sage: y = Variable(1)\n        sage: 2*y+1 > 0\n        2*x1+1>0\n        sage: strict_inequality(2*y+1)\n        2*x1+1>0\n    ";
static PyMethodDef __pyx_mdef_7pyparma_3ppl_11strict_inequality = {__Pyx_NAMESTR("strict_inequality"), (PyCFunction)__pyx_pw_7pyparma_3ppl_11strict_inequality, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10strict_inequality)};
static PyObject *__pyx_pw_7pyparma_3ppl_11strict_inequality(PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("strict_inequality (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_10strict_inequality(__pyx_self, ((PyObject *)__pyx_v_expression));

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

static PyObject *__pyx_pf_7pyparma_3ppl_10strict_inequality(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  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("strict_inequality", 0);

  /* "pyparma/ppl.pyx":4948
 *         2*x1+1>0
 *     """
 *     return expression > 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_expression, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4948; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4927
 * 
 * ####################################################
 * def strict_inequality(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a strict inequality.
 */

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

/* "pyparma/ppl.pyx":4952
 * 
 * ####################################################
 * def equation(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct an equation.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_13equation(PyObject *__pyx_self, PyObject *__pyx_v_expression); /*proto*/
static char __pyx_doc_7pyparma_3ppl_12equation[] = "\n    Constuct an equation.\n\n    INPUT:\n\n    - ``expression`` -- a :class:`Linear_Expression`.\n\n    OUTPUT:\n\n    The equation ``expression`` == 0.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Variable, equation\n        sage: y = Variable(1)\n        sage: 2*y+1 == 0\n        2*x1+1==0\n        sage: equation(2*y+1)\n        2*x1+1==0\n    ";
static PyMethodDef __pyx_mdef_7pyparma_3ppl_13equation = {__Pyx_NAMESTR("equation"), (PyCFunction)__pyx_pw_7pyparma_3ppl_13equation, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_12equation)};
static PyObject *__pyx_pw_7pyparma_3ppl_13equation(PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("equation (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_12equation(__pyx_self, ((PyObject *)__pyx_v_expression));

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

static PyObject *__pyx_pf_7pyparma_3ppl_12equation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_expression) {
  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("equation", 0);

  /* "pyparma/ppl.pyx":4973
 *         2*x1+1==0
 *     """
 *     return expression == 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_expression, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4952
 * 
 * ####################################################
 * def equation(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct an equation.
 */

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

/* "pyparma/ppl.pyx":4980
 * ### Constraint_System  ##############################
 * ####################################################
 * cdef _wrap_Constraint_System(PPL_Constraint_System constraint_system):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Constraint_System`` into a Cython ``Constraint_System``.
 */

static PyObject *__pyx_f_7pyparma_3ppl__wrap_Constraint_System(Parma_Polyhedra_Library::Constraint_System __pyx_v_constraint_system) {
  struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_cs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_wrap_Constraint_System", 0);

  /* "pyparma/ppl.pyx":4984
 *     Wrap a C++ ``PPL_Constraint_System`` into a Cython ``Constraint_System``.
 *     """
 *     cdef Constraint_System cs = Constraint_System()             # <<<<<<<<<<<<<<
 *     del cs.thisptr
 *     cs.thisptr = new PPL_Constraint_System(constraint_system)
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_cs = ((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":4985
 *     """
 *     cdef Constraint_System cs = Constraint_System()
 *     del cs.thisptr             # <<<<<<<<<<<<<<
 *     cs.thisptr = new PPL_Constraint_System(constraint_system)
 *     return cs
 */
  delete __pyx_v_cs->thisptr;

  /* "pyparma/ppl.pyx":4986
 *     cdef Constraint_System cs = Constraint_System()
 *     del cs.thisptr
 *     cs.thisptr = new PPL_Constraint_System(constraint_system)             # <<<<<<<<<<<<<<
 *     return cs
 * 
 */
  __pyx_v_cs->thisptr = new Parma_Polyhedra_Library::Constraint_System(__pyx_v_constraint_system);

  /* "pyparma/ppl.pyx":4987
 *     del cs.thisptr
 *     cs.thisptr = new PPL_Constraint_System(constraint_system)
 *     return cs             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_cs));
  __pyx_r = ((PyObject *)__pyx_v_cs);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":4980
 * ### Constraint_System  ##############################
 * ####################################################
 * cdef _wrap_Constraint_System(PPL_Constraint_System constraint_system):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Constraint_System`` into a Cython ``Constraint_System``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl._wrap_Constraint_System", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_cs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5016
 * 
 * 
 *     def __cinit__(self, arg=None):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_17Constraint_System_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_17Constraint_System_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arg);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5016; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5016; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System___cinit__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self), __pyx_v_arg);

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

static int __pyx_pf_7pyparma_3ppl_17Constraint_System___cinit__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self, PyObject *__pyx_v_arg) {
  struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_g = NULL;
  struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_gs = NULL;
  PyObject *__pyx_v_constraint = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":5028
 *             Constraint_System {}
 *         """
 *         if arg is None:             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Constraint_System()
 *             return
 */
  __pyx_t_1 = (__pyx_v_arg == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":5029
 *         """
 *         if arg is None:
 *             self.thisptr = new PPL_Constraint_System()             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, Constraint):
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Constraint_System();

    /* "pyparma/ppl.pyx":5030
 *         if arg is None:
 *             self.thisptr = new PPL_Constraint_System()
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Constraint):
 *             g = <Constraint>arg
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":5031
 *             self.thisptr = new PPL_Constraint_System()
 *             return
 *         if isinstance(arg, Constraint):             # <<<<<<<<<<<<<<
 *             g = <Constraint>arg
 *             self.thisptr = new PPL_Constraint_System(g.thisptr[0])
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint)); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":5032
 *             return
 *         if isinstance(arg, Constraint):
 *             g = <Constraint>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Constraint_System(g.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_g = ((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":5033
 *         if isinstance(arg, Constraint):
 *             g = <Constraint>arg
 *             self.thisptr = new PPL_Constraint_System(g.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, Constraint_System):
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Constraint_System((__pyx_v_g->thisptr[0]));

    /* "pyparma/ppl.pyx":5034
 *             g = <Constraint>arg
 *             self.thisptr = new PPL_Constraint_System(g.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, Constraint_System):
 *             gs = <Constraint_System>arg
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":5035
 *             self.thisptr = new PPL_Constraint_System(g.thisptr[0])
 *             return
 *         if isinstance(arg, Constraint_System):             # <<<<<<<<<<<<<<
 *             gs = <Constraint_System>arg
 *             self.thisptr = new PPL_Constraint_System(gs.thisptr[0])
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, ((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System)); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":5036
 *             return
 *         if isinstance(arg, Constraint_System):
 *             gs = <Constraint_System>arg             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Constraint_System(gs.thisptr[0])
 *             return
 */
    __pyx_t_3 = __pyx_v_arg;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_gs = ((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":5037
 *         if isinstance(arg, Constraint_System):
 *             gs = <Constraint_System>arg
 *             self.thisptr = new PPL_Constraint_System(gs.thisptr[0])             # <<<<<<<<<<<<<<
 *             return
 *         if isinstance(arg, (list,tuple)):
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Constraint_System((__pyx_v_gs->thisptr[0]));

    /* "pyparma/ppl.pyx":5038
 *             gs = <Constraint_System>arg
 *             self.thisptr = new PPL_Constraint_System(gs.thisptr[0])
 *             return             # <<<<<<<<<<<<<<
 *         if isinstance(arg, (list,tuple)):
 *             self.thisptr = new PPL_Constraint_System()
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":5039
 *             self.thisptr = new PPL_Constraint_System(gs.thisptr[0])
 *             return
 *         if isinstance(arg, (list,tuple)):             # <<<<<<<<<<<<<<
 *             self.thisptr = new PPL_Constraint_System()
 *             for constraint in arg:
 */
  __pyx_t_2 = PyList_Check(__pyx_v_arg); 
  if (!__pyx_t_2) {
    __pyx_t_1 = PyTuple_Check(__pyx_v_arg); 
    __pyx_t_4 = __pyx_t_1;
  } else {
    __pyx_t_4 = __pyx_t_2;
  }
  __pyx_t_2 = (__pyx_t_4 != 0);
  if (__pyx_t_2) {

    /* "pyparma/ppl.pyx":5040
 *             return
 *         if isinstance(arg, (list,tuple)):
 *             self.thisptr = new PPL_Constraint_System()             # <<<<<<<<<<<<<<
 *             for constraint in arg:
 *                 self.insert(constraint)
 */
    __pyx_v_self->thisptr = new Parma_Polyhedra_Library::Constraint_System();

    /* "pyparma/ppl.pyx":5041
 *         if isinstance(arg, (list,tuple)):
 *             self.thisptr = new PPL_Constraint_System()
 *             for constraint in arg:             # <<<<<<<<<<<<<<
 *                 self.insert(constraint)
 *             return
 */
    if (PyList_CheckExact(__pyx_v_arg) || PyTuple_CheckExact(__pyx_v_arg)) {
      __pyx_t_3 = __pyx_v_arg; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_arg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext;
    }
    for (;;) {
      if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_COMPILING_IN_CPYTHON
        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        #endif
      } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_COMPILING_IN_CPYTHON
        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        #endif
      } else {
        __pyx_t_7 = __pyx_t_6(__pyx_t_3);
        if (unlikely(!__pyx_t_7)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_7);
      }
      __Pyx_XDECREF_SET(__pyx_v_constraint, __pyx_t_7);
      __pyx_t_7 = 0;

      /* "pyparma/ppl.pyx":5042
 *             self.thisptr = new PPL_Constraint_System()
 *             for constraint in arg:
 *                 self.insert(constraint)             # <<<<<<<<<<<<<<
 *             return
 *         raise ValueError, 'Cannot initialize with '+str(arg)+'.'
 */
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_insert); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_v_constraint);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_constraint);
      __Pyx_GIVEREF(__pyx_v_constraint);
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "pyparma/ppl.pyx":5043
 *             for constraint in arg:
 *                 self.insert(constraint)
 *             return             # <<<<<<<<<<<<<<
 *         raise ValueError, 'Cannot initialize with '+str(arg)+'.'
 * 
 */
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":5044
 *                 self.insert(constraint)
 *             return
 *         raise ValueError, 'Cannot initialize with '+str(arg)+'.'             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_arg);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_arg);
  __Pyx_GIVEREF(__pyx_v_arg);
  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Cannot_initialize_with, __pyx_t_9); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyNumber_Add(__pyx_t_3, __pyx_kp_s__5); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_9, 0, 0);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":5016
 * 
 * 
 *     def __cinit__(self, arg=None):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_g);
  __Pyx_XDECREF((PyObject *)__pyx_v_gs);
  __Pyx_XDECREF(__pyx_v_constraint);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5047
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_17Constraint_System_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_17Constraint_System_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_17Constraint_System_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_17Constraint_System_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":5051
 *         The Cython destructor.
 *         """
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->thisptr;

  /* "pyparma/ppl.pyx":5047
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

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

/* "pyparma/ppl.pyx":5054
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_5space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_4space_dimension[] = "\n        Return the dimension of the vector space enclosing ``self``.\n\n        OUTPUT:\n\n        Integer.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System\n            sage: x = Variable(0)\n            sage: cs = Constraint_System( x>0 )\n            sage: cs.space_dimension()\n            1\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_5space_dimension(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("space_dimension (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_4space_dimension(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_4space_dimension(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__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("space_dimension", 0);

  /* "pyparma/ppl.pyx":5070
 *             1
 *         """
 *         return self.thisptr.space_dimension()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->thisptr->space_dimension()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5070; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5054
 * 
 * 
 *     def space_dimension(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the dimension of the vector space enclosing ``self``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.space_dimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5073
 * 
 * 
 *     def has_equalities(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Tests whether ``self`` contains one or more equality constraints.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_7has_equalities(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_6has_equalities[] = "\n        Tests whether ``self`` contains one or more equality constraints.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System\n            sage: x = Variable(0)\n            sage: cs = Constraint_System()\n            sage: cs.insert( x>0 )\n            sage: cs.insert( x<0 )\n            sage: cs.has_equalities()\n            False\n            sage: cs.insert( x==0 )\n            sage: cs.has_equalities()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_7has_equalities(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("has_equalities (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_6has_equalities(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_6has_equalities(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__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("has_equalities", 0);

  /* "pyparma/ppl.pyx":5094
 *             True
 *         """
 *         return self.thisptr.has_equalities()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->has_equalities()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5094; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5073
 * 
 * 
 *     def has_equalities(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Tests whether ``self`` contains one or more equality constraints.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.has_equalities", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5097
 * 
 * 
 *     def has_strict_inequalities(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Tests whether ``self`` contains one or more strict inequality constraints.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_9has_strict_inequalities(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_8has_strict_inequalities[] = "\n        Tests whether ``self`` contains one or more strict inequality constraints.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System\n            sage: x = Variable(0)\n            sage: cs = Constraint_System()\n            sage: cs.insert( x>=0 )\n            sage: cs.insert( x==-1 )\n            sage: cs.has_strict_inequalities()\n            False\n            sage: cs.insert( x>0 )\n            sage: cs.has_strict_inequalities()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_9has_strict_inequalities(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("has_strict_inequalities (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_8has_strict_inequalities(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_8has_strict_inequalities(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__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("has_strict_inequalities", 0);

  /* "pyparma/ppl.pyx":5118
 *             True
 *         """
 *         return self.thisptr.has_strict_inequalities()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->has_strict_inequalities()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5097
 * 
 * 
 *     def has_strict_inequalities(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Tests whether ``self`` contains one or more strict inequality constraints.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.has_strict_inequalities", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5121
 * 
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Removes all constraints from the constraint system and sets its
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_11clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_10clear[] = "\n        Removes all constraints from the constraint system and sets its\n        space dimension to 0.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System\n            sage: x = Variable(0)\n            sage: cs = Constraint_System(x>0)\n            sage: cs\n            Constraint_System {x0>0}\n            sage: cs.clear()\n            sage: cs\n            Constraint_System {}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_11clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_10clear(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_10clear(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear", 0);

  /* "pyparma/ppl.pyx":5137
 *             Constraint_System {}
 *         """
 *         self.thisptr.clear()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->clear();

  /* "pyparma/ppl.pyx":5121
 * 
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Removes all constraints from the constraint system and sets its
 */

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

/* "pyparma/ppl.pyx":5140
 * 
 * 
 *     def insert(self, Constraint c):             # <<<<<<<<<<<<<<
 *         """
 *         Insert ``c`` into the constraint system.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_13insert(PyObject *__pyx_v_self, PyObject *__pyx_v_c); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_12insert[] = "\n        Insert ``c`` into the constraint system.\n\n        INPUT:\n\n        - ``c`` -- a :class:`Constraint`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System\n            sage: x = Variable(0)\n            sage: cs = Constraint_System()\n            sage: cs.insert( x>0 )\n            sage: cs\n            Constraint_System {x0>0}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_13insert(PyObject *__pyx_v_self, PyObject *__pyx_v_c) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("insert (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_7pyparma_3ppl_Constraint, 1, "c", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_12insert(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Constraint *)__pyx_v_c));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_12insert(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint *__pyx_v_c) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("insert", 0);

  /* "pyparma/ppl.pyx":5157
 *             Constraint_System {x0>0}
 *         """
 *         self.thisptr.insert(c.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->insert((__pyx_v_c->thisptr[0]));

  /* "pyparma/ppl.pyx":5140
 * 
 * 
 *     def insert(self, Constraint c):             # <<<<<<<<<<<<<<
 *         """
 *         Insert ``c`` into the constraint system.
 */

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

/* "pyparma/ppl.pyx":5160
 * 
 * 
 *     def empty(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return ``True`` if and only if ``self`` has no constraints.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_15empty(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_14empty[] = "\n        Return ``True`` if and only if ``self`` has no constraints.\n\n        OUTPUT:\n\n        Boolean.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System, point\n            sage: x = Variable(0)\n            sage: cs = Constraint_System()\n            sage: cs.empty()\n            True\n            sage: cs.insert( x>0 )\n            sage: cs.empty()\n            False\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_15empty(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("empty (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_14empty(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_14empty(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__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("empty", 0);

  /* "pyparma/ppl.pyx":5179
 *             False
 *         """
 *         return self.thisptr.empty()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->empty()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5160
 * 
 * 
 *     def empty(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return ``True`` if and only if ``self`` has no constraints.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.empty", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5182
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_17ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_16ascii_dump[] = "\n        Write an ASCII dump to stderr.\n\n        EXAMPLES::\n\n            sage: sage_cmd  = 'from sage.libs.ppl import Constraint_System, Variable\\n'\n            sage: sage_cmd += 'x = Variable(0)\\n'\n            sage: sage_cmd += 'y = Variable(1)\\n'\n            sage: sage_cmd += 'cs = Constraint_System( 3*x > 2*y+1 )\\n'\n            sage: sage_cmd += 'cs.ascii_dump()\\n'\n            sage: from sage.tests.cmdline import test_executable\n            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest\n            sage: print err  # long time\n            topology NOT_NECESSARILY_CLOSED\n            1 x 2 SPARSE (sorted)\n            index_first_pending 1\n            size 4 -1 3 -2 -1 > (NNC)\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_17ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_16ascii_dump(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_16ascii_dump(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump", 0);

  /* "pyparma/ppl.pyx":5201
 *             size 4 -1 3 -2 -1 > (NNC)
 *         """
 *         self.thisptr.ascii_dump()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->ascii_dump();

  /* "pyparma/ppl.pyx":5182
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

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

/* "pyparma/ppl.pyx":5204
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_19OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_18OK[] = "\n        Check if all the invariants are satisfied.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: cs = Constraint_System( 3*x+2*y+1 <= 10 )\n            sage: cs.OK()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_19OK(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("OK (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_18OK(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_18OK(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__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("OK", 0);

  /* "pyparma/ppl.pyx":5217
 *             True
 *         """
 *         return self.thisptr.OK()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->OK()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5204
 * 
 * 
 *     def OK(self):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5220
 * 
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of constraints in the system.
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_7pyparma_3ppl_17Constraint_System_21__len__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_20__len__[] = "\n        Return the number of constraints in the system.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System\n            sage: x = Variable(0)\n            sage: cs = Constraint_System( x>0 )\n            sage: cs.insert( x<1 )\n            sage: len(cs)\n            2\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_20__len__;
#endif
static Py_ssize_t __pyx_pw_7pyparma_3ppl_17Constraint_System_21__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_20__len__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_7pyparma_3ppl_17Constraint_System_20__len__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self) {
  CYTHON_UNUSED PyObject *__pyx_v_c = NULL;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__len__", 0);

  /* "pyparma/ppl.pyx":5233
 *             2
 *         """
 *         return sum([1 for c in self])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_INCREF(__pyx_int_0);
  __pyx_t_1 = __pyx_int_0;
  if (PyList_CheckExact(((PyObject *)__pyx_v_self)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
    __pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
  }
  for (;;) {
    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5220
 * 
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of constraints in the system.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5236
 * 
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Iterate through the constraints of the system.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_23__iter__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_22__iter__[] = "\n        Iterate through the constraints of the system.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System\n            sage: x = Variable(0)\n            sage: cs = Constraint_System( x>0 )\n            sage: iter = cs.__iter__()\n            sage: iter.next()\n            x0>0\n            sage: list(cs)   # uses __iter__() internally\n            [x0>0]\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_22__iter__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_23__iter__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_22__iter__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

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

  /* "pyparma/ppl.pyx":5251
 *             [x0>0]
 *         """
 *         return Constraint_System_iterator(self)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System_iterator)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5236
 * 
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Iterate through the constraints of the system.
 */

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

/* "pyparma/ppl.pyx":5254
 * 
 * 
 *     def __getitem__(self, int k):             # <<<<<<<<<<<<<<
 *         """
 *         Return the k-th constraint.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_25__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_k); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_24__getitem__[] = "\n        Return the k-th constraint.\n\n        The correct way to read the individual constraints is to\n        iterate over the constraint system. This method is for\n        convenience only.\n\n        INPUT:\n\n        - ``k`` -- integer. The index of the constraint.\n\n        OUTPUT:\n\n        The `k`-th constraint of the constraint system.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Variable, Constraint_System\n            sage: x = Variable(0)\n            sage: cs = Constraint_System( x>0 )\n            sage: cs.insert( x<1 )\n            sage: cs\n            Constraint_System {x0>0, -x0+1>0}\n            sage: cs[0]\n            x0>0\n            sage: cs[1]\n            -x0+1>0\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_24__getitem__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_25__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_k) {
  int __pyx_v_k;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_k); {
    __pyx_v_k = __Pyx_PyInt_As_int(__pyx_arg_k); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5254; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_24__getitem__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self), ((int)__pyx_v_k));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_24__getitem__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self, int __pyx_v_k) {
  PyObject *__pyx_v_iterator = NULL;
  CYTHON_UNUSED int __pyx_v_i;
  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;
  int __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pyparma/ppl.pyx":5283
 *             -x0+1>0
 *         """
 *         if k < 0:             # <<<<<<<<<<<<<<
 *             raise IndexError('index must be nonnegative')
 *         iterator = self.__iter__()
 */
  __pyx_t_1 = ((__pyx_v_k < 0) != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":5284
 *         """
 *         if k < 0:
 *             raise IndexError('index must be nonnegative')             # <<<<<<<<<<<<<<
 *         iterator = self.__iter__()
 *         try:
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5284; __pyx_clineno = __LINE__; goto __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_filename = __pyx_f[0]; __pyx_lineno = 5284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":5285
 *         if k < 0:
 *             raise IndexError('index must be nonnegative')
 *         iterator = self.__iter__()             # <<<<<<<<<<<<<<
 *         try:
 *             for i in range(k):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_iterator = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "pyparma/ppl.pyx":5286
 *             raise IndexError('index must be nonnegative')
 *         iterator = self.__iter__()
 *         try:             # <<<<<<<<<<<<<<
 *             for i in range(k):
 *                 iterator.next()
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_6);
    /*try:*/ {

      /* "pyparma/ppl.pyx":5287
 *         iterator = self.__iter__()
 *         try:
 *             for i in range(k):             # <<<<<<<<<<<<<<
 *                 iterator.next()
 *         except StopIteration:
 */
      __pyx_t_7 = __pyx_v_k;
      for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
        __pyx_v_i = __pyx_t_8;

        /* "pyparma/ppl.pyx":5288
 *         try:
 *             for i in range(k):
 *                 iterator.next()             # <<<<<<<<<<<<<<
 *         except StopIteration:
 *             raise IndexError('index is past-the-end')
 */
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_iterator, __pyx_n_s_next); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5288; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5288; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L11_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyparma/ppl.pyx":5289
 *             for i in range(k):
 *                 iterator.next()
 *         except StopIteration:             # <<<<<<<<<<<<<<
 *             raise IndexError('index is past-the-end')
 *         return iterator.next()
 */
    __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_StopIteration);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyparma.ppl.Constraint_System.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5289; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_9);

      /* "pyparma/ppl.pyx":5290
 *                 iterator.next()
 *         except StopIteration:
 *             raise IndexError('index is past-the-end')             # <<<<<<<<<<<<<<
 *         return iterator.next()
 * 
 */
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5290; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5290; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L5_exception_handled;
    }
    goto __pyx_L6_except_error;
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L5_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    __pyx_L11_try_end:;
  }

  /* "pyparma/ppl.pyx":5291
 *         except StopIteration:
 *             raise IndexError('index is past-the-end')
 *         return iterator.next()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_iterator, __pyx_n_s_next); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5254
 * 
 * 
 *     def __getitem__(self, int k):             # <<<<<<<<<<<<<<
 *         """
 *         Return the k-th constraint.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_iterator);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5294
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation of the constraint system.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_27__repr__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_26__repr__[] = "\n        Return a string representation of the constraint system.\n\n        OUTPUT:\n\n        A string.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Constraint_System, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: cs = Constraint_System([3*x+2*y+1 < 3, 0*x>x+1])\n            sage: cs.__repr__()\n            'Constraint_System {-3*x0-2*x1+2>0, -x0-1>0}'\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_26__repr__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_27__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_26__repr__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_26__repr__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self) {
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyparma/ppl.pyx":5311
 *             'Constraint_System {-3*x0-2*x1+2>0, -x0-1>0}'
 *         """
 *         s = 'Constraint_System {'             # <<<<<<<<<<<<<<
 *         s += ', '.join([ c.__repr__() for c in self ])
 *         s += '}'
 */
  __Pyx_INCREF(__pyx_kp_s_Constraint_System);
  __pyx_v_s = __pyx_kp_s_Constraint_System;

  /* "pyparma/ppl.pyx":5312
 *         """
 *         s = 'Constraint_System {'
 *         s += ', '.join([ c.__repr__() for c in self ])             # <<<<<<<<<<<<<<
 *         s += '}'
 *         return s
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyList_CheckExact(((PyObject *)__pyx_v_self)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
    __pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
  }
  for (;;) {
    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_c, __pyx_n_s_repr); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyString_Join(__pyx_kp_s__2, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":5313
 *         s = 'Constraint_System {'
 *         s += ', '.join([ c.__repr__() for c in self ])
 *         s += '}'             # <<<<<<<<<<<<<<
 *         return s
 * 
 */
  __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_kp_s__17); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":5314
 *         s += ', '.join([ c.__repr__() for c in self ])
 *         s += '}'
 *         return s             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_s);
  __pyx_r = __pyx_v_s;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5294
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation of the constraint system.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5317
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_29__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Constraint_System_28__reduce__[] = "\n        Pickle object.\n\n        TESTS::\n\n            sage: from sage.libs.ppl import Constraint_System, Variable\n            sage: x = Variable(0)\n            sage: y = Variable(1)\n            sage: cs = Constraint_System([3*x+2*y+1 < 3, 0*x>x+1]);  cs\n            Constraint_System {-3*x0-2*x1+2>0, -x0-1>0}\n            sage: loads(dumps(cs))\n            Constraint_System {-3*x0-2*x1+2>0, -x0-1>0}\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Constraint_System_29__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Constraint_System_28__reduce__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Constraint_System_28__reduce__(struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce__", 0);

  /* "pyparma/ppl.pyx":5331
 *             Constraint_System {-3*x0-2*x1+2>0, -x0-1>0}
 *         """
 *         return (Constraint_System, (tuple(self), ))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System)));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Constraint_System)));
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5317
 * 
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         """
 *         Pickle object.
 */

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

/* "pyparma/ppl.pyx":5368
 * 
 * 
 *     def __cinit__(self, Constraint_System cs):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_cs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cs,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5368; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_cs = ((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5368; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System_iterator.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cs), __pyx_ptype_7pyparma_3ppl_Constraint_System, 1, "cs", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_26Constraint_System_iterator___cinit__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *)__pyx_v_self), __pyx_v_cs);

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

static int __pyx_pf_7pyparma_3ppl_26Constraint_System_iterator___cinit__(struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Constraint_System *__pyx_v_cs) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":5379
 *             sage: iter = Constraint_System_iterator( Constraint_System() )   # indirect doctest
 *         """
 *         self.cs = cs             # <<<<<<<<<<<<<<
 *         self.csi_ptr = init_cs_iterator(cs.thisptr[0])
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_cs));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_cs));
  __Pyx_GOTREF(__pyx_v_self->cs);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->cs));
  __pyx_v_self->cs = __pyx_v_cs;

  /* "pyparma/ppl.pyx":5380
 *         """
 *         self.cs = cs
 *         self.csi_ptr = init_cs_iterator(cs.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->csi_ptr = init_cs_iterator((__pyx_v_cs->thisptr[0]));

  /* "pyparma/ppl.pyx":5368
 * 
 * 
 *     def __cinit__(self, Constraint_System cs):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

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

/* "pyparma/ppl.pyx":5383
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_26Constraint_System_iterator_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_26Constraint_System_iterator_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":5387
 *         The Cython destructor.
 *         """
 *         delete_cs_iterator(self.csi_ptr)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete_cs_iterator(__pyx_v_self->csi_ptr);

  /* "pyparma/ppl.pyx":5383
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

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

/* "pyparma/ppl.pyx":5390
 * 
 * 
 *     def __next__(Constraint_System_iterator self):             # <<<<<<<<<<<<<<
 *         r"""
 *         The next iteration.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_5__next__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_26Constraint_System_iterator_4__next__[] = "\n        The next iteration.\n\n        OUTPUT:\n\n        A :class:`Generator`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Constraint_System, Variable, Constraint_System_iterator\n            sage: x = Variable(0)\n            sage: cs = Constraint_System( 5*x > 0 )\n            sage: Constraint_System_iterator(cs).next()\n            x0>0\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_26Constraint_System_iterator_4__next__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_5__next__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__next__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_26Constraint_System_iterator_4__next__(((struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_26Constraint_System_iterator_4__next__(struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *__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("__next__", 0);

  /* "pyparma/ppl.pyx":5406
 *             x0>0
 *         """
 *         if is_end_cs_iterator((<Constraint_System>self.cs).thisptr[0], self.csi_ptr):             # <<<<<<<<<<<<<<
 *             raise StopIteration
 *         return _wrap_Constraint(next_cs_iterator(self.csi_ptr))
 */
  __pyx_t_1 = (is_end_cs_iterator((__pyx_v_self->cs->thisptr[0]), __pyx_v_self->csi_ptr) != 0);
  if (__pyx_t_1) {

    /* "pyparma/ppl.pyx":5407
 *         """
 *         if is_end_cs_iterator((<Constraint_System>self.cs).thisptr[0], self.csi_ptr):
 *             raise StopIteration             # <<<<<<<<<<<<<<
 *         return _wrap_Constraint(next_cs_iterator(self.csi_ptr))
 * 
 */
    __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }

  /* "pyparma/ppl.pyx":5408
 *         if is_end_cs_iterator((<Constraint_System>self.cs).thisptr[0], self.csi_ptr):
 *             raise StopIteration
 *         return _wrap_Constraint(next_cs_iterator(self.csi_ptr))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7pyparma_3ppl__wrap_Constraint(next_cs_iterator(__pyx_v_self->csi_ptr)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5390
 * 
 * 
 *     def __next__(Constraint_System_iterator self):             # <<<<<<<<<<<<<<
 *         r"""
 *         The next iteration.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyparma.ppl.Constraint_System_iterator.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5415
 * ### Poly_Gen_Relation ##############################
 * ####################################################
 * cdef _wrap_Poly_Gen_Relation(PPL_Poly_Gen_Relation relation):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Poly_Gen_Relation`` into a Cython ``Poly_Gen_Relation``.
 */

static PyObject *__pyx_f_7pyparma_3ppl__wrap_Poly_Gen_Relation(Parma_Polyhedra_Library::Poly_Gen_Relation __pyx_v_relation) {
  struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_rel = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_wrap_Poly_Gen_Relation", 0);

  /* "pyparma/ppl.pyx":5419
 *     Wrap a C++ ``PPL_Poly_Gen_Relation`` into a Cython ``Poly_Gen_Relation``.
 *     """
 *     cdef Poly_Gen_Relation rel = Poly_Gen_Relation(True)             # <<<<<<<<<<<<<<
 *     rel.thisptr = new PPL_Poly_Gen_Relation(relation)
 *     return rel
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation)), __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rel = ((struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":5420
 *     """
 *     cdef Poly_Gen_Relation rel = Poly_Gen_Relation(True)
 *     rel.thisptr = new PPL_Poly_Gen_Relation(relation)             # <<<<<<<<<<<<<<
 *     return rel
 * 
 */
  __pyx_v_rel->thisptr = new Parma_Polyhedra_Library::Poly_Gen_Relation(__pyx_v_relation);

  /* "pyparma/ppl.pyx":5421
 *     cdef Poly_Gen_Relation rel = Poly_Gen_Relation(True)
 *     rel.thisptr = new PPL_Poly_Gen_Relation(relation)
 *     return rel             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_rel));
  __pyx_r = ((PyObject *)__pyx_v_rel);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5415
 * ### Poly_Gen_Relation ##############################
 * ####################################################
 * cdef _wrap_Poly_Gen_Relation(PPL_Poly_Gen_Relation relation):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Poly_Gen_Relation`` into a Cython ``Poly_Gen_Relation``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl._wrap_Poly_Gen_Relation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rel);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5453
 * 
 * 
 *     def __cinit__(self, do_not_construct_manually=False):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_do_not_construct_manually = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_do_not_construct_manually,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_do_not_construct_manually);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_do_not_construct_manually = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Poly_Gen_Relation.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation___cinit__(((struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *)__pyx_v_self), __pyx_v_do_not_construct_manually);

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

static int __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation___cinit__(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self, PyObject *__pyx_v_do_not_construct_manually) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":5465
 *             nothing
 *         """
 *         assert(do_not_construct_manually)             # <<<<<<<<<<<<<<
 *         self.thisptr = NULL
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_do_not_construct_manually); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (unlikely(!__pyx_t_1)) {
      PyErr_SetNone(PyExc_AssertionError);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":5466
 *         """
 *         assert(do_not_construct_manually)
 *         self.thisptr = NULL             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr = NULL;

  /* "pyparma/ppl.pyx":5453
 * 
 * 
 *     def __cinit__(self, do_not_construct_manually=False):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Poly_Gen_Relation.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5469
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":5473
 *         The Cython destructor.
 *         """
 *         assert self.thisptr!=NULL, 'Do not construct Poly_Gen_Relation objects manually!'             # <<<<<<<<<<<<<<
 *         del self.thisptr
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_self->thisptr != NULL) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Do_not_construct_Poly_Gen_Relati);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":5474
 *         """
 *         assert self.thisptr!=NULL, 'Do not construct Poly_Gen_Relation objects manually!'
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->thisptr;

  /* "pyparma/ppl.pyx":5469
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("pyparma.ppl.Poly_Gen_Relation.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "pyparma/ppl.pyx":5477
 * 
 * 
 *     def implies(self, Poly_Gen_Relation y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` implies ``y``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_5implies(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_4implies[] = "\n        Test whether ``self`` implies ``y``.\n\n        INPUT:\n\n        - ``y`` -- a :class:`Poly_Gen_Relation`.\n\n        OUTPUT:\n\n        Boolean. ``True`` if and only if ``self`` implies ``y``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Gen_Relation\n            sage: nothing = Poly_Gen_Relation.nothing()\n            sage: nothing.implies( nothing )\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_5implies(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("implies (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_4implies(((struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *)__pyx_v_y));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_4implies(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_y) {
  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("implies", 0);

  /* "pyparma/ppl.pyx":5496
 *             True
 *         """
 *         return self.thisptr.implies(y.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->implies((__pyx_v_y->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5477
 * 
 * 
 *     def implies(self, Poly_Gen_Relation y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` implies ``y``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Gen_Relation.implies", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5500
 * 
 *     @classmethod
 *     def nothing(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion that says nothing.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_7nothing(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_6nothing[] = "\n        Return the assertion that says nothing.\n\n        OUTPUT:\n\n        A :class:`Poly_Gen_Relation`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Gen_Relation\n            sage: Poly_Gen_Relation.nothing()\n            nothing\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_7nothing(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nothing (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_6nothing(((PyObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_6nothing(CYTHON_UNUSED PyObject *__pyx_v_cls) {
  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("nothing", 0);

  /* "pyparma/ppl.pyx":5514
 *             nothing
 *         """
 *         return _wrap_Poly_Gen_Relation(PPL_Poly_Gen_Relation_nothing())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Poly_Gen_Relation(Parma_Polyhedra_Library::Poly_Gen_Relation::nothing()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5500
 * 
 *     @classmethod
 *     def nothing(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion that says nothing.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Gen_Relation.nothing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5518
 * 
 *     @classmethod
 *     def subsumes(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "Adding the generator would not change
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_9subsumes(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_8subsumes[] = "\n        Return the assertion \"Adding the generator would not change\n        the polyhedron\".\n\n        OUTPUT:\n\n        A :class:`Poly_Gen_Relation`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Gen_Relation\n            sage: Poly_Gen_Relation.subsumes()\n            subsumes\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_9subsumes(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("subsumes (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_8subsumes(((PyObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_8subsumes(CYTHON_UNUSED PyObject *__pyx_v_cls) {
  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("subsumes", 0);

  /* "pyparma/ppl.pyx":5533
 *             subsumes
 *         """
 *         return _wrap_Poly_Gen_Relation(PPL_Poly_Gen_Relation_subsumes())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Poly_Gen_Relation(Parma_Polyhedra_Library::Poly_Gen_Relation::subsumes()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5518
 * 
 *     @classmethod
 *     def subsumes(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "Adding the generator would not change
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Gen_Relation.subsumes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5536
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_11ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_10ascii_dump[] = "\n        Write an ASCII dump to stderr.\n\n        EXAMPLES::\n\n            sage: sage_cmd  = 'from sage.libs.ppl import Poly_Gen_Relation\\n'\n            sage: sage_cmd += 'Poly_Gen_Relation.nothing().ascii_dump()\\n'\n            sage: from sage.tests.cmdline import test_executable\n            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest\n            sage: print err  # long time\n            NOTHING\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_11ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_10ascii_dump(((struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_10ascii_dump(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump", 0);

  /* "pyparma/ppl.pyx":5549
 *             NOTHING
 *         """
 *         self.thisptr.ascii_dump()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->ascii_dump();

  /* "pyparma/ppl.pyx":5536
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

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

/* "pyparma/ppl.pyx":5552
 * 
 * 
 *     def OK(self, check_non_empty=False):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_13OK(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_12OK[] = "\n        Check if all the invariants are satisfied.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Gen_Relation\n            sage: Poly_Gen_Relation.nothing().OK()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_13OK(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_check_non_empty = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("OK (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_check_non_empty,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_check_non_empty);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "OK") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5552; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_check_non_empty = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("OK", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5552; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Poly_Gen_Relation.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_12OK(((struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *)__pyx_v_self), __pyx_v_check_non_empty);

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_12OK(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_check_non_empty) {
  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("OK", 0);

  /* "pyparma/ppl.pyx":5562
 *             True
 *         """
 *         return self.thisptr.OK()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->OK()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5552
 * 
 * 
 *     def OK(self, check_non_empty=False):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Gen_Relation.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5565
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_15__repr__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_14__repr__[] = "\n        Return a string representation.\n\n        OUTPUT:\n\n        String.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Gen_Relation\n            sage: Poly_Gen_Relation.nothing().__repr__()\n            'nothing'\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Poly_Gen_Relation_14__repr__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_15__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Gen_Relation_14__repr__(((struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation *)__pyx_v_self));

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

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

  /* "pyparma/ppl.pyx":5579
 *             'nothing'
 *         """
 *         if self.implies(Poly_Gen_Relation.subsumes()):             # <<<<<<<<<<<<<<
 *             return 'subsumes'
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_implies); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation)), __pyx_n_s_subsumes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {

    /* "pyparma/ppl.pyx":5580
 *         """
 *         if self.implies(Poly_Gen_Relation.subsumes()):
 *             return 'subsumes'             # <<<<<<<<<<<<<<
 *         else:
 *             return 'nothing'
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_subsumes);
    __pyx_r = __pyx_n_s_subsumes;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":5582
 *             return 'subsumes'
 *         else:
 *             return 'nothing'             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_nothing);
    __pyx_r = __pyx_n_s_nothing;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":5565
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation.
 */

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

/* "pyparma/ppl.pyx":5588
 * ### Poly_Con_Relation ##############################
 * ####################################################
 * cdef _wrap_Poly_Con_Relation(PPL_Poly_Con_Relation relation):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Poly_Con_Relation`` into a Cython ``Poly_Con_Relation``.
 */

static PyObject *__pyx_f_7pyparma_3ppl__wrap_Poly_Con_Relation(Parma_Polyhedra_Library::Poly_Con_Relation __pyx_v_relation) {
  struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_rel = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_wrap_Poly_Con_Relation", 0);

  /* "pyparma/ppl.pyx":5592
 *     Wrap a C++ ``PPL_Poly_Con_Relation`` into a Cython ``Poly_Con_Relation``.
 *     """
 *     cdef Poly_Con_Relation rel = Poly_Con_Relation(True)             # <<<<<<<<<<<<<<
 *     rel.thisptr = new PPL_Poly_Con_Relation(relation)
 *     return rel
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation)), __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rel = ((struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":5593
 *     """
 *     cdef Poly_Con_Relation rel = Poly_Con_Relation(True)
 *     rel.thisptr = new PPL_Poly_Con_Relation(relation)             # <<<<<<<<<<<<<<
 *     return rel
 * 
 */
  __pyx_v_rel->thisptr = new Parma_Polyhedra_Library::Poly_Con_Relation(__pyx_v_relation);

  /* "pyparma/ppl.pyx":5594
 *     cdef Poly_Con_Relation rel = Poly_Con_Relation(True)
 *     rel.thisptr = new PPL_Poly_Con_Relation(relation)
 *     return rel             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_rel));
  __pyx_r = ((PyObject *)__pyx_v_rel);
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5588
 * ### Poly_Con_Relation ##############################
 * ####################################################
 * cdef _wrap_Poly_Con_Relation(PPL_Poly_Con_Relation relation):             # <<<<<<<<<<<<<<
 *     """
 *     Wrap a C++ ``PPL_Poly_Con_Relation`` into a Cython ``Poly_Con_Relation``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl._wrap_Poly_Con_Relation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rel);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5646
 * 
 * 
 *     def __cinit__(self, do_not_construct_manually=False):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

/* Python wrapper */
static int __pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_do_not_construct_manually = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_do_not_construct_manually,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_do_not_construct_manually);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5646; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_do_not_construct_manually = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5646; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation___cinit__(((struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *)__pyx_v_self), __pyx_v_do_not_construct_manually);

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

static int __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation___cinit__(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self, PyObject *__pyx_v_do_not_construct_manually) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyparma/ppl.pyx":5658
 *             nothing
 *         """
 *         assert(do_not_construct_manually)             # <<<<<<<<<<<<<<
 *         self.thisptr = NULL
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_do_not_construct_manually); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (unlikely(!__pyx_t_1)) {
      PyErr_SetNone(PyExc_AssertionError);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":5659
 *         """
 *         assert(do_not_construct_manually)
 *         self.thisptr = NULL             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr = NULL;

  /* "pyparma/ppl.pyx":5646
 * 
 * 
 *     def __cinit__(self, do_not_construct_manually=False):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython constructor.
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5662
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

/* Python wrapper */
static void __pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_2__dealloc__(((struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *)__pyx_v_self));

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

static void __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_2__dealloc__(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "pyparma/ppl.pyx":5666
 *         The Cython destructor.
 *         """
 *         assert self.thisptr!=NULL, 'Do not construct Poly_Con_Relation objects manually!'             # <<<<<<<<<<<<<<
 *         del self.thisptr
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!((__pyx_v_self->thisptr != NULL) != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Do_not_construct_Poly_Con_Relati);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif

  /* "pyparma/ppl.pyx":5667
 *         """
 *         assert self.thisptr!=NULL, 'Do not construct Poly_Con_Relation objects manually!'
 *         del self.thisptr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  delete __pyx_v_self->thisptr;

  /* "pyparma/ppl.pyx":5662
 * 
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         """
 *         The Cython destructor.
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("pyparma.ppl.Poly_Con_Relation.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "pyparma/ppl.pyx":5670
 * 
 * 
 *     def implies(self, Poly_Con_Relation y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` implies ``y``.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_5implies(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_4implies[] = "\n        Test whether ``self`` implies ``y``.\n\n        INPUT:\n\n        - ``y`` -- a :class:`Poly_Con_Relation`.\n\n        OUTPUT:\n\n        Boolean. ``True`` if and only if ``self`` implies ``y``.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Con_Relation\n            sage: nothing = Poly_Con_Relation.nothing()\n            sage: nothing.implies( nothing )\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_5implies(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("implies (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_7pyparma_3ppl_Poly_Con_Relation, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_4implies(((struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *)__pyx_v_self), ((struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *)__pyx_v_y));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_4implies(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self, struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_y) {
  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("implies", 0);

  /* "pyparma/ppl.pyx":5689
 *             True
 *         """
 *         return self.thisptr.implies(y.thisptr[0])             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->implies((__pyx_v_y->thisptr[0]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5670
 * 
 * 
 *     def implies(self, Poly_Con_Relation y):             # <<<<<<<<<<<<<<
 *         r"""
 *         Test whether ``self`` implies ``y``.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.implies", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5693
 * 
 *     @classmethod
 *     def nothing(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion that says nothing.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_7nothing(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_6nothing[] = "\n        Return the assertion that says nothing.\n\n        OUTPUT:\n\n        A :class:`Poly_Con_Relation`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Con_Relation\n            sage: Poly_Con_Relation.nothing()\n            nothing\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_7nothing(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nothing (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_6nothing(((PyObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_6nothing(CYTHON_UNUSED PyObject *__pyx_v_cls) {
  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("nothing", 0);

  /* "pyparma/ppl.pyx":5707
 *             nothing
 *         """
 *         return _wrap_Poly_Con_Relation(PPL_Poly_Con_Relation_nothing())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Poly_Con_Relation(Parma_Polyhedra_Library::Poly_Con_Relation::nothing()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5693
 * 
 *     @classmethod
 *     def nothing(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion that says nothing.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.nothing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5711
 * 
 *     @classmethod
 *     def is_disjoint(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "The polyhedron and the set of points
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_9is_disjoint(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_8is_disjoint[] = "\n        Return the assertion \"The polyhedron and the set of points\n        satisfying the constraint are disjoint\".\n\n        OUTPUT:\n\n        A :class:`Poly_Con_Relation`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Con_Relation\n            sage: Poly_Con_Relation.is_disjoint()\n            is_disjoint\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_9is_disjoint(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_disjoint (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_8is_disjoint(((PyObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_8is_disjoint(CYTHON_UNUSED PyObject *__pyx_v_cls) {
  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("is_disjoint", 0);

  /* "pyparma/ppl.pyx":5726
 *             is_disjoint
 *         """
 *         return _wrap_Poly_Con_Relation(PPL_Poly_Con_Relation_is_disjoint())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Poly_Con_Relation(Parma_Polyhedra_Library::Poly_Con_Relation::is_disjoint()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5711
 * 
 *     @classmethod
 *     def is_disjoint(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "The polyhedron and the set of points
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.is_disjoint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5730
 * 
 *     @classmethod
 *     def strictly_intersects(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "The polyhedron intersects the set of
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_11strictly_intersects(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_10strictly_intersects[] = "\n        Return the assertion \"The polyhedron intersects the set of\n        points satisfying the constraint, but it is not included in\n        it\".\n\n        OUTPUT:\n\n        A :class:`Poly_Con_Relation`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Con_Relation\n            sage: Poly_Con_Relation.strictly_intersects()\n            strictly_intersects\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_11strictly_intersects(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("strictly_intersects (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_10strictly_intersects(((PyObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_10strictly_intersects(CYTHON_UNUSED PyObject *__pyx_v_cls) {
  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("strictly_intersects", 0);

  /* "pyparma/ppl.pyx":5746
 *             strictly_intersects
 *         """
 *         return _wrap_Poly_Con_Relation(PPL_Poly_Con_Relation_strictly_intersects())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Poly_Con_Relation(Parma_Polyhedra_Library::Poly_Con_Relation::strictly_intersects()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5730
 * 
 *     @classmethod
 *     def strictly_intersects(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "The polyhedron intersects the set of
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.strictly_intersects", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5750
 * 
 *     @classmethod
 *     def is_included(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "The polyhedron is included in the set of
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_13is_included(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_12is_included[] = "\n        Return the assertion \"The polyhedron is included in the set of\n        points satisfying the constraint\".\n\n        OUTPUT:\n\n        A :class:`Poly_Con_Relation`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Con_Relation\n            sage: Poly_Con_Relation.is_included()\n            is_included\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_13is_included(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_included (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_12is_included(((PyObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_12is_included(CYTHON_UNUSED PyObject *__pyx_v_cls) {
  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("is_included", 0);

  /* "pyparma/ppl.pyx":5765
 *             is_included
 *         """
 *         return _wrap_Poly_Con_Relation(PPL_Poly_Con_Relation_is_included())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Poly_Con_Relation(Parma_Polyhedra_Library::Poly_Con_Relation::is_included()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5750
 * 
 *     @classmethod
 *     def is_included(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "The polyhedron is included in the set of
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.is_included", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5769
 * 
 *     @classmethod
 *     def saturates(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "".
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_15saturates(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_14saturates[] = "\n        Return the assertion \"\".\n\n        OUTPUT:\n\n        A :class:`Poly_Con_Relation`.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Con_Relation\n            sage: Poly_Con_Relation.saturates()\n            saturates\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_15saturates(PyObject *__pyx_v_cls, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("saturates (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_14saturates(((PyObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_14saturates(CYTHON_UNUSED PyObject *__pyx_v_cls) {
  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("saturates", 0);

  /* "pyparma/ppl.pyx":5783
 *             saturates
 *         """
 *         return _wrap_Poly_Con_Relation(PPL_Poly_Con_Relation_saturates())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyparma_3ppl__wrap_Poly_Con_Relation(Parma_Polyhedra_Library::Poly_Con_Relation::saturates()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5769
 * 
 *     @classmethod
 *     def saturates(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "".
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.saturates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5786
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_17ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_16ascii_dump[] = "\n        Write an ASCII dump to stderr.\n\n        EXAMPLES::\n\n            sage: sage_cmd  = 'from sage.libs.ppl import Poly_Con_Relation\\n'\n            sage: sage_cmd += 'Poly_Con_Relation.nothing().ascii_dump()\\n'\n            sage: from sage.tests.cmdline import test_executable\n            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest\n            sage: print err  # long time\n            NOTHING\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_17ascii_dump(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_16ascii_dump(((struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_16ascii_dump(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ascii_dump", 0);

  /* "pyparma/ppl.pyx":5799
 *             NOTHING
 *         """
 *         self.thisptr.ascii_dump()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->thisptr->ascii_dump();

  /* "pyparma/ppl.pyx":5786
 * 
 * 
 *     def ascii_dump(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Write an ASCII dump to stderr.
 */

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

/* "pyparma/ppl.pyx":5802
 * 
 * 
 *     def OK(self, check_non_empty=False):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_19OK(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_18OK[] = "\n        Check if all the invariants are satisfied.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Con_Relation\n            sage: Poly_Con_Relation.nothing().OK()\n            True\n        ";
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_19OK(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_check_non_empty = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("OK (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_check_non_empty,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_check_non_empty);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "OK") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5802; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_check_non_empty = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("OK", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5802; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_18OK(((struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *)__pyx_v_self), __pyx_v_check_non_empty);

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

static PyObject *__pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_18OK(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_check_non_empty) {
  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("OK", 0);

  /* "pyparma/ppl.pyx":5812
 *             True
 *         """
 *         return self.thisptr.OK()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->thisptr->OK()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5812; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyparma/ppl.pyx":5802
 * 
 * 
 *     def OK(self, check_non_empty=False):             # <<<<<<<<<<<<<<
 *         """
 *         Check if all the invariants are satisfied.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyparma.ppl.Poly_Con_Relation.OK", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyparma/ppl.pyx":5815
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_21__repr__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_20__repr__[] = "\n        Return a string representation.\n\n        OUTPUT:\n\n        String.\n\n        EXAMPLES::\n\n            sage: from sage.libs.ppl import Poly_Con_Relation\n            sage: Poly_Con_Relation.nothing().__repr__()\n            'nothing'\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyparma_3ppl_17Poly_Con_Relation_20__repr__;
#endif
static PyObject *__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_21__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyparma_3ppl_17Poly_Con_Relation_20__repr__(((struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation *)__pyx_v_self));

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

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

  /* "pyparma/ppl.pyx":5829
 *             'nothing'
 *         """
 *         rel = []             # <<<<<<<<<<<<<<
 *         if self.implies(Poly_Con_Relation.is_disjoint()):
 *             rel.append('is_disjoint')
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rel = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyparma/ppl.pyx":5830
 *         """
 *         rel = []
 *         if self.implies(Poly_Con_Relation.is_disjoint()):             # <<<<<<<<<<<<<<
 *             rel.append('is_disjoint')
 *         if self.implies(Poly_Con_Relation.strictly_intersects()):
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_implies); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation)), __pyx_n_s_is_disjoint); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {

    /* "pyparma/ppl.pyx":5831
 *         rel = []
 *         if self.implies(Poly_Con_Relation.is_disjoint()):
 *             rel.append('is_disjoint')             # <<<<<<<<<<<<<<
 *         if self.implies(Poly_Con_Relation.strictly_intersects()):
 *             rel.append('strictly_intersects')
 */
    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_rel, __pyx_n_s_is_disjoint); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "pyparma/ppl.pyx":5832
 *         if self.implies(Poly_Con_Relation.is_disjoint()):
 *             rel.append('is_disjoint')
 *         if self.implies(Poly_Con_Relation.strictly_intersects()):             # <<<<<<<<<<<<<<
 *             rel.append('strictly_intersects')
 *         if self.implies(Poly_Con_Relation.is_included()):
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_implies); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation)), __pyx_n_s_strictly_intersects); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {

    /* "pyparma/ppl.pyx":5833
 *             rel.append('is_disjoint')
 *         if self.implies(Poly_Con_Relation.strictly_intersects()):
 *             rel.append('strictly_intersects')             # <<<<<<<<<<<<<<
 *         if self.implies(Poly_Con_Relation.is_included()):
 *             rel.append('is_included')
 */
    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_rel, __pyx_n_s_strictly_intersects); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  /* "pyparma/ppl.pyx":5834
 *         if self.implies(Poly_Con_Relation.strictly_intersects()):
 *             rel.append('strictly_intersects')
 *         if self.implies(Poly_Con_Relation.is_included()):             # <<<<<<<<<<<<<<
 *             rel.append('is_included')
 *         if self.implies(Poly_Con_Relation.saturates()):
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_implies); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation)), __pyx_n_s_is_included); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {

    /* "pyparma/ppl.pyx":5835
 *             rel.append('strictly_intersects')
 *         if self.implies(Poly_Con_Relation.is_included()):
 *             rel.append('is_included')             # <<<<<<<<<<<<<<
 *         if self.implies(Poly_Con_Relation.saturates()):
 *             rel.append('saturates')
 */
    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_rel, __pyx_n_s_is_included); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "pyparma/ppl.pyx":5836
 *         if self.implies(Poly_Con_Relation.is_included()):
 *             rel.append('is_included')
 *         if self.implies(Poly_Con_Relation.saturates()):             # <<<<<<<<<<<<<<
 *             rel.append('saturates')
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_implies); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation)), __pyx_n_s_saturates); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {

    /* "pyparma/ppl.pyx":5837
 *             rel.append('is_included')
 *         if self.implies(Poly_Con_Relation.saturates()):
 *             rel.append('saturates')             # <<<<<<<<<<<<<<
 * 
 *         if len(rel)>0:
 */
    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_rel, __pyx_n_s_saturates); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L6;
  }
  __pyx_L6:;

  /* "pyparma/ppl.pyx":5839
 *             rel.append('saturates')
 * 
 *         if len(rel)>0:             # <<<<<<<<<<<<<<
 *             return ', '.join(rel)
 *         else:
 */
  __pyx_t_6 = PyList_GET_SIZE(__pyx_v_rel); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_4 = ((__pyx_t_6 > 0) != 0);
  if (__pyx_t_4) {

    /* "pyparma/ppl.pyx":5840
 * 
 *         if len(rel)>0:
 *             return ', '.join(rel)             # <<<<<<<<<<<<<<
 *         else:
 *             return 'nothing'
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyString_Join(__pyx_kp_s__2, __pyx_v_rel); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
  /*else*/ {

    /* "pyparma/ppl.pyx":5842
 *             return ', '.join(rel)
 *         else:
 *             return 'nothing'             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_n_s_nothing);
    __pyx_r = __pyx_n_s_nothing;
    goto __pyx_L0;
  }

  /* "pyparma/ppl.pyx":5815
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return a string representation.
 */

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

static PyObject *__pyx_tp_new_7pyparma_3ppl_Variable(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_7pyparma_3ppl_8Variable_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Variable(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_8Variable_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Variable[] = {
  {__Pyx_NAMESTR("id"), (PyCFunction)__pyx_pw_7pyparma_3ppl_8Variable_5id, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_8Variable_4id)},
  {__Pyx_NAMESTR("OK"), (PyCFunction)__pyx_pw_7pyparma_3ppl_8Variable_7OK, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_8Variable_6OK)},
  {__Pyx_NAMESTR("space_dimension"), (PyCFunction)__pyx_pw_7pyparma_3ppl_8Variable_9space_dimension, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_8Variable_8space_dimension)},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Variable = {
  __pyx_pw_7pyparma_3ppl_8Variable_13__add__, /*nb_add*/
  __pyx_pw_7pyparma_3ppl_8Variable_15__sub__, /*nb_subtract*/
  __pyx_pw_7pyparma_3ppl_8Variable_17__mul__, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  __pyx_pw_7pyparma_3ppl_8Variable_21__neg__, /*nb_negative*/
  __pyx_pw_7pyparma_3ppl_8Variable_19__pos__, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  #if PY_VERSION_HEX >= 0x02050000
  0, /*nb_index*/
  #endif
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Variable = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Variable"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Variable), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Variable, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  __pyx_pw_7pyparma_3ppl_8Variable_11__repr__, /*tp_repr*/
  &__pyx_tp_as_number_Variable, /*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*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Variable`` class.\n\n    A dimension of the vector space.\n\n    An object of the class Variable represents a dimension of the\n    space, that is one of the Cartesian axes. Variables are used as\n    basic blocks in order to build more complex linear\n    expressions. Each variable is identified by a non-negative\n    integer, representing the index of the corresponding Cartesian\n    axis (the first axis has index 0). The space dimension of a\n    variable is the dimension of the vector space made by all the\n    Cartesian axes having an index less than or equal to that of the\n    considered variable; thus, if a variable has index `i`, its space\n    dimension is `i+1`.\n\n    INPUT:\n\n    - ``i`` -- integer. The index of the axis.\n\n    OUTPUT:\n\n    A :class:`Variable`\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Variable\n        sage: x = Variable(123)\n        sage: x.id()\n        123\n        sage: x\n        x123\n\n    Note that the \"meaning\" of an object of the class Variable is\n    completely specified by the integer index provided to its\n    constructor: be careful not to be mislead by C++ language variable\n    names. For instance, in the following example the linear\n    expressions ``e1`` and ``e2`` are equivalent, since the two\n    variables ``x`` and ``z`` denote the same Cartesian axis::\n\n        sage: x = Variable(0)\n        sage: y = Variable(1)\n        sage: z = Variable(0)\n        sage: e1 = x + y; e1\n        x0+x1\n        sage: e2 = y + z; e2\n        x0+x1\n        sage: e1 - e2\n        0\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_7pyparma_3ppl_8Variable_23__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Variable, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Variable, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyObject *__pyx_tp_new_7pyparma_3ppl_Linear_Expression(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_7pyparma_3ppl_17Linear_Expression_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Linear_Expression(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_17Linear_Expression_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Linear_Expression[] = {
  {__Pyx_NAMESTR("space_dimension"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Linear_Expression_5space_dimension, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Linear_Expression_4space_dimension)},
  {__Pyx_NAMESTR("coefficient"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Linear_Expression_7coefficient, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Linear_Expression_6coefficient)},
  {__Pyx_NAMESTR("coefficients"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Linear_Expression_9coefficients, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Linear_Expression_8coefficients)},
  {__Pyx_NAMESTR("inhomogeneous_term"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Linear_Expression_11inhomogeneous_term, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Linear_Expression_10inhomogeneous_term)},
  {__Pyx_NAMESTR("is_zero"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Linear_Expression_13is_zero, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Linear_Expression_12is_zero)},
  {__Pyx_NAMESTR("all_homogeneous_terms_are_zero"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Linear_Expression_15all_homogeneous_terms_are_zero, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Linear_Expression_14all_homogeneous_terms_are_zero)},
  {__Pyx_NAMESTR("ascii_dump"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Linear_Expression_17ascii_dump, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Linear_Expression_16ascii_dump)},
  {__Pyx_NAMESTR("OK"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Linear_Expression_19OK, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Linear_Expression_18OK)},
  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Linear_Expression_35__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Linear_Expression_34__reduce__)},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Linear_Expression = {
  __pyx_pw_7pyparma_3ppl_17Linear_Expression_23__add__, /*nb_add*/
  __pyx_pw_7pyparma_3ppl_17Linear_Expression_25__sub__, /*nb_subtract*/
  __pyx_pw_7pyparma_3ppl_17Linear_Expression_27__mul__, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  __pyx_pw_7pyparma_3ppl_17Linear_Expression_31__neg__, /*nb_negative*/
  __pyx_pw_7pyparma_3ppl_17Linear_Expression_29__pos__, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  #if PY_VERSION_HEX >= 0x02050000
  0, /*nb_index*/
  #endif
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Linear_Expression = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Linear_Expression"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Linear_Expression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Linear_Expression, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  __pyx_pw_7pyparma_3ppl_17Linear_Expression_21__repr__, /*tp_repr*/
  &__pyx_tp_as_number_Linear_Expression, /*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*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``PPL_Linear_Expression`` class.\n\n    INPUT:\n\n    The constructor accepts zero, one, or two arguments.\n\n    If there are two arguments ``Linear_Expression(a,b)``, they are\n    interpreted as\n\n    - ``a`` -- an iterable of integer coefficients, for example a\n      list.\n\n    - ``b`` -- an integer. The inhomogeneous term.\n\n    A single argument ``Linear_Expression(arg)`` is interpreted as\n\n    - ``arg`` -- something that determines a linear\n      expression. Possibilities are:\n\n      * a :class:`Variable`: The linear expression given by that\n        variable.\n\n      * a :class:`Linear_Expression`: The copy constructor.\n\n      * an integer: Constructs the constant linear expression.\n\n    No argument is the default constructor and returns the zero linear\n    expression.\n\n    OUTPUT:\n\n    A :class:`Linear_Expression`\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Variable, Linear_Expression\n        sage: Linear_Expression([1,2,3,4],5)\n        x0+2*x1+3*x2+4*x3+5\n        sage: Linear_Expression(10)\n        10\n        sage: Linear_Expression()\n        0\n        sage: Linear_Expression(10).inhomogeneous_term()\n        10\n        sage: x = Variable(123)\n        sage: expr = x+1; expr\n        x123+1\n        sage: expr.OK()\n        True\n        sage: expr.coefficient(x)\n        1\n        sage: expr.coefficient( Variable(124) )\n        0\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_7pyparma_3ppl_17Linear_Expression_33__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Linear_Expression, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Linear_Expression, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyObject *__pyx_tp_new_7pyparma_3ppl_Generator(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_7pyparma_3ppl_9Generator_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Generator(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_9Generator_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Generator[] = {
  {__Pyx_NAMESTR("line"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_5line, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_4line)},
  {__Pyx_NAMESTR("ray"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_7ray, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_6ray)},
  {__Pyx_NAMESTR("point"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_9point, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_8point)},
  {__Pyx_NAMESTR("closure_point"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_11closure_point, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_10closure_point)},
  {__Pyx_NAMESTR("space_dimension"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_15space_dimension, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_14space_dimension)},
  {__Pyx_NAMESTR("type"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_17type, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_16type)},
  {__Pyx_NAMESTR("is_line"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_19is_line, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_18is_line)},
  {__Pyx_NAMESTR("is_ray"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_21is_ray, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_20is_ray)},
  {__Pyx_NAMESTR("is_line_or_ray"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_23is_line_or_ray, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_22is_line_or_ray)},
  {__Pyx_NAMESTR("is_point"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_25is_point, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_24is_point)},
  {__Pyx_NAMESTR("is_closure_point"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_27is_closure_point, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_26is_closure_point)},
  {__Pyx_NAMESTR("coefficient"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_29coefficient, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_28coefficient)},
  {__Pyx_NAMESTR("coefficients"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_31coefficients, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_30coefficients)},
  {__Pyx_NAMESTR("divisor"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_33divisor, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_32divisor)},
  {__Pyx_NAMESTR("is_equivalent_to"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_35is_equivalent_to, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_34is_equivalent_to)},
  {__Pyx_NAMESTR("ascii_dump"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_37ascii_dump, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_36ascii_dump)},
  {__Pyx_NAMESTR("OK"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_39OK, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_38OK)},
  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_7pyparma_3ppl_9Generator_41__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_9Generator_40__reduce__)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Generator = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Generator"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Generator), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Generator, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  __pyx_pw_7pyparma_3ppl_9Generator_13__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Generator`` class.\n\n    An object of the class Generator is one of the following:\n\n      * a line `\\ell = (a_0, \\dots, a_{n-1})^T`\n\n      * a ray `r = (a_0, \\dots, a_{n-1})^T`\n\n      * a point `p = (\\tfrac{a_0}{d}, \\dots, \\tfrac{a_{n-1}}{d})^T`\n\n      * a closure point `c = (\\tfrac{a_0}{d}, \\dots, \\tfrac{a_{n-1}}{d})^T`\n\n    where `n` is the dimension of the space and, for points and\n    closure points, `d` is the divisor.\n\n    INPUT/OUTPUT:\n\n    Use the helper functions :func:`line`, :func:`ray`, :func:`point`,\n    and :func:`closure_point` to construct generators. Analogous class\n    methods are also available, see :meth:`Generator.line`,\n    :meth:`Generator.ray`, :meth:`Generator.point`,\n    :meth:`Generator.closure_point`. Do not attempt to construct\n    generators manually.\n\n    .. NOTE::\n\n        The generators are constructed from linear expressions. The\n        inhomogeneous term is always silently discarded.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Generator, Variable\n        sage: x = Variable(0)\n        sage: y = Variable(1)\n        sage: Generator.line(5*x-2*y)\n        line(5, -2)\n        sage: Generator.ray(5*x-2*y)\n        ray(5, -2)\n        sage: Generator.point(5*x-2*y, 7)\n        point(5/7, -2/7)\n        sage: Generator.closure_point(5*x-2*y, 7)\n        closure_point(5/7, -2/7)\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Generator, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Generator, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyObject *__pyx_tp_new_7pyparma_3ppl_Generator_System(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_7pyparma_3ppl_16Generator_System_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Generator_System(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_16Generator_System_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_7pyparma_3ppl_Generator_System(PyObject *o, Py_ssize_t i) {
  PyObject *r;
  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
  Py_DECREF(x);
  return r;
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Generator_System[] = {
  {__Pyx_NAMESTR("space_dimension"), (PyCFunction)__pyx_pw_7pyparma_3ppl_16Generator_System_5space_dimension, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_16Generator_System_4space_dimension)},
  {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_7pyparma_3ppl_16Generator_System_7clear, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_16Generator_System_6clear)},
  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_7pyparma_3ppl_16Generator_System_9insert, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_16Generator_System_8insert)},
  {__Pyx_NAMESTR("empty"), (PyCFunction)__pyx_pw_7pyparma_3ppl_16Generator_System_11empty, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_16Generator_System_10empty)},
  {__Pyx_NAMESTR("ascii_dump"), (PyCFunction)__pyx_pw_7pyparma_3ppl_16Generator_System_13ascii_dump, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_16Generator_System_12ascii_dump)},
  {__Pyx_NAMESTR("OK"), (PyCFunction)__pyx_pw_7pyparma_3ppl_16Generator_System_15OK, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_16Generator_System_14OK)},
  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_7pyparma_3ppl_16Generator_System_25__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_16Generator_System_24__reduce__)},
  {0, 0, 0, 0}
};

static PySequenceMethods __pyx_tp_as_sequence_Generator_System = {
  __pyx_pw_7pyparma_3ppl_16Generator_System_17__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_7pyparma_3ppl_Generator_System, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Generator_System = {
  __pyx_pw_7pyparma_3ppl_16Generator_System_17__len__, /*mp_length*/
  __pyx_pw_7pyparma_3ppl_16Generator_System_21__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Generator_System = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Generator_System"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Generator_System), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Generator_System, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  __pyx_pw_7pyparma_3ppl_16Generator_System_23__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  &__pyx_tp_as_sequence_Generator_System, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Generator_System, /*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*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Generator_System`` class.\n\n    An object of the class Generator_System is a system of generators,\n    i.e., a multiset of objects of the class Generator (lines, rays,\n    points and closure points). When inserting generators in a system,\n    space dimensions are automatically adjusted so that all the\n    generators in the system are defined on the same vector space. A\n    system of generators which is meant to define a non-empty\n    polyhedron must include at least one point: the reason is that\n    lines, rays and closure points need a supporting point (lines and\n    rays only specify directions while closure points only specify\n    points in the topological closure of the NNC polyhedron).\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Generator_System, Variable, line, ray, point, closure_point\n        sage: x = Variable(0)\n        sage: y = Variable(1)\n        sage: gs = Generator_System( line(5*x-2*y) )\n        sage: gs.insert( ray(6*x-3*y) )\n        sage: gs.insert( point(2*x-7*y, 5) )\n        sage: gs.insert( closure_point(9*x-1*y, 2) )\n        sage: gs\n        Generator_System {line(5, -2), ray(2, -1), point(2/5, -7/5), closure_point(9/2, -1/2)}\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_7pyparma_3ppl_16Generator_System_19__iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Generator_System, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Generator_System, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyObject *__pyx_tp_new_7pyparma_3ppl_Generator_System_iterator(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *)o);
  p->gs = ((struct __pyx_obj_7pyparma_3ppl_Generator_System *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyparma_3ppl_25Generator_System_iterator_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Generator_System_iterator(PyObject *o) {
  struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *p = (struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *)o;
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_25Generator_System_iterator_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->gs);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyparma_3ppl_Generator_System_iterator(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *p = (struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *)o;
  if (p->gs) {
    e = (*v)(((PyObject*)p->gs), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyparma_3ppl_Generator_System_iterator(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *p = (struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator *)o;
  tmp = ((PyObject*)p->gs);
  p->gs = ((struct __pyx_obj_7pyparma_3ppl_Generator_System *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Generator_System_iterator[] = {
  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_7pyparma_3ppl_25Generator_System_iterator_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_25Generator_System_iterator_4__next__)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Generator_System_iterator = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Generator_System_iterator"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Generator_System_iterator), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Generator_System_iterator, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Generator_System::const_iterator`` class.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Generator_System, Variable, line, ray, point, closure_point, Generator_System_iterator\n        sage: x = Variable(0)\n        sage: y = Variable(1)\n        sage: gs = Generator_System( line(5*x-2*y) )\n        sage: gs.insert( ray(6*x-3*y) )\n        sage: gs.insert( point(2*x-7*y, 5) )\n        sage: gs.insert( closure_point(9*x-1*y, 2) )\n        sage: Generator_System_iterator(gs).next()\n        line(5, -2)\n        sage: list(gs)\n        [line(5, -2), ray(2, -1), point(2/5, -7/5), closure_point(9/2, -1/2)]\n    "), /*tp_doc*/
  __pyx_tp_traverse_7pyparma_3ppl_Generator_System_iterator, /*tp_traverse*/
  __pyx_tp_clear_7pyparma_3ppl_Generator_System_iterator, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  __pyx_pw_7pyparma_3ppl_25Generator_System_iterator_5__next__, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Generator_System_iterator, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Generator_System_iterator, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyObject *__pyx_tp_new_7pyparma_3ppl_Constraint(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_7pyparma_3ppl_10Constraint_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Constraint(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_10Constraint_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Constraint[] = {
  {__Pyx_NAMESTR("space_dimension"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_7space_dimension, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_6space_dimension)},
  {__Pyx_NAMESTR("type"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_9type, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_8type)},
  {__Pyx_NAMESTR("is_equality"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_11is_equality, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_10is_equality)},
  {__Pyx_NAMESTR("is_inequality"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_13is_inequality, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_12is_inequality)},
  {__Pyx_NAMESTR("is_nonstrict_inequality"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_15is_nonstrict_inequality, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_14is_nonstrict_inequality)},
  {__Pyx_NAMESTR("is_strict_inequality"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_17is_strict_inequality, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_16is_strict_inequality)},
  {__Pyx_NAMESTR("coefficient"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_19coefficient, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_18coefficient)},
  {__Pyx_NAMESTR("coefficients"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_21coefficients, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_20coefficients)},
  {__Pyx_NAMESTR("inhomogeneous_term"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_23inhomogeneous_term, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_22inhomogeneous_term)},
  {__Pyx_NAMESTR("is_tautological"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_25is_tautological, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_24is_tautological)},
  {__Pyx_NAMESTR("is_inconsistent"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_27is_inconsistent, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_26is_inconsistent)},
  {__Pyx_NAMESTR("is_equivalent_to"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_29is_equivalent_to, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_28is_equivalent_to)},
  {__Pyx_NAMESTR("ascii_dump"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_31ascii_dump, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_30ascii_dump)},
  {__Pyx_NAMESTR("OK"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_33OK, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_32OK)},
  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Constraint_35__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Constraint_34__reduce__)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Constraint = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Constraint"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Constraint), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Constraint, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  __pyx_pw_7pyparma_3ppl_10Constraint_5__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Constraint`` class.\n\n    An object of the class ``Constraint`` is either:\n\n    * an equality `\\sum_{i=0}^{n-1} a_i x_i + b = 0`\n\n    * a non-strict inequality `\\sum_{i=0}^{n-1} a_i x_i + b \\geq 0`\n\n    * a strict inequality `\\sum_{i=0}^{n-1} a_i x_i + b > 0`\n\n    where `n` is the dimension of the space, `a_i` is the integer\n    coefficient of variable `x_i`, and `b_i` is the integer\n    inhomogeneous term.\n\n    INPUT/OUTPUT:\n\n    You construct constraints by writing inequalities in\n    :class:`Linear_Expression`. Do not attempt to manually construct\n    constraints.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Constraint, Variable, Linear_Expression\n        sage: x = Variable(0)\n        sage: y = Variable(1)\n        sage: 5*x-2*y >  x+y-1\n        4*x0-3*x1+1>0\n        sage: 5*x-2*y >= x+y-1\n        4*x0-3*x1+1>=0\n        sage: 5*x-2*y == x+y-1\n        4*x0-3*x1+1==0\n        sage: 5*x-2*y <= x+y-1\n        -4*x0+3*x1-1>=0\n        sage: 5*x-2*y <  x+y-1\n        -4*x0+3*x1-1>0\n        sage: x > 0\n        x0>0\n\n    Special care is needed if the left hand side is a constant::\n\n        sage: 0 == 1    # watch out!\n        False\n        sage: Linear_Expression(0) == 1\n        -1==0\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Constraint, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Constraint, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyObject *__pyx_tp_new_7pyparma_3ppl_Constraint_System(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_7pyparma_3ppl_17Constraint_System_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Constraint_System(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_17Constraint_System_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_7pyparma_3ppl_Constraint_System(PyObject *o, Py_ssize_t i) {
  PyObject *r;
  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
  Py_DECREF(x);
  return r;
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Constraint_System[] = {
  {__Pyx_NAMESTR("space_dimension"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Constraint_System_5space_dimension, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Constraint_System_4space_dimension)},
  {__Pyx_NAMESTR("has_equalities"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Constraint_System_7has_equalities, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Constraint_System_6has_equalities)},
  {__Pyx_NAMESTR("has_strict_inequalities"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Constraint_System_9has_strict_inequalities, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Constraint_System_8has_strict_inequalities)},
  {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Constraint_System_11clear, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Constraint_System_10clear)},
  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Constraint_System_13insert, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Constraint_System_12insert)},
  {__Pyx_NAMESTR("empty"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Constraint_System_15empty, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Constraint_System_14empty)},
  {__Pyx_NAMESTR("ascii_dump"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Constraint_System_17ascii_dump, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Constraint_System_16ascii_dump)},
  {__Pyx_NAMESTR("OK"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Constraint_System_19OK, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Constraint_System_18OK)},
  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Constraint_System_29__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Constraint_System_28__reduce__)},
  {0, 0, 0, 0}
};

static PySequenceMethods __pyx_tp_as_sequence_Constraint_System = {
  __pyx_pw_7pyparma_3ppl_17Constraint_System_21__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_7pyparma_3ppl_Constraint_System, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Constraint_System = {
  __pyx_pw_7pyparma_3ppl_17Constraint_System_21__len__, /*mp_length*/
  __pyx_pw_7pyparma_3ppl_17Constraint_System_25__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Constraint_System = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Constraint_System"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Constraint_System), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Constraint_System, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  __pyx_pw_7pyparma_3ppl_17Constraint_System_27__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  &__pyx_tp_as_sequence_Constraint_System, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Constraint_System, /*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*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Constraint_System`` class.\n\n    An object of the class Constraint_System is a system of\n    constraints, i.e., a multiset of objects of the class\n    Constraint. When inserting constraints in a system, space\n    dimensions are automatically adjusted so that all the constraints\n    in the system are defined on the same vector space.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Constraint_System, Variable\n        sage: x = Variable(0)\n        sage: y = Variable(1)\n        sage: cs = Constraint_System( 5*x-2*y > 0 )\n        sage: cs.insert( 6*x<3*y )\n        sage: cs.insert( x >= 2*x-7*y )\n        sage: cs\n        Constraint_System {5*x0-2*x1>0, -2*x0+x1>0, -x0+7*x1>=0}\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_7pyparma_3ppl_17Constraint_System_23__iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Constraint_System, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Constraint_System, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyObject *__pyx_tp_new_7pyparma_3ppl_Constraint_System_iterator(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *)o);
  p->cs = ((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Constraint_System_iterator(PyObject *o) {
  struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *p = (struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *)o;
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->cs);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyparma_3ppl_Constraint_System_iterator(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *p = (struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *)o;
  if (p->cs) {
    e = (*v)(((PyObject*)p->cs), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyparma_3ppl_Constraint_System_iterator(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *p = (struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator *)o;
  tmp = ((PyObject*)p->cs);
  p->cs = ((struct __pyx_obj_7pyparma_3ppl_Constraint_System *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Constraint_System_iterator[] = {
  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_26Constraint_System_iterator_4__next__)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Constraint_System_iterator = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Constraint_System_iterator"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Constraint_System_iterator), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Constraint_System_iterator, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Constraint_System::const_iterator`` class.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Constraint_System, Variable, Constraint_System_iterator\n        sage: x = Variable(0)\n        sage: y = Variable(1)\n        sage: cs = Constraint_System( 5*x < 2*y )\n        sage: cs.insert( 6*x-3*y==0 )\n        sage: cs.insert( x >= 2*x-7*y )\n        sage: Constraint_System_iterator(cs).next()\n        -5*x0+2*x1>0\n        sage: list(cs)\n        [-5*x0+2*x1>0, 2*x0-x1==0, -x0+7*x1>=0]\n    "), /*tp_doc*/
  __pyx_tp_traverse_7pyparma_3ppl_Constraint_System_iterator, /*tp_traverse*/
  __pyx_tp_clear_7pyparma_3ppl_Constraint_System_iterator, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  __pyx_pw_7pyparma_3ppl_26Constraint_System_iterator_5__next__, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Constraint_System_iterator, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Constraint_System_iterator, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};
static struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron __pyx_vtable_7pyparma_3ppl_Polyhedron;

static PyObject *__pyx_tp_new_7pyparma_3ppl_Polyhedron(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyparma_3ppl_Polyhedron *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyparma_3ppl_Polyhedron *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyparma_3ppl_Polyhedron;
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Polyhedron(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Polyhedron[] = {
  {__Pyx_NAMESTR("_repr_"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_3_repr_, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_2_repr_)},
  {__Pyx_NAMESTR("space_dimension"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_5space_dimension, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_4space_dimension)},
  {__Pyx_NAMESTR("affine_dimension"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_7affine_dimension, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_6affine_dimension)},
  {__Pyx_NAMESTR("constraints"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_9constraints, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_8constraints)},
  {__Pyx_NAMESTR("minimized_constraints"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_11minimized_constraints, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_10minimized_constraints)},
  {__Pyx_NAMESTR("generators"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_13generators, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_12generators)},
  {__Pyx_NAMESTR("minimized_generators"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_15minimized_generators, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_14minimized_generators)},
  {__Pyx_NAMESTR("relation_with"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_17relation_with, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_16relation_with)},
  {__Pyx_NAMESTR("is_empty"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_19is_empty, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_18is_empty)},
  {__Pyx_NAMESTR("is_universe"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_21is_universe, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_20is_universe)},
  {__Pyx_NAMESTR("is_topologically_closed"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_23is_topologically_closed, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_22is_topologically_closed)},
  {__Pyx_NAMESTR("is_disjoint_from"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_25is_disjoint_from, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_24is_disjoint_from)},
  {__Pyx_NAMESTR("is_discrete"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_27is_discrete, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_26is_discrete)},
  {__Pyx_NAMESTR("is_bounded"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_29is_bounded, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_28is_bounded)},
  {__Pyx_NAMESTR("contains_integer_point"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_31contains_integer_point, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_30contains_integer_point)},
  {__Pyx_NAMESTR("constrains"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_33constrains, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_32constrains)},
  {__Pyx_NAMESTR("bounds_from_above"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_35bounds_from_above, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_34bounds_from_above)},
  {__Pyx_NAMESTR("bounds_from_below"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_37bounds_from_below, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_36bounds_from_below)},
  {__Pyx_NAMESTR("maximize"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_39maximize, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_38maximize)},
  {__Pyx_NAMESTR("minimize"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_41minimize, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_40minimize)},
  {__Pyx_NAMESTR("contains"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_43contains, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_42contains)},
  {__Pyx_NAMESTR("strictly_contains"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_45strictly_contains, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_44strictly_contains)},
  {__Pyx_NAMESTR("add_constraint"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_47add_constraint, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_46add_constraint)},
  {__Pyx_NAMESTR("add_generator"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_49add_generator, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_48add_generator)},
  {__Pyx_NAMESTR("add_constraints"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_51add_constraints, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_50add_constraints)},
  {__Pyx_NAMESTR("add_generators"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_53add_generators, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_52add_generators)},
  {__Pyx_NAMESTR("unconstrain"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_55unconstrain, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_54unconstrain)},
  {__Pyx_NAMESTR("intersection_assign"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_57intersection_assign, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_56intersection_assign)},
  {__Pyx_NAMESTR("poly_hull_assign"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_59poly_hull_assign, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_58poly_hull_assign)},
  {__Pyx_NAMESTR("poly_difference_assign"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_61poly_difference_assign, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_60poly_difference_assign)},
  {__Pyx_NAMESTR("drop_some_non_integer_points"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_63drop_some_non_integer_points, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_62drop_some_non_integer_points)},
  {__Pyx_NAMESTR("topological_closure_assign"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_65topological_closure_assign, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_64topological_closure_assign)},
  {__Pyx_NAMESTR("add_space_dimensions_and_embed"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_67add_space_dimensions_and_embed, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_66add_space_dimensions_and_embed)},
  {__Pyx_NAMESTR("add_space_dimensions_and_project"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_69add_space_dimensions_and_project, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_68add_space_dimensions_and_project)},
  {__Pyx_NAMESTR("concatenate_assign"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_71concatenate_assign, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_70concatenate_assign)},
  {__Pyx_NAMESTR("remove_higher_space_dimensions"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_73remove_higher_space_dimensions, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_72remove_higher_space_dimensions)},
  {__Pyx_NAMESTR("ascii_dump"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_75ascii_dump, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_74ascii_dump)},
  {__Pyx_NAMESTR("max_space_dimension"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_77max_space_dimension, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_76max_space_dimension)},
  {__Pyx_NAMESTR("OK"), (PyCFunction)__pyx_pw_7pyparma_3ppl_10Polyhedron_79OK, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_10Polyhedron_78OK)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Polyhedron = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Polyhedron"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Polyhedron), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Polyhedron, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Polyhedron`` class.\n\n    An object of the class Polyhedron represents a convex polyhedron\n    in the vector space.\n\n    A polyhedron can be specified as either a finite system of\n    constraints or a finite system of generators (see Section\n    Representations of Convex Polyhedra) and it is always possible to\n    obtain either representation. That is, if we know the system of\n    constraints, we can obtain from this the system of generators that\n    define the same polyhedron and vice versa. These systems can\n    contain redundant members: in this case we say that they are not\n    in the minimal form.\n\n    INPUT/OUTPUT:\n\n    This is an abstract base for :class:`C_Polyhedron` and\n    :class:`NNC_Polyhedron`. You cannot instantiate this class.\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_7pyparma_3ppl_10Polyhedron_81__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Polyhedron, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_7pyparma_3ppl_10Polyhedron_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Polyhedron, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};
static struct __pyx_vtabstruct_7pyparma_3ppl_C_Polyhedron __pyx_vtable_7pyparma_3ppl_C_Polyhedron;

static PyObject *__pyx_tp_new_7pyparma_3ppl_C_Polyhedron(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *p;
  PyObject *o = __pyx_tp_new_7pyparma_3ppl_Polyhedron(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyparma_3ppl_C_Polyhedron *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron*)__pyx_vtabptr_7pyparma_3ppl_C_Polyhedron;
  if (unlikely(__pyx_pw_7pyparma_3ppl_12C_Polyhedron_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_C_Polyhedron(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_12C_Polyhedron_5__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  __pyx_tp_dealloc_7pyparma_3ppl_Polyhedron(o);
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_C_Polyhedron[] = {
  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_7pyparma_3ppl_12C_Polyhedron_7__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_12C_Polyhedron_6__reduce__)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyparma_3ppl_C_Polyhedron = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.C_Polyhedron"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_C_Polyhedron), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_C_Polyhedron, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``C_Polyhedron`` class.\n\n    An object of the class :class:`C_Polyhedron` represents a\n    topologically closed convex polyhedron in the vector space. See\n    :class:`NNC_Polyhedron` for more general (not necessarily closed)\n    polyhedra.\n\n    When building a closed polyhedron starting from a system of\n    constraints, an exception is thrown if the system contains a\n    strict inequality constraint. Similarly, an exception is thrown\n    when building a closed polyhedron starting from a system of\n    generators containing a closure point.\n\n    INPUT:\n\n    - ``arg`` -- the defining data of the polyhedron. Any one of the\n      following is accepted:\n\n      * A non-negative integer. Depending on ``degenerate_element``,\n        either the space-filling or the empty polytope in the given\n        dimension ``arg`` is constructed.\n\n      * A :class:`Constraint_System`.\n\n      * A :class:`Generator_System`.\n\n      * A single :class:`Constraint`.\n\n      * A single :class:`Generator`.\n\n      * A :class:`C_Polyhedron`.\n\n    - ``degenerate_element`` -- string, either ``'universe'`` or\n      ``'empty'``. Only used if ``arg`` is an integer.\n\n    OUTPUT:\n\n    A :class:`C_Polyhedron`.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Constraint, Constraint_System, Generator, Generator_System, Variable, C_Polyhedron, point, ray\n        sage: x = Variable(0)\n        sage: y = Variable(1)\n        sage: C_Polyhedron( 5*x-2*y >=  x+y-1 )\n        A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 1 ray, 1 line\n        sage: cs = Constraint_System()\n        sage: cs.insert( x >= 0 )\n        sage: cs.insert( y >= 0 )\n        sage: C_Polyhedron(cs)\n        A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 2 rays\n        sage: C_Polyhedron( point(x+y) )\n        A 0-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point\n        sage: gs = Generator_System()\n        sage: gs.insert( point(-x-y) )\n        sage: gs.insert( ray(x) )\n        sage: C_Polyhedron(gs)\n        A 1-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 1 ray\n\n    The empty and universe polyhedra are constructed like this::\n\n        sage: C_Polyhedron(3, 'empty')\n        The empty polyhedron in QQ^3\n        sage: C_Polyhedron(3, 'empty').constraints()\n        Constraint_System {-1==0}\n        sage: C_Polyhedron(3, 'universe')\n        The space-filling polyhedron in QQ^3\n        sage: C_Polyhedron(3, 'universe').constraints()\n        Constraint_System {}\n\n    Note that, by convention, the generator system of a polyhedron is\n    either empty or contains at least one point. In particular, if you\n    define a polyhedron via a non-empty :class:`Generator_System` it\n    must contain a point (at any position). If you start with a single\n    generator, this generator must be a point::\n\n        sage: C_Polyhedron( ray(x) )\n        Traceback (most recent call last):\n        ...\n        ValueError: PPL::C_Polyhedron::C_Polyhedron(gs):\n        *this is an empty polyhedron and\n        the non-empty generator system gs contains no points.\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_C_Polyhedron, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_7pyparma_3ppl_12C_Polyhedron_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_C_Polyhedron, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};
static struct __pyx_vtabstruct_7pyparma_3ppl_NNC_Polyhedron __pyx_vtable_7pyparma_3ppl_NNC_Polyhedron;

static PyObject *__pyx_tp_new_7pyparma_3ppl_NNC_Polyhedron(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *p;
  PyObject *o = __pyx_tp_new_7pyparma_3ppl_Polyhedron(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyparma_3ppl_Polyhedron*)__pyx_vtabptr_7pyparma_3ppl_NNC_Polyhedron;
  if (unlikely(__pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_NNC_Polyhedron(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_5__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  __pyx_tp_dealloc_7pyparma_3ppl_Polyhedron(o);
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_NNC_Polyhedron[] = {
  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_7__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_14NNC_Polyhedron_6__reduce__)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyparma_3ppl_NNC_Polyhedron = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.NNC_Polyhedron"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_NNC_Polyhedron), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_NNC_Polyhedron, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``NNC_Polyhedron`` class.\n\n    An object of the class ``NNC_Polyhedron`` represents a not\n    necessarily closed (NNC) convex polyhedron in the vector space.\n\n    Note: Since NNC polyhedra are a generalization of closed\n    polyhedra, any object of the class :class:`C_Polyhedron` can be\n    (explicitly) converted into an object of the class\n    :class:`NNC_Polyhedron`. The reason for defining two different\n    classes is that objects of the class :class:`C_Polyhedron` are\n    characterized by a more efficient implementation, requiring less\n    time and memory resources.\n\n    INPUT:\n\n    - ``arg`` -- the defining data of the polyhedron. Any one of the\n      following is accepted:\n\n      * An non-negative integer. Depending on ``degenerate_element``,\n        either the space-filling or the empty polytope in the given\n        dimension ``arg`` is constructed.\n\n      * A :class:`Constraint_System`.\n\n      * A :class:`Generator_System`.\n\n      * A single :class:`Constraint`.\n\n      * A single :class:`Generator`.\n\n      * A :class:`NNC_Polyhedron`.\n\n      * A :class:`C_Polyhedron`.\n\n    - ``degenerate_element`` -- string, either ``'universe'`` or\n      ``'empty'``. Only used if ``arg`` is an integer.\n\n    OUTPUT:\n\n    A :class:`C_Polyhedron`.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Constraint, Constraint_System, Generator, Generator_System, Variable, NNC_Polyhedron, point, ray, closure_point\n        sage: x = Variable(0)\n        sage: y = Variable(1)\n        sage: NNC_Polyhedron( 5*x-2*y >  x+y-1 )\n        A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 1 closure_point, 1 ray, 1 line\n        sage: cs = Constraint_System()\n        sage: cs.insert( x > 0 )\n        sage: cs.insert( y > 0 )\n        sage: NNC_Polyhedron(cs)\n        A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 1 closure_point, 2 rays\n        sage: NNC_Polyhedron( point(x+y) )\n        A 0-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point\n        sage: gs = Generator_System()\n        sage: gs.insert( point(-y) )\n        sage: gs.insert( closure_point(-x-y) )\n        sage: gs.insert( ray(x) )\n        sage: p = NNC_Polyhedron(gs); p\n        A 1-dimensional polyhedron in QQ^2 defined as the convex hull of 1 point, 1 closure_point, 1 ray\n        sage: p.minimized_constraints()\n        Constraint_System {x1+1==0, x0+1>0}\n\n    Note that, by convention, every polyhedron must contain a point::\n\n        sage: NNC_Polyhedron( closure_point(x+y) )\n        Traceback (most recent call last):\n        ...\n        ValueError: PPL::NNC_Polyhedron::NNC_Polyhedron(gs):\n        *this is an empty polyhedron and\n        the non-empty generator system gs contains no points.\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_NNC_Polyhedron, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_7pyparma_3ppl_14NNC_Polyhedron_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_NNC_Polyhedron, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyObject *__pyx_tp_new_7pyparma_3ppl_Poly_Gen_Relation(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Poly_Gen_Relation(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Poly_Gen_Relation[] = {
  {__Pyx_NAMESTR("implies"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_5implies, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_4implies)},
  {__Pyx_NAMESTR("nothing"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_7nothing, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_6nothing)},
  {__Pyx_NAMESTR("subsumes"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_9subsumes, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_8subsumes)},
  {__Pyx_NAMESTR("ascii_dump"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_11ascii_dump, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_10ascii_dump)},
  {__Pyx_NAMESTR("OK"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_13OK, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_12OK)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Poly_Gen_Relation = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Poly_Gen_Relation"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Poly_Gen_Relation), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Poly_Gen_Relation, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  __pyx_pw_7pyparma_3ppl_17Poly_Gen_Relation_15__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Poly_Con_Relation`` class.\n\n    INPUT/OUTPUT:\n\n    You must not construct :class:`Poly_Gen_Relation` objects\n    manually. You will usually get them from\n    :meth:`~sage.libs.ppl.Polyhedron.relation_with`. You can also get\n    pre-defined relations from the class methods :meth:`nothing` and\n    :meth:`subsumes`.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Poly_Gen_Relation\n        sage: nothing = Poly_Gen_Relation.nothing(); nothing\n        nothing\n        sage: subsumes = Poly_Gen_Relation.subsumes(); subsumes\n        subsumes\n        sage: nothing.implies( subsumes )\n        False\n        sage: subsumes.implies( nothing )\n        True\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Poly_Gen_Relation, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Poly_Gen_Relation, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyObject *__pyx_tp_new_7pyparma_3ppl_Poly_Con_Relation(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_1__cinit__(o, a, k) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyparma_3ppl_Poly_Con_Relation(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyparma_3ppl_Poly_Con_Relation[] = {
  {__Pyx_NAMESTR("implies"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_5implies, METH_O, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_4implies)},
  {__Pyx_NAMESTR("nothing"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_7nothing, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_6nothing)},
  {__Pyx_NAMESTR("is_disjoint"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_9is_disjoint, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_8is_disjoint)},
  {__Pyx_NAMESTR("strictly_intersects"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_11strictly_intersects, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_10strictly_intersects)},
  {__Pyx_NAMESTR("is_included"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_13is_included, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_12is_included)},
  {__Pyx_NAMESTR("saturates"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_15saturates, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_14saturates)},
  {__Pyx_NAMESTR("ascii_dump"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_17ascii_dump, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_16ascii_dump)},
  {__Pyx_NAMESTR("OK"), (PyCFunction)__pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_19OK, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_18OK)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyparma_3ppl_Poly_Con_Relation = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("pyparma.ppl.Poly_Con_Relation"), /*tp_name*/
  sizeof(struct __pyx_obj_7pyparma_3ppl_Poly_Con_Relation), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyparma_3ppl_Poly_Con_Relation, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  __pyx_pw_7pyparma_3ppl_17Poly_Con_Relation_21__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  __Pyx_DOCSTR("\n    Wrapper for PPL's ``Poly_Con_Relation`` class.\n\n    INPUT/OUTPUT:\n\n    You must not construct :class:`Poly_Con_Relation` objects\n    manually. You will usually get them from\n    :meth:`~sage.libs.ppl.Polyhedron.relation_with`. You can also get\n    pre-defined relations from the class methods :meth:`nothing`,\n    :meth:`is_disjoint`, :meth:`strictly_intersects`,\n    :meth:`is_included`, and :meth:`saturates`.\n\n    EXAMPLES::\n\n        sage: from sage.libs.ppl import Poly_Con_Relation\n        sage: saturates     = Poly_Con_Relation.saturates();  saturates\n        saturates\n        sage: is_included   = Poly_Con_Relation.is_included(); is_included\n        is_included\n        sage: is_included.implies(saturates)\n        False\n        sage: saturates.implies(is_included)\n        False\n        sage: rels = []\n        sage: rels.append( Poly_Con_Relation.nothing() )\n        sage: rels.append( Poly_Con_Relation.is_disjoint() )\n        sage: rels.append( Poly_Con_Relation.strictly_intersects() )\n        sage: rels.append( Poly_Con_Relation.is_included() )\n        sage: rels.append( Poly_Con_Relation.saturates() )\n        sage: rels\n        [nothing, is_disjoint, strictly_intersects, is_included, saturates]\n        sage: from sage.matrix.constructor import matrix\n        sage: m = matrix(5,5)\n        sage: for i, rel_i in enumerate(rels):\n        ...       for j, rel_j in enumerate(rels):\n        ...           m[i,j] = rel_i.implies(rel_j)\n        sage: m\n        [1 0 0 0 0]\n        [1 1 0 0 0]\n        [1 0 1 0 0]\n        [1 0 0 1 0]\n        [1 0 0 0 1]\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyparma_3ppl_Poly_Con_Relation, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyparma_3ppl_Poly_Con_Relation, /*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*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};

#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef __pyx_moduledef = {
  #if PY_VERSION_HEX < 0x03020000
    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
  #else
    PyModuleDef_HEAD_INIT,
  #endif
    __Pyx_NAMESTR("ppl"),
    0, /* m_doc */
    -1, /* m_size */
    __pyx_methods /* m_methods */,
    NULL, /* m_reload */
    NULL, /* m_traverse */
    NULL, /* m_clear */
    NULL /* m_free */
};
#endif

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0},
  {&__pyx_kp_s_0, __pyx_k_0, sizeof(__pyx_k_0), 0, 0, 1, 0},
  {&__pyx_kp_s_0_2, __pyx_k_0_2, sizeof(__pyx_k_0_2), 0, 0, 1, 0},
  {&__pyx_kp_s_0_3, __pyx_k_0_3, sizeof(__pyx_k_0_3), 0, 0, 1, 0},
  {&__pyx_kp_s_0_4, __pyx_k_0_4, sizeof(__pyx_k_0_4), 0, 0, 1, 0},
  {&__pyx_kp_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 0},
  {&__pyx_kp_s_Argument_must_be_Generator_or_a, __pyx_k_Argument_must_be_Generator_or_a, sizeof(__pyx_k_Argument_must_be_Generator_or_a), 0, 0, 1, 0},
  {&__pyx_n_s_BaseException, __pyx_k_BaseException, sizeof(__pyx_k_BaseException), 0, 0, 1, 1},
  {&__pyx_kp_s_Cannot_initialize_C_Polyhedron_w, __pyx_k_Cannot_initialize_C_Polyhedron_w, sizeof(__pyx_k_Cannot_initialize_C_Polyhedron_w), 0, 0, 1, 0},
  {&__pyx_kp_s_Cannot_initialize_NNC_Polyhedron, __pyx_k_Cannot_initialize_NNC_Polyhedron, sizeof(__pyx_k_Cannot_initialize_NNC_Polyhedron), 0, 0, 1, 0},
  {&__pyx_kp_s_Cannot_initialize_with, __pyx_k_Cannot_initialize_with, sizeof(__pyx_k_Cannot_initialize_with), 0, 0, 1, 0},
  {&__pyx_kp_s_Cannot_initialize_with_more_than, __pyx_k_Cannot_initialize_with_more_than, sizeof(__pyx_k_Cannot_initialize_with_more_than), 0, 0, 1, 0},
  {&__pyx_kp_s_Constraint_System, __pyx_k_Constraint_System, sizeof(__pyx_k_Constraint_System), 0, 0, 1, 0},
  {&__pyx_kp_s_Do_not_construct_Constraints_man, __pyx_k_Do_not_construct_Constraints_man, sizeof(__pyx_k_Do_not_construct_Constraints_man), 0, 0, 1, 0},
  {&__pyx_kp_s_Do_not_construct_Generators_manu, __pyx_k_Do_not_construct_Generators_manu, sizeof(__pyx_k_Do_not_construct_Generators_manu), 0, 0, 1, 0},
  {&__pyx_kp_s_Do_not_construct_Poly_Con_Relati, __pyx_k_Do_not_construct_Poly_Con_Relati, sizeof(__pyx_k_Do_not_construct_Poly_Con_Relati), 0, 0, 1, 0},
  {&__pyx_kp_s_Do_not_construct_Poly_Gen_Relati, __pyx_k_Do_not_construct_Poly_Gen_Relati, sizeof(__pyx_k_Do_not_construct_Poly_Gen_Relati), 0, 0, 1, 0},
  {&__pyx_kp_s_Error_has_occured, __pyx_k_Error_has_occured, sizeof(__pyx_k_Error_has_occured), 0, 0, 1, 0},
  {&__pyx_n_s_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 0, 0, 1, 1},
  {&__pyx_kp_s_Generator_System, __pyx_k_Generator_System, sizeof(__pyx_k_Generator_System), 0, 0, 1, 0},
  {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
  {&__pyx_n_s_NotImplementedError, __pyx_k_NotImplementedError, sizeof(__pyx_k_NotImplementedError), 0, 0, 1, 1},
  {&__pyx_kp_s_Note, __pyx_k_Note, sizeof(__pyx_k_Note), 0, 0, 1, 0},
  {&__pyx_n_s_StopIteration, __pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 0, 0, 1, 1},
  {&__pyx_kp_s_The_Polyhedron_class_is_abstract, __pyx_k_The_Polyhedron_class_is_abstract, sizeof(__pyx_k_The_Polyhedron_class_is_abstract), 0, 0, 1, 0},
  {&__pyx_kp_s_The_empty_polyhedron_in_QQ, __pyx_k_The_empty_polyhedron_in_QQ, sizeof(__pyx_k_The_empty_polyhedron_in_QQ), 0, 0, 1, 0},
  {&__pyx_kp_s_The_space_filling_polyhedron_in, __pyx_k_The_space_filling_polyhedron_in, sizeof(__pyx_k_The_space_filling_polyhedron_in), 0, 0, 1, 0},
  {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
  {&__pyx_kp_s_Unknown_value_degenerate_element, __pyx_k_Unknown_value_degenerate_element, sizeof(__pyx_k_Unknown_value_degenerate_element), 0, 0, 1, 0},
  {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
  {&__pyx_kp_s__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 0, 1, 0},
  {&__pyx_kp_s__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 0, 1, 0},
  {&__pyx_kp_s__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 0, 1, 0},
  {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0},
  {&__pyx_kp_s__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 0, 1, 0},
  {&__pyx_kp_s__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 0, 1, 0},
  {&__pyx_n_s_affine_dimension, __pyx_k_affine_dimension, sizeof(__pyx_k_affine_dimension), 0, 0, 1, 1},
  {&__pyx_n_s_arg, __pyx_k_arg, sizeof(__pyx_k_arg), 0, 0, 1, 1},
  {&__pyx_n_s_bounded, __pyx_k_bounded, sizeof(__pyx_k_bounded), 0, 0, 1, 1},
  {&__pyx_n_s_check_non_empty, __pyx_k_check_non_empty, sizeof(__pyx_k_check_non_empty), 0, 0, 1, 1},
  {&__pyx_kp_s_closure_point, __pyx_k_closure_point, sizeof(__pyx_k_closure_point), 0, 0, 1, 0},
  {&__pyx_n_s_closure_point_2, __pyx_k_closure_point_2, sizeof(__pyx_k_closure_point_2), 0, 0, 1, 1},
  {&__pyx_kp_s_closure_point_3, __pyx_k_closure_point_3, sizeof(__pyx_k_closure_point_3), 0, 0, 1, 0},
  {&__pyx_kp_s_closure_points, __pyx_k_closure_points, sizeof(__pyx_k_closure_points), 0, 0, 1, 0},
  {&__pyx_n_s_coefficient, __pyx_k_coefficient, sizeof(__pyx_k_coefficient), 0, 0, 1, 1},
  {&__pyx_n_s_coefficients, __pyx_k_coefficients, sizeof(__pyx_k_coefficients), 0, 0, 1, 1},
  {&__pyx_n_s_contains, __pyx_k_contains, sizeof(__pyx_k_contains), 0, 0, 1, 1},
  {&__pyx_n_s_cs, __pyx_k_cs, sizeof(__pyx_k_cs), 0, 0, 1, 1},
  {&__pyx_kp_s_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 0, 1, 0},
  {&__pyx_kp_s_d_2, __pyx_k_d_2, sizeof(__pyx_k_d_2), 0, 0, 1, 0},
  {&__pyx_kp_s_d_r, __pyx_k_d_r, sizeof(__pyx_k_d_r), 0, 0, 1, 0},
  {&__pyx_kp_s_d_r_2, __pyx_k_d_r_2, sizeof(__pyx_k_d_r_2), 0, 0, 1, 0},
  {&__pyx_kp_s_defined_as_the_convex_hull_of, __pyx_k_defined_as_the_convex_hull_of, sizeof(__pyx_k_defined_as_the_convex_hull_of), 0, 0, 1, 0},
  {&__pyx_n_s_degenerate_element, __pyx_k_degenerate_element, sizeof(__pyx_k_degenerate_element), 0, 0, 1, 1},
  {&__pyx_n_s_difference_assign, __pyx_k_difference_assign, sizeof(__pyx_k_difference_assign), 0, 0, 1, 1},
  {&__pyx_kp_s_dimensional_polyhedron, __pyx_k_dimensional_polyhedron, sizeof(__pyx_k_dimensional_polyhedron), 0, 0, 1, 0},
  {&__pyx_n_s_divisor, __pyx_k_divisor, sizeof(__pyx_k_divisor), 0, 0, 1, 1},
  {&__pyx_n_s_do_not_construct_manually, __pyx_k_do_not_construct_manually, sizeof(__pyx_k_do_not_construct_manually), 0, 0, 1, 1},
  {&__pyx_n_s_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 0, 0, 1, 1},
  {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1},
  {&__pyx_n_s_equality, __pyx_k_equality, sizeof(__pyx_k_equality), 0, 0, 1, 1},
  {&__pyx_n_s_equation, __pyx_k_equation, sizeof(__pyx_k_equation), 0, 0, 1, 1},
  {&__pyx_n_s_exc_info, __pyx_k_exc_info, sizeof(__pyx_k_exc_info), 0, 0, 1, 1},
  {&__pyx_n_s_expression, __pyx_k_expression, sizeof(__pyx_k_expression), 0, 0, 1, 1},
  {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1},
  {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1},
  {&__pyx_n_s_generator, __pyx_k_generator, sizeof(__pyx_k_generator), 0, 0, 1, 1},
  {&__pyx_n_s_generators, __pyx_k_generators, sizeof(__pyx_k_generators), 0, 0, 1, 1},
  {&__pyx_n_s_gs, __pyx_k_gs, sizeof(__pyx_k_gs), 0, 0, 1, 1},
  {&__pyx_kp_s_home_herve_dev_pyparma_pyparma, __pyx_k_home_herve_dev_pyparma_pyparma, sizeof(__pyx_k_home_herve_dev_pyparma_pyparma), 0, 0, 1, 0},
  {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1},
  {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1},
  {&__pyx_n_s_implies, __pyx_k_implies, sizeof(__pyx_k_implies), 0, 0, 1, 1},
  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
  {&__pyx_kp_s_in_QQ, __pyx_k_in_QQ, sizeof(__pyx_k_in_QQ), 0, 0, 1, 0},
  {&__pyx_kp_s_index_is_past_the_end, __pyx_k_index_is_past_the_end, sizeof(__pyx_k_index_is_past_the_end), 0, 0, 1, 0},
  {&__pyx_kp_s_index_must_be_nonnegative, __pyx_k_index_must_be_nonnegative, sizeof(__pyx_k_index_must_be_nonnegative), 0, 0, 1, 0},
  {&__pyx_n_s_inequality, __pyx_k_inequality, sizeof(__pyx_k_inequality), 0, 0, 1, 1},
  {&__pyx_n_s_inf_d, __pyx_k_inf_d, sizeof(__pyx_k_inf_d), 0, 0, 1, 1},
  {&__pyx_n_s_inf_n, __pyx_k_inf_n, sizeof(__pyx_k_inf_n), 0, 0, 1, 1},
  {&__pyx_n_s_inhomogeneous_term, __pyx_k_inhomogeneous_term, sizeof(__pyx_k_inhomogeneous_term), 0, 0, 1, 1},
  {&__pyx_n_s_insert, __pyx_k_insert, sizeof(__pyx_k_insert), 0, 0, 1, 1},
  {&__pyx_n_s_is_closure_point, __pyx_k_is_closure_point, sizeof(__pyx_k_is_closure_point), 0, 0, 1, 1},
  {&__pyx_n_s_is_disjoint, __pyx_k_is_disjoint, sizeof(__pyx_k_is_disjoint), 0, 0, 1, 1},
  {&__pyx_n_s_is_empty, __pyx_k_is_empty, sizeof(__pyx_k_is_empty), 0, 0, 1, 1},
  {&__pyx_n_s_is_equality, __pyx_k_is_equality, sizeof(__pyx_k_is_equality), 0, 0, 1, 1},
  {&__pyx_n_s_is_included, __pyx_k_is_included, sizeof(__pyx_k_is_included), 0, 0, 1, 1},
  {&__pyx_n_s_is_line, __pyx_k_is_line, sizeof(__pyx_k_is_line), 0, 0, 1, 1},
  {&__pyx_n_s_is_nonstrict_inequality, __pyx_k_is_nonstrict_inequality, sizeof(__pyx_k_is_nonstrict_inequality), 0, 0, 1, 1},
  {&__pyx_n_s_is_point, __pyx_k_is_point, sizeof(__pyx_k_is_point), 0, 0, 1, 1},
  {&__pyx_n_s_is_ray, __pyx_k_is_ray, sizeof(__pyx_k_is_ray), 0, 0, 1, 1},
  {&__pyx_n_s_is_strict_inequality, __pyx_k_is_strict_inequality, sizeof(__pyx_k_is_strict_inequality), 0, 0, 1, 1},
  {&__pyx_n_s_is_universe, __pyx_k_is_universe, sizeof(__pyx_k_is_universe), 0, 0, 1, 1},
  {&__pyx_n_s_iter, __pyx_k_iter, sizeof(__pyx_k_iter), 0, 0, 1, 1},
  {&__pyx_n_s_join, __pyx_k_join, sizeof(__pyx_k_join), 0, 0, 1, 1},
  {&__pyx_kp_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 0},
  {&__pyx_n_s_line_2, __pyx_k_line_2, sizeof(__pyx_k_line_2), 0, 0, 1, 1},
  {&__pyx_kp_s_line_3, __pyx_k_line_3, sizeof(__pyx_k_line_3), 0, 0, 1, 0},
  {&__pyx_kp_s_lines, __pyx_k_lines, sizeof(__pyx_k_lines), 0, 0, 1, 0},
  {&__pyx_n_s_lower, __pyx_k_lower, sizeof(__pyx_k_lower), 0, 0, 1, 1},
  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
  {&__pyx_n_s_maximum, __pyx_k_maximum, sizeof(__pyx_k_maximum), 0, 0, 1, 1},
  {&__pyx_n_s_minimized_generators, __pyx_k_minimized_generators, sizeof(__pyx_k_minimized_generators), 0, 0, 1, 1},
  {&__pyx_n_s_minimum, __pyx_k_minimum, sizeof(__pyx_k_minimum), 0, 0, 1, 1},
  {&__pyx_n_s_mul, __pyx_k_mul, sizeof(__pyx_k_mul), 0, 0, 1, 1},
  {&__pyx_n_s_next, __pyx_k_next, sizeof(__pyx_k_next), 0, 0, 1, 1},
  {&__pyx_n_s_nonstrict_inequality, __pyx_k_nonstrict_inequality, sizeof(__pyx_k_nonstrict_inequality), 0, 0, 1, 1},
  {&__pyx_n_s_nothing, __pyx_k_nothing, sizeof(__pyx_k_nothing), 0, 0, 1, 1},
  {&__pyx_kp_s_point, __pyx_k_point, sizeof(__pyx_k_point), 0, 0, 1, 0},
  {&__pyx_n_s_point_2, __pyx_k_point_2, sizeof(__pyx_k_point_2), 0, 0, 1, 1},
  {&__pyx_kp_s_point_3, __pyx_k_point_3, sizeof(__pyx_k_point_3), 0, 0, 1, 0},
  {&__pyx_kp_s_points, __pyx_k_points, sizeof(__pyx_k_points), 0, 0, 1, 0},
  {&__pyx_n_s_poly_difference_assign, __pyx_k_poly_difference_assign, sizeof(__pyx_k_poly_difference_assign), 0, 0, 1, 1},
  {&__pyx_n_s_poly_hull_assign, __pyx_k_poly_hull_assign, sizeof(__pyx_k_poly_hull_assign), 0, 0, 1, 1},
  {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1},
  {&__pyx_n_s_pyparma_ppl, __pyx_k_pyparma_ppl, sizeof(__pyx_k_pyparma_ppl), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
  {&__pyx_kp_s_r, __pyx_k_r, sizeof(__pyx_k_r), 0, 0, 1, 0},
  {&__pyx_kp_s_r_2, __pyx_k_r_2, sizeof(__pyx_k_r_2), 0, 0, 1, 0},
  {&__pyx_kp_s_r_3, __pyx_k_r_3, sizeof(__pyx_k_r_3), 0, 0, 1, 0},
  {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
  {&__pyx_kp_s_ray, __pyx_k_ray, sizeof(__pyx_k_ray), 0, 0, 1, 0},
  {&__pyx_n_s_ray_2, __pyx_k_ray_2, sizeof(__pyx_k_ray_2), 0, 0, 1, 1},
  {&__pyx_kp_s_ray_3, __pyx_k_ray_3, sizeof(__pyx_k_ray_3), 0, 0, 1, 0},
  {&__pyx_kp_s_rays, __pyx_k_rays, sizeof(__pyx_k_rays), 0, 0, 1, 0},
  {&__pyx_n_s_repr, __pyx_k_repr, sizeof(__pyx_k_repr), 0, 0, 1, 1},
  {&__pyx_n_s_saturates, __pyx_k_saturates, sizeof(__pyx_k_saturates), 0, 0, 1, 1},
  {&__pyx_n_s_space_dimension, __pyx_k_space_dimension, sizeof(__pyx_k_space_dimension), 0, 0, 1, 1},
  {&__pyx_n_s_strict_inequality, __pyx_k_strict_inequality, sizeof(__pyx_k_strict_inequality), 0, 0, 1, 1},
  {&__pyx_n_s_strictly_contains, __pyx_k_strictly_contains, sizeof(__pyx_k_strictly_contains), 0, 0, 1, 1},
  {&__pyx_n_s_strictly_intersects, __pyx_k_strictly_intersects, sizeof(__pyx_k_strictly_intersects), 0, 0, 1, 1},
  {&__pyx_n_s_subsumes, __pyx_k_subsumes, sizeof(__pyx_k_subsumes), 0, 0, 1, 1},
  {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1},
  {&__pyx_n_s_sup_d, __pyx_k_sup_d, sizeof(__pyx_k_sup_d), 0, 0, 1, 1},
  {&__pyx_n_s_sup_n, __pyx_k_sup_n, sizeof(__pyx_k_sup_n), 0, 0, 1, 1},
  {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1},
  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
  {&__pyx_n_s_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 0, 1, 1},
  {&__pyx_n_s_universe, __pyx_k_universe, sizeof(__pyx_k_universe), 0, 0, 1, 1},
  {&__pyx_n_s_upper_bound_assign, __pyx_k_upper_bound_assign, sizeof(__pyx_k_upper_bound_assign), 0, 0, 1, 1},
  {&__pyx_kp_s_x_0, __pyx_k_x_0, sizeof(__pyx_k_x_0), 0, 0, 1, 0},
  {0, 0, 0, 0, 0, 0, 0}
};
static int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #if PY_VERSION_HEX < 0x02050000
  __pyx_builtin_BaseException = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_BaseException) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #else
  __pyx_builtin_BaseException = __Pyx_GetBuiltinName(__pyx_n_s_BaseException); if (!__pyx_builtin_BaseException) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s_StopIteration); if (!__pyx_builtin_StopIteration) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_sum = __Pyx_GetBuiltinName(__pyx_n_s_sum); if (!__pyx_builtin_sum) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  return 0;
  __pyx_L1_error:;
  return -1;
}

static int __Pyx_InitCachedConstants(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);

  /* "pyparma/ppl.pyx":578
 *         Helper method for :meth:`relation_with`.
 *         """
 *         rel = Poly_Gen_Relation(True)             # <<<<<<<<<<<<<<
 *         try:
 *             rel.thisptr = new_relation_with(self.thisptr[0], g.thisptr[0])
 */
  __pyx_tuple__3 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);

  /* "pyparma/ppl.pyx":592
 *         Helper method for :meth:`relation_with`.
 *         """
 *         rel = Poly_Con_Relation(True)             # <<<<<<<<<<<<<<
 *         try:
 *             rel.thisptr = new_relation_with(self.thisptr[0], c.thisptr[0])
 */
  __pyx_tuple__4 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);

  /* "pyparma/ppl.pyx":2798
 *             a = args[0]
 *             b = args[1]
 *             ex = Linear_Expression(0)             # <<<<<<<<<<<<<<
 *             for i in range(0,len(a)):
 *                 ex = ex + Variable(i).__mul__(a[i])
 */
  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__6);
  __Pyx_GIVEREF(__pyx_tuple__6);

  /* "pyparma/ppl.pyx":3238
 *     Wrap a C++ ``PPL_Generator`` into a Cython ``Generator``.
 *     """
 *     cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *     g.thisptr = new PPL_Generator(generator)
 *     return g
 */
  __pyx_tuple__8 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);

  /* "pyparma/ppl.pyx":3364
 *         #   return _wrap_Generator(PPL_line(e.thisptr[0]))
 *         # workaround follows
 *         cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *         try:
 *             g.thisptr = new_line(e.thisptr[0])
 */
  __pyx_tuple__9 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);

  /* "pyparma/ppl.pyx":3409
 *         #   return _wrap_Generator(PPL_ray(e.thisptr[0]))
 *         # workaround follows
 *         cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *         try:
 *             g.thisptr = new_ray(e.thisptr[0])
 */
  __pyx_tuple__10 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);

  /* "pyparma/ppl.pyx":3460
 *         #   return _wrap_Generator(PPL_point(e.thisptr[0], PPL_Coefficient(d.value)))
 *         # workaround follows
 *         cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *         try:
 *             g.thisptr = new_point(e.thisptr[0], PPL_Coefficient(d))
 */
  __pyx_tuple__11 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);

  /* "pyparma/ppl.pyx":3514
 *         #   return _wrap_Generator(PPL_closure_point(e.thisptr[0], PPL_Coefficient(d.value)))
 *         # workaround follows
 *         cdef Generator g = Generator(True)             # <<<<<<<<<<<<<<
 *         try:
 *             g.thisptr = new_closure_point(e.thisptr[0], PPL_Coefficient(d))
 */
  __pyx_tuple__12 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);

  /* "pyparma/ppl.pyx":4259
 *         """
 *         if k < 0:
 *             raise IndexError('index must be nonnegative')             # <<<<<<<<<<<<<<
 *         iterator = self.__iter__()
 *         try:
 */
  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_index_must_be_nonnegative); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);

  /* "pyparma/ppl.pyx":4265
 *                 iterator.next()
 *         except StopIteration:
 *             raise IndexError('index is past-the-end')             # <<<<<<<<<<<<<<
 *         return iterator.next()
 * 
 */
  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_index_is_past_the_end); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);

  /* "pyparma/ppl.pyx":4395
 *     Wrap a C++ ``PPL_Constraint`` into a Cython ``Constraint``.
 *     """
 *     cdef Constraint c = Constraint(True)             # <<<<<<<<<<<<<<
 *     c.thisptr = new PPL_Constraint(constraint)
 *     return c
 */
  __pyx_tuple__18 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);

  /* "pyparma/ppl.pyx":5284
 *         """
 *         if k < 0:
 *             raise IndexError('index must be nonnegative')             # <<<<<<<<<<<<<<
 *         iterator = self.__iter__()
 *         try:
 */
  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_index_must_be_nonnegative); if (unlikely(!__pyx_tuple__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);

  /* "pyparma/ppl.pyx":5290
 *                 iterator.next()
 *         except StopIteration:
 *             raise IndexError('index is past-the-end')             # <<<<<<<<<<<<<<
 *         return iterator.next()
 * 
 */
  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_index_is_past_the_end); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);

  /* "pyparma/ppl.pyx":5419
 *     Wrap a C++ ``PPL_Poly_Gen_Relation`` into a Cython ``Poly_Gen_Relation``.
 *     """
 *     cdef Poly_Gen_Relation rel = Poly_Gen_Relation(True)             # <<<<<<<<<<<<<<
 *     rel.thisptr = new PPL_Poly_Gen_Relation(relation)
 *     return rel
 */
  __pyx_tuple__21 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);

  /* "pyparma/ppl.pyx":5592
 *     Wrap a C++ ``PPL_Poly_Con_Relation`` into a Cython ``Poly_Con_Relation``.
 *     """
 *     cdef Poly_Con_Relation rel = Poly_Con_Relation(True)             # <<<<<<<<<<<<<<
 *     rel.thisptr = new PPL_Poly_Con_Relation(relation)
 *     return rel
 */
  __pyx_tuple__22 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);

  /* "pyparma/ppl.pyx":3925
 * 
 * ####################################################
 * def line(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a line.
 */
  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_s_expression); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3925; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_herve_dev_pyparma_pyparma, __pyx_n_s_line_2, 3925, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3925; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":3942
 * 
 * ####################################################
 * def ray(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a ray.
 */
  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_n_s_expression); if (unlikely(!__pyx_tuple__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_herve_dev_pyparma_pyparma, __pyx_n_s_ray_2, 3942, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":3959
 * 
 * ####################################################
 * def point(expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a point.
 */
  __pyx_tuple__27 = PyTuple_Pack(2, __pyx_n_s_expression, __pyx_n_s_divisor); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_herve_dev_pyparma_pyparma, __pyx_n_s_point_2, 3959, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":3976
 * 
 * ####################################################
 * def closure_point(expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a closure point.
 */
  __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_expression, __pyx_n_s_divisor); if (unlikely(!__pyx_tuple__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_herve_dev_pyparma_pyparma, __pyx_n_s_closure_point_2, 3976, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":4902
 * 
 * ####################################################
 * def inequality(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct an inequality.
 */
  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_n_s_expression); if (unlikely(!__pyx_tuple__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4902; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_herve_dev_pyparma_pyparma, __pyx_n_s_inequality, 4902, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4902; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":4927
 * 
 * ####################################################
 * def strict_inequality(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a strict inequality.
 */
  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_n_s_expression); if (unlikely(!__pyx_tuple__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);
  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_herve_dev_pyparma_pyparma, __pyx_n_s_strict_inequality, 4927, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "pyparma/ppl.pyx":4952
 * 
 * ####################################################
 * def equation(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct an equation.
 */
  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_n_s_expression); if (unlikely(!__pyx_tuple__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4952; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);
  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_herve_dev_pyparma_pyparma, __pyx_n_s_equation, 4952, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4952; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_InitGlobals(void) {
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  return 0;
  __pyx_L1_error:;
  return -1;
}

#if PY_MAJOR_VERSION < 3
PyMODINIT_FUNC initppl(void); /*proto*/
PyMODINIT_FUNC initppl(void)
#else
PyMODINIT_FUNC PyInit_ppl(void); /*proto*/
PyMODINIT_FUNC PyInit_ppl(void)
#endif
{
  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_RefNannyDeclarations
  #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("PyMODINIT_FUNC PyInit_ppl(void)", 0);
  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #ifdef __Pyx_CyFunction_USED
  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  #ifdef __Pyx_FusedFunction_USED
  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  #ifdef __Pyx_Generator_USED
  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  /*--- Library function declarations ---*/
  /*--- Threads initialization code ---*/
  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
  #ifdef WITH_THREAD /* Python build with threading support? */
  PyEval_InitThreads();
  #endif
  #endif
  /*--- Module creation code ---*/
  #if PY_MAJOR_VERSION < 3
  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("ppl"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
  #else
  __pyx_m = PyModule_Create(&__pyx_moduledef);
  #endif
  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  Py_INCREF(__pyx_d);
  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #if CYTHON_COMPILING_IN_PYPY
  Py_INCREF(__pyx_b);
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  /*--- Initialize various global constants etc. ---*/
  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
  if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  if (__pyx_module_is_main_pyparma__ppl) {
    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  }
  #if PY_MAJOR_VERSION >= 3
  {
    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (!PyDict_GetItemString(modules, "pyparma.ppl")) {
      if (unlikely(PyDict_SetItemString(modules, "pyparma.ppl", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif
  /*--- Builtin init code ---*/
  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Constants init code ---*/
  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Global init code ---*/
  /*--- Variable export code ---*/
  /*--- Function export code ---*/
  /*--- Type init code ---*/
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Variable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Variable.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Variable, "__repr__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_10__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_10__repr__.doc = __pyx_doc_7pyparma_3ppl_8Variable_10__repr__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_8Variable_10__repr__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Variable, "__add__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_12__add__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_12__add__.doc = __pyx_doc_7pyparma_3ppl_8Variable_12__add__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_8Variable_12__add__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Variable, "__sub__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_14__sub__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_14__sub__.doc = __pyx_doc_7pyparma_3ppl_8Variable_14__sub__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_8Variable_14__sub__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Variable, "__mul__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_16__mul__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_16__mul__.doc = __pyx_doc_7pyparma_3ppl_8Variable_16__mul__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_8Variable_16__mul__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Variable, "__pos__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_18__pos__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_18__pos__.doc = __pyx_doc_7pyparma_3ppl_8Variable_18__pos__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_8Variable_18__pos__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Variable, "__neg__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_20__neg__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_8Variable_20__neg__.doc = __pyx_doc_7pyparma_3ppl_8Variable_20__neg__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_8Variable_20__neg__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Variable", (PyObject *)&__pyx_type_7pyparma_3ppl_Variable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Variable = &__pyx_type_7pyparma_3ppl_Variable;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Linear_Expression) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Linear_Expression.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Linear_Expression, "__repr__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_20__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_20__repr__.doc = __pyx_doc_7pyparma_3ppl_17Linear_Expression_20__repr__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_20__repr__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Linear_Expression, "__add__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_22__add__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_22__add__.doc = __pyx_doc_7pyparma_3ppl_17Linear_Expression_22__add__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_22__add__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Linear_Expression, "__sub__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_24__sub__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_24__sub__.doc = __pyx_doc_7pyparma_3ppl_17Linear_Expression_24__sub__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_24__sub__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Linear_Expression, "__mul__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_26__mul__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_26__mul__.doc = __pyx_doc_7pyparma_3ppl_17Linear_Expression_26__mul__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_26__mul__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Linear_Expression, "__pos__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_28__pos__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_28__pos__.doc = __pyx_doc_7pyparma_3ppl_17Linear_Expression_28__pos__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_28__pos__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Linear_Expression, "__neg__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_30__neg__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_30__neg__.doc = __pyx_doc_7pyparma_3ppl_17Linear_Expression_30__neg__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Linear_Expression_30__neg__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Linear_Expression", (PyObject *)&__pyx_type_7pyparma_3ppl_Linear_Expression) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Linear_Expression = &__pyx_type_7pyparma_3ppl_Linear_Expression;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Generator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Generator.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Generator, "__repr__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_9Generator_12__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_9Generator_12__repr__.doc = __pyx_doc_7pyparma_3ppl_9Generator_12__repr__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_9Generator_12__repr__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Generator", (PyObject *)&__pyx_type_7pyparma_3ppl_Generator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Generator = &__pyx_type_7pyparma_3ppl_Generator;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Generator_System) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Generator_System.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Generator_System, "__len__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_16__len__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_16__len__.doc = __pyx_doc_7pyparma_3ppl_16Generator_System_16__len__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_16Generator_System_16__len__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Generator_System, "__iter__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_18__iter__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_18__iter__.doc = __pyx_doc_7pyparma_3ppl_16Generator_System_18__iter__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_16Generator_System_18__iter__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Generator_System, "__getitem__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_20__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_20__getitem__.doc = __pyx_doc_7pyparma_3ppl_16Generator_System_20__getitem__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_16Generator_System_20__getitem__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Generator_System, "__repr__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_22__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_16Generator_System_22__repr__.doc = __pyx_doc_7pyparma_3ppl_16Generator_System_22__repr__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_16Generator_System_22__repr__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Generator_System", (PyObject *)&__pyx_type_7pyparma_3ppl_Generator_System) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Generator_System = &__pyx_type_7pyparma_3ppl_Generator_System;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Generator_System_iterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Generator_System_iterator.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Generator_System_iterator, "__next__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_25Generator_System_iterator_4__next__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_25Generator_System_iterator_4__next__.doc = __pyx_doc_7pyparma_3ppl_25Generator_System_iterator_4__next__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_25Generator_System_iterator_4__next__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Generator_System_iterator", (PyObject *)&__pyx_type_7pyparma_3ppl_Generator_System_iterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Generator_System_iterator = &__pyx_type_7pyparma_3ppl_Generator_System_iterator;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Constraint) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Constraint.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Constraint, "__repr__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_10Constraint_4__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_10Constraint_4__repr__.doc = __pyx_doc_7pyparma_3ppl_10Constraint_4__repr__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_10Constraint_4__repr__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Constraint", (PyObject *)&__pyx_type_7pyparma_3ppl_Constraint) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Constraint = &__pyx_type_7pyparma_3ppl_Constraint;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Constraint_System) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Constraint_System.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Constraint_System, "__len__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_20__len__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_20__len__.doc = __pyx_doc_7pyparma_3ppl_17Constraint_System_20__len__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_20__len__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Constraint_System, "__iter__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_22__iter__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_22__iter__.doc = __pyx_doc_7pyparma_3ppl_17Constraint_System_22__iter__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_22__iter__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Constraint_System, "__getitem__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_24__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_24__getitem__.doc = __pyx_doc_7pyparma_3ppl_17Constraint_System_24__getitem__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_24__getitem__;
    }
  }
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Constraint_System, "__repr__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_26__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_26__repr__.doc = __pyx_doc_7pyparma_3ppl_17Constraint_System_26__repr__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Constraint_System_26__repr__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Constraint_System", (PyObject *)&__pyx_type_7pyparma_3ppl_Constraint_System) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Constraint_System = &__pyx_type_7pyparma_3ppl_Constraint_System;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Constraint_System_iterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Constraint_System_iterator.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Constraint_System_iterator, "__next__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_26Constraint_System_iterator_4__next__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_26Constraint_System_iterator_4__next__.doc = __pyx_doc_7pyparma_3ppl_26Constraint_System_iterator_4__next__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_26Constraint_System_iterator_4__next__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Constraint_System_iterator", (PyObject *)&__pyx_type_7pyparma_3ppl_Constraint_System_iterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Constraint_System_iterator = &__pyx_type_7pyparma_3ppl_Constraint_System_iterator;
  __pyx_vtabptr_7pyparma_3ppl_Polyhedron = &__pyx_vtable_7pyparma_3ppl_Polyhedron;
  __pyx_vtable_7pyparma_3ppl_Polyhedron._relation_with_generator = (PyObject *(*)(struct __pyx_obj_7pyparma_3ppl_Polyhedron *, struct __pyx_obj_7pyparma_3ppl_Generator *))__pyx_f_7pyparma_3ppl_10Polyhedron__relation_with_generator;
  __pyx_vtable_7pyparma_3ppl_Polyhedron._relation_with_constraint = (PyObject *(*)(struct __pyx_obj_7pyparma_3ppl_Polyhedron *, struct __pyx_obj_7pyparma_3ppl_Constraint *))__pyx_f_7pyparma_3ppl_10Polyhedron__relation_with_constraint;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Polyhedron) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Polyhedron.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Polyhedron, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_10Polyhedron___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_10Polyhedron___init__.doc = __pyx_doc_7pyparma_3ppl_10Polyhedron___init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_10Polyhedron___init__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_type_7pyparma_3ppl_Polyhedron.tp_dict, __pyx_vtabptr_7pyparma_3ppl_Polyhedron) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "Polyhedron", (PyObject *)&__pyx_type_7pyparma_3ppl_Polyhedron) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Polyhedron = &__pyx_type_7pyparma_3ppl_Polyhedron;
  __pyx_vtabptr_7pyparma_3ppl_C_Polyhedron = &__pyx_vtable_7pyparma_3ppl_C_Polyhedron;
  __pyx_vtable_7pyparma_3ppl_C_Polyhedron.__pyx_base = *__pyx_vtabptr_7pyparma_3ppl_Polyhedron;
  __pyx_type_7pyparma_3ppl_C_Polyhedron.tp_base = __pyx_ptype_7pyparma_3ppl_Polyhedron;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_C_Polyhedron) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2055; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_C_Polyhedron.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_C_Polyhedron, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2055; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_12C_Polyhedron_2__init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_12C_Polyhedron_2__init__.doc = __pyx_doc_7pyparma_3ppl_12C_Polyhedron_2__init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_12C_Polyhedron_2__init__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_type_7pyparma_3ppl_C_Polyhedron.tp_dict, __pyx_vtabptr_7pyparma_3ppl_C_Polyhedron) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2055; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "C_Polyhedron", (PyObject *)&__pyx_type_7pyparma_3ppl_C_Polyhedron) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2055; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_C_Polyhedron = &__pyx_type_7pyparma_3ppl_C_Polyhedron;
  __pyx_vtabptr_7pyparma_3ppl_NNC_Polyhedron = &__pyx_vtable_7pyparma_3ppl_NNC_Polyhedron;
  __pyx_vtable_7pyparma_3ppl_NNC_Polyhedron.__pyx_base = *__pyx_vtabptr_7pyparma_3ppl_Polyhedron;
  __pyx_type_7pyparma_3ppl_NNC_Polyhedron.tp_base = __pyx_ptype_7pyparma_3ppl_Polyhedron;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_NNC_Polyhedron) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_NNC_Polyhedron.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_NNC_Polyhedron, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_14NNC_Polyhedron_2__init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_14NNC_Polyhedron_2__init__.doc = __pyx_doc_7pyparma_3ppl_14NNC_Polyhedron_2__init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_14NNC_Polyhedron_2__init__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_type_7pyparma_3ppl_NNC_Polyhedron.tp_dict, __pyx_vtabptr_7pyparma_3ppl_NNC_Polyhedron) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "NNC_Polyhedron", (PyObject *)&__pyx_type_7pyparma_3ppl_NNC_Polyhedron) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_NNC_Polyhedron = &__pyx_type_7pyparma_3ppl_NNC_Polyhedron;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Poly_Gen_Relation) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Poly_Gen_Relation.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Poly_Gen_Relation, "__repr__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Poly_Gen_Relation_14__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Poly_Gen_Relation_14__repr__.doc = __pyx_doc_7pyparma_3ppl_17Poly_Gen_Relation_14__repr__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Poly_Gen_Relation_14__repr__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Poly_Gen_Relation", (PyObject *)&__pyx_type_7pyparma_3ppl_Poly_Gen_Relation) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation = &__pyx_type_7pyparma_3ppl_Poly_Gen_Relation;
  if (PyType_Ready(&__pyx_type_7pyparma_3ppl_Poly_Con_Relation) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_type_7pyparma_3ppl_Poly_Con_Relation.tp_print = 0;
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_7pyparma_3ppl_Poly_Con_Relation, "__repr__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyparma_3ppl_17Poly_Con_Relation_20__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyparma_3ppl_17Poly_Con_Relation_20__repr__.doc = __pyx_doc_7pyparma_3ppl_17Poly_Con_Relation_20__repr__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyparma_3ppl_17Poly_Con_Relation_20__repr__;
    }
  }
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "Poly_Con_Relation", (PyObject *)&__pyx_type_7pyparma_3ppl_Poly_Con_Relation) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7pyparma_3ppl_Poly_Con_Relation = &__pyx_type_7pyparma_3ppl_Poly_Con_Relation;
  /*--- Type import code ---*/
  /*--- Variable import code ---*/
  /*--- Function import code ---*/
  __pyx_t_1 = __Pyx_ImportModule("pyparma.pylong"); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_ImportFunction(__pyx_t_1, "mpz_get_pyintlong", (void (**)(void))&__pyx_f_7pyparma_6pylong_mpz_get_pyintlong, "PyObject *(mpz_srcptr)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_ImportFunction(__pyx_t_1, "mpz_set_pyintlong", (void (**)(void))&__pyx_f_7pyparma_6pylong_mpz_set_pyintlong, "int (mpz_ptr, PyObject *)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  /*--- Execution code ---*/

  /* "pyparma/ppl.pyx":1
 * import sys             # <<<<<<<<<<<<<<
 * from libcpp cimport bool as cppbool
 * from cpython.int cimport PyInt_AS_LONG, PyInt_Check
 */
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":23
 * 
 * # but with PPL's rounding the gsl will be very unhappy; must turn off!
 * restore_pre_PPL_rounding()             # <<<<<<<<<<<<<<
 * 
 * # Cython does not support ctypedef within cppclass; Hack around this restriction:
 */
  Parma_Polyhedra_Library::restore_pre_PPL_rounding();

  /* "pyparma/ppl.pyx":1582
 * 
 * 
 *     upper_bound_assign = poly_hull_assign             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Polyhedron, __pyx_n_s_poly_hull_assign); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Polyhedron->tp_dict, __pyx_n_s_upper_bound_assign, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Polyhedron);

  /* "pyparma/ppl.pyx":1650
 * 
 * 
 *     difference_assign = poly_difference_assign             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Polyhedron, __pyx_n_s_poly_difference_assign); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Polyhedron->tp_dict, __pyx_n_s_difference_assign, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Polyhedron);

  /* "pyparma/ppl.pyx":3330
 * 
 *     @classmethod
 *     def line(cls, expression):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a line.
 */
  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Generator, __pyx_n_s_line_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);

  /* "pyparma/ppl.pyx":3329
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def line(cls, expression):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Generator->tp_dict, __pyx_n_s_line_2, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Generator);

  /* "pyparma/ppl.pyx":3375
 * 
 *     @classmethod
 *     def ray(cls, expression):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a ray.
 */
  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Generator, __pyx_n_s_ray_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);

  /* "pyparma/ppl.pyx":3374
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def ray(cls, expression):
 *         """
 */
  __pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Generator->tp_dict, __pyx_n_s_ray_2, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Generator);

  /* "pyparma/ppl.pyx":3420
 * 
 *     @classmethod
 *     def point(cls, expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a point.
 */
  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Generator, __pyx_n_s_point_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);

  /* "pyparma/ppl.pyx":3419
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def point(cls, expression=0, divisor=1):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Generator->tp_dict, __pyx_n_s_point_2, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Generator);

  /* "pyparma/ppl.pyx":3471
 * 
 *     @classmethod
 *     def closure_point(cls, expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *         """
 *         Construct a closure point.
 */
  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Generator, __pyx_n_s_closure_point_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);

  /* "pyparma/ppl.pyx":3470
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def closure_point(cls, expression=0, divisor=1):
 *         """
 */
  __pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Generator->tp_dict, __pyx_n_s_closure_point_2, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Generator);

  /* "pyparma/ppl.pyx":3925
 * 
 * ####################################################
 * def line(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a line.
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyparma_3ppl_1line, NULL, __pyx_n_s_pyparma_ppl); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3925; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_line_2, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3925; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3942
 * 
 * ####################################################
 * def ray(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a ray.
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyparma_3ppl_3ray, NULL, __pyx_n_s_pyparma_ppl); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ray_2, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3959
 * 
 * ####################################################
 * def point(expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a point.
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyparma_3ppl_5point, NULL, __pyx_n_s_pyparma_ppl); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_point_2, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":3976
 * 
 * ####################################################
 * def closure_point(expression=0, divisor=1):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a closure point.
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyparma_3ppl_7closure_point, NULL, __pyx_n_s_pyparma_ppl); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_closure_point_2, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":4902
 * 
 * ####################################################
 * def inequality(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct an inequality.
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyparma_3ppl_9inequality, NULL, __pyx_n_s_pyparma_ppl); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4902; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_inequality, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4902; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":4927
 * 
 * ####################################################
 * def strict_inequality(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct a strict inequality.
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyparma_3ppl_11strict_inequality, NULL, __pyx_n_s_pyparma_ppl); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_strict_inequality, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":4952
 * 
 * ####################################################
 * def equation(expression):             # <<<<<<<<<<<<<<
 *     """
 *     Constuct an equation.
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyparma_3ppl_13equation, NULL, __pyx_n_s_pyparma_ppl); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4952; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_equation, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4952; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyparma/ppl.pyx":5500
 * 
 *     @classmethod
 *     def nothing(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion that says nothing.
 */
  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation, __pyx_n_s_nothing); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);

  /* "pyparma/ppl.pyx":5499
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def nothing(cls):
 *         r"""
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation->tp_dict, __pyx_n_s_nothing, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation);

  /* "pyparma/ppl.pyx":5518
 * 
 *     @classmethod
 *     def subsumes(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "Adding the generator would not change
 */
  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation, __pyx_n_s_subsumes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);

  /* "pyparma/ppl.pyx":5517
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def subsumes(cls):
 *         r"""
 */
  __pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation->tp_dict, __pyx_n_s_subsumes, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Poly_Gen_Relation);

  /* "pyparma/ppl.pyx":5693
 * 
 *     @classmethod
 *     def nothing(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion that says nothing.
 */
  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation, __pyx_n_s_nothing); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);

  /* "pyparma/ppl.pyx":5692
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def nothing(cls):
 *         r"""
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation->tp_dict, __pyx_n_s_nothing, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation);

  /* "pyparma/ppl.pyx":5711
 * 
 *     @classmethod
 *     def is_disjoint(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "The polyhedron and the set of points
 */
  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation, __pyx_n_s_is_disjoint); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5711; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);

  /* "pyparma/ppl.pyx":5710
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def is_disjoint(cls):
 *         r"""
 */
  __pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation->tp_dict, __pyx_n_s_is_disjoint, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5711; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation);

  /* "pyparma/ppl.pyx":5730
 * 
 *     @classmethod
 *     def strictly_intersects(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "The polyhedron intersects the set of
 */
  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation, __pyx_n_s_strictly_intersects); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);

  /* "pyparma/ppl.pyx":5729
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def strictly_intersects(cls):
 *         r"""
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation->tp_dict, __pyx_n_s_strictly_intersects, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation);

  /* "pyparma/ppl.pyx":5750
 * 
 *     @classmethod
 *     def is_included(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "The polyhedron is included in the set of
 */
  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation, __pyx_n_s_is_included); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);

  /* "pyparma/ppl.pyx":5749
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def is_included(cls):
 *         r"""
 */
  __pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation->tp_dict, __pyx_n_s_is_included, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation);

  /* "pyparma/ppl.pyx":5769
 * 
 *     @classmethod
 *     def saturates(cls):             # <<<<<<<<<<<<<<
 *         r"""
 *         Return the assertion "".
 */
  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation, __pyx_n_s_saturates); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);

  /* "pyparma/ppl.pyx":5768
 * 
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def saturates(cls):
 *         r"""
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation->tp_dict, __pyx_n_s_saturates, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_7pyparma_3ppl_Poly_Con_Relation);

  /* "pyparma/ppl.pyx":1
 * import sys             # <<<<<<<<<<<<<<
 * from libcpp cimport bool as cppbool
 * from cpython.int cimport PyInt_AS_LONG, PyInt_Check
 */
  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  if (__pyx_m) {
    __Pyx_AddTraceback("init pyparma.ppl", __pyx_clineno, __pyx_lineno, __pyx_filename);
    Py_DECREF(__pyx_m); __pyx_m = 0;
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init pyparma.ppl");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if PY_MAJOR_VERSION < 3
  return;
  #else
  return __pyx_m;
  #endif
}

/* Runtime support code */
#if CYTHON_REFNANNY
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule((char *)modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif /* CYTHON_REFNANNY */

static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
    if (unlikely(!result)) {
        PyErr_Format(PyExc_NameError,
#if PY_MAJOR_VERSION >= 3
            "name '%U' is not defined", name);
#else
            "name '%.200s' is not defined", PyString_AS_STRING(name));
#endif
    }
    return result;
}

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

static CYTHON_INLINE int __Pyx_CheckKeywordStrings(
    PyObject *kwdict,
    const char* function_name,
    int kw_allowed)
{
    PyObject* key = 0;
    Py_ssize_t pos = 0;
#if CPYTHON_COMPILING_IN_PYPY
    if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0))
        goto invalid_keyword;
    return 1;
#else
    while (PyDict_Next(kwdict, &pos, &key, 0)) {
        #if PY_MAJOR_VERSION < 3
        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
        #endif
            if (unlikely(!PyUnicode_Check(key)))
                goto invalid_keyword_type;
    }
    if ((!kw_allowed) && unlikely(key))
        goto invalid_keyword;
    return 1;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%.200s() keywords must be strings", function_name);
    return 0;
#endif
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
    return 0;
}

static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    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);
#else
    PyErr_Restore(type, value, tb);
#endif
}
static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyThreadState *tstate = PyThreadState_GET();
    *type = tstate->curexc_type;
    *value = tstate->curexc_value;
    *tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
#else
    PyErr_Fetch(type, value, tb);
#endif
}

#if PY_MAJOR_VERSION < 3
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                        CYTHON_UNUSED PyObject *cause) {
    Py_XINCREF(type);
    if (!value || value == Py_None)
        value = NULL;
    else
        Py_INCREF(value);
    if (!tb || tb == Py_None)
        tb = NULL;
    else {
        Py_INCREF(tb);
        if (!PyTraceBack_Check(tb)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: arg 3 must be a traceback or None");
            goto raise_error;
        }
    }
    #if PY_VERSION_HEX < 0x02050000
    if (PyClass_Check(type)) {
    #else
    if (PyType_Check(type)) {
    #endif
#if CYTHON_COMPILING_IN_PYPY
        if (!value) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
#endif
        PyErr_NormalizeException(&type, &value, &tb);
    } else {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        value = type;
        #if PY_VERSION_HEX < 0x02050000
        if (PyInstance_Check(type)) {
            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
            Py_INCREF(type);
        } else {
            type = 0;
            PyErr_SetString(PyExc_TypeError,
                "raise: exception must be an old-style class or instance");
            goto raise_error;
        }
        #else
        type = (PyObject*) Py_TYPE(type);
        Py_INCREF(type);
        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: exception class must be a subclass of BaseException");
            goto raise_error;
        }
        #endif
    }
    __Pyx_ErrRestore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}
#else /* Python 3+ */
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) {
                if (PyObject_IsSubclass(instance_class, type)) {
                    type = instance_class;
                } else {
                    instance_class = NULL;
                }
            }
        }
        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 PY_VERSION_HEX >= 0x03030000
    if (cause) {
#else
    if (cause && cause != Py_None) {
#endif
        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) {
        PyThreadState *tstate = PyThreadState_GET();
        PyObject* tmp_tb = tstate->curexc_traceback;
        if (tb != tmp_tb) {
            Py_INCREF(tb);
            tstate->curexc_traceback = tb;
            Py_XDECREF(tmp_tb);
        }
    }
bad:
    Py_XDECREF(owned_instance);
    return;
}
#endif

#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *result;
    ternaryfunc call = func->ob_type->tp_call;
    if (unlikely(!call))
        return PyObject_Call(func, arg, kw);
#if PY_VERSION_HEX >= 0x02060000
    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
        return NULL;
#endif
    result = (*call)(func, arg, kw);
#if PY_VERSION_HEX >= 0x02060000
    Py_LeaveRecursiveCall();
#endif
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyThreadState *tstate = PyThreadState_GET();
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
#else
    PyErr_GetExcInfo(type, value, tb);
#endif
}
static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    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;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#else
    PyErr_SetExcInfo(type, value, tb);
#endif
}

static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *local_type, *local_value, *local_tb;
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    local_type = tstate->curexc_type;
    local_value = tstate->curexc_value;
    local_tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
#else
    PyErr_Fetch(&local_type, &local_value, &local_tb);
#endif
    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
#if CYTHON_COMPILING_IN_CPYTHON
    if (unlikely(tstate->curexc_type))
#else
    if (unlikely(PyErr_Occurred()))
#endif
        goto bad;
    #if PY_MAJOR_VERSION >= 3
    if (local_tb) {
        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
            goto bad;
    }
    #endif
    Py_XINCREF(local_tb);
    Py_XINCREF(local_type);
    Py_XINCREF(local_value);
    *type = local_type;
    *value = local_value;
    *tb = local_tb;
#if CYTHON_COMPILING_IN_CPYTHON
    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;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#else
    PyErr_SetExcInfo(local_type, local_value, local_tb);
#endif
    return 0;
bad:
    *type = 0;
    *value = 0;
    *tb = 0;
    Py_XDECREF(local_type);
    Py_XDECREF(local_value);
    Py_XDECREF(local_tb);
    return -1;
}

static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (likely(PyObject_TypeCheck(obj, type)))
        return 1;
    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
                 Py_TYPE(obj)->tp_name, type->tp_name);
    return 0;
}

static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) {
    PyErr_Format(PyExc_TypeError,
        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
        name, type->tp_name, Py_TYPE(obj)->tp_name);
}
static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
    const char *name, int exact)
{
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (none_allowed && obj == Py_None) return 1;
    else if (exact) {
        if (likely(Py_TYPE(obj) == type)) return 1;
        #if PY_MAJOR_VERSION == 2
        else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
        #endif
    }
    else {
        if (likely(PyObject_TypeCheck(obj, type))) return 1;
    }
    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
    return 0;
}

static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
    PyObject *result;
#if CYTHON_COMPILING_IN_CPYTHON
    result = PyDict_GetItem(__pyx_d, name);
    if (result) {
        Py_INCREF(result);
    } else {
#else
    result = PyObject_GetItem(__pyx_d, name);
    if (!result) {
        PyErr_Clear();
#endif
        result = __Pyx_GetBuiltinName(name);
    }
    return result;
}

static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        #if PY_MAJOR_VERSION >= 3
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
        #else
        "%s() got multiple values for keyword argument '%s'", func_name,
        PyString_AsString(kw_name));
        #endif
}

static int __Pyx_ParseOptionalKeywords(
    PyObject *kwds,
    PyObject **argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject *key = 0, *value = 0;
    Py_ssize_t pos = 0;
    PyObject*** name;
    PyObject*** first_kw_arg = argnames + num_pos_args;
    while (PyDict_Next(kwds, &pos, &key, &value)) {
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            values[name-argnames] = value;
            continue;
        }
        name = first_kw_arg;
        #if PY_MAJOR_VERSION < 3
        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
            while (*name) {
                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
                        && _PyString_Eq(**name, key)) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    if ((**argname == key) || (
                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
                             && _PyString_Eq(**argname, key))) {
                        goto arg_passed_twice;
                    }
                    argname++;
                }
            }
        } else
        #endif
        if (likely(PyUnicode_Check(key))) {
            while (*name) {
                int cmp = (**name == key) ? 0 :
                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
                #endif
                    PyUnicode_Compare(**name, key);
                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                if (cmp == 0) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    int cmp = (**argname == key) ? 0 :
                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
                    #endif
                        PyUnicode_Compare(**argname, key);
                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                    if (cmp == 0) goto arg_passed_twice;
                    argname++;
                }
            }
        } else
            goto invalid_keyword_type;
        if (kwds2) {
            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
        } else {
            goto invalid_keyword;
        }
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, key);
    goto bad;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%.200s() keywords must be strings", function_name);
    goto bad;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
bad:
    return -1;
}

static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) {
    PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
}

static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY
    return PyObject_RichCompareBool(s1, s2, equals);
#else
    if (s1 == s2) {
        return (equals == Py_EQ);
    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
        const char *ps1, *ps2;
        Py_ssize_t length = PyBytes_GET_SIZE(s1);
        if (length != PyBytes_GET_SIZE(s2))
            return (equals == Py_NE);
        ps1 = PyBytes_AS_STRING(s1);
        ps2 = PyBytes_AS_STRING(s2);
        if (ps1[0] != ps2[0]) {
            return (equals == Py_NE);
        } else if (length == 1) {
            return (equals == Py_EQ);
        } else {
            int result = 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
}

static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY
    return PyObject_RichCompareBool(s1, s2, equals);
#else
#if PY_MAJOR_VERSION < 3
    PyObject* owned_ref = NULL;
#endif
    int s1_is_unicode, s2_is_unicode;
    if (s1 == s2) {
        goto return_eq;
    }
    s1_is_unicode = PyUnicode_CheckExact(s1);
    s2_is_unicode = PyUnicode_CheckExact(s2);
#if PY_MAJOR_VERSION < 3
    if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
        owned_ref = PyUnicode_FromObject(s2);
        if (unlikely(!owned_ref))
            return -1;
        s2 = owned_ref;
        s2_is_unicode = 1;
    } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
        owned_ref = PyUnicode_FromObject(s1);
        if (unlikely(!owned_ref))
            return -1;
        s1 = owned_ref;
        s1_is_unicode = 1;
    } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
        return __Pyx_PyBytes_Equals(s1, s2, equals);
    }
#endif
    if (s1_is_unicode & s2_is_unicode) {
        Py_ssize_t length;
        int kind;
        void *data1, *data2;
        #if CYTHON_PEP393_ENABLED
        if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0))
            return -1;
        #endif
        length = __Pyx_PyUnicode_GET_LENGTH(s1);
        if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
            goto return_ne;
        }
        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, length * kind);
            #if PY_MAJOR_VERSION < 3
            Py_XDECREF(owned_ref);
            #endif
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & s2_is_unicode) {
        goto return_ne;
    } else if ((s2 == Py_None) & s1_is_unicode) {
        goto return_ne;
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
return_eq:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(owned_ref);
    #endif
    return (equals == Py_EQ);
return_ne:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(owned_ref);
    #endif
    return (equals == Py_NE);
#endif
}

static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (!j) return NULL;
    r = PyObject_GetItem(o, j);
    Py_DECREF(j);
    return r;
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck) {
#if CYTHON_COMPILING_IN_CPYTHON
    if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
    if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
        PyObject *r = PyList_GET_ITEM(o, i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck) {
#if CYTHON_COMPILING_IN_CPYTHON
    if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
    if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
        PyObject *r = PyTuple_GET_ITEM(o, i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                     int is_list, int wraparound, int boundscheck) {
#if CYTHON_COMPILING_IN_CPYTHON
    if (is_list || PyList_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
            PyObject *r = PyList_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    }
    else if (PyTuple_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
            PyObject *r = PyTuple_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    } else {
        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
        if (likely(m && m->sq_item)) {
            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
                Py_ssize_t l = m->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
                        PyErr_Clear();
                    else
                        return NULL;
                }
            }
            return m->sq_item(o, i);
        }
    }
#else
    if (is_list || PySequence_Check(o)) {
        return PySequence_GetItem(o, i);
    }
#endif
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
}

static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
                                  int full_traceback) {
    PyObject *old_exc, *old_val, *old_tb;
    PyObject *ctx;
    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
    if (full_traceback) {
        Py_XINCREF(old_exc);
        Py_XINCREF(old_val);
        Py_XINCREF(old_tb);
        __Pyx_ErrRestore(old_exc, old_val, old_tb);
        PyErr_PrintEx(1);
    }
    #if PY_MAJOR_VERSION < 3
    ctx = PyString_FromString(name);
    #else
    ctx = PyUnicode_FromString(name);
    #endif
    __Pyx_ErrRestore(old_exc, old_val, old_tb);
    if (!ctx) {
        PyErr_WriteUnraisable(Py_None);
    } else {
        PyErr_WriteUnraisable(ctx);
        Py_DECREF(ctx);
    }
}

#if !CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values) {
    return PyObject_CallMethodObjArgs(sep, __pyx_n_s_join, values, NULL);
}
#endif

static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
    if (!ob)
        goto bad;
    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) {
    PyObject *result;
    result = __Pyx_PyObject_GetAttrStr(nmspace, name);
    if (!result)
        result = __Pyx_GetModuleGlobalName(name);
    return result;
}

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    #if PY_VERSION_HEX < 0x03030000
    PyObject *py_import;
    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
    if (!py_import)
        goto bad;
    #endif
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    #if PY_VERSION_HEX >= 0x02050000
    {
        #if PY_MAJOR_VERSION >= 3
        if (level == -1) {
            if (strchr(__Pyx_MODULE_NAME, '.')) {
                #if PY_VERSION_HEX < 0x03030000
                PyObject *py_level = PyInt_FromLong(1);
                if (!py_level)
                    goto bad;
                module = PyObject_CallFunctionObjArgs(py_import,
                    name, global_dict, empty_dict, list, py_level, NULL);
                Py_DECREF(py_level);
                #else
                module = PyImport_ImportModuleLevelObject(
                    name, global_dict, empty_dict, list, 1);
                #endif
                if (!module) {
                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
                        goto bad;
                    PyErr_Clear();
                }
            }
            level = 0; /* try absolute import on failure */
        }
        #endif
        if (!module) {
            #if PY_VERSION_HEX < 0x03030000
            PyObject *py_level = PyInt_FromLong(level);
            if (!py_level)
                goto bad;
            module = PyObject_CallFunctionObjArgs(py_import,
                name, global_dict, empty_dict, list, py_level, NULL);
            Py_DECREF(py_level);
            #else
            module = PyImport_ImportModuleLevelObject(
                name, global_dict, empty_dict, list, level);
            #endif
        }
    }
    #else
    if (level>0) {
        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
        goto bad;
    }
    module = PyObject_CallFunctionObjArgs(py_import,
        name, global_dict, empty_dict, list, NULL);
    #endif
bad:
    #if PY_VERSION_HEX < 0x03030000
    Py_XDECREF(py_import);
    #endif
    Py_XDECREF(empty_list);
    Py_XDECREF(empty_dict);
    return module;
}

static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
    const int neg_one = (int) -1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(int) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(int) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
        } else if (sizeof(int) <= sizeof(unsigned long long)) {
            return PyLong_FromUnsignedLongLong((unsigned long long) value);
        }
    } else {
        if (sizeof(int) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(int) <= sizeof(long long)) {
            return PyLong_FromLongLong((long long) value);
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(int),
                                     little, !is_unsigned);
    }
}

#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func)             \
    {                                                                     \
        func_type value = func(x);                                        \
        if (sizeof(target_type) < sizeof(func_type)) {                    \
            if (unlikely(value != (func_type) (target_type) value)) {     \
                func_type zero = 0;                                       \
                PyErr_SetString(PyExc_OverflowError,                      \
                    (is_unsigned && unlikely(value < zero)) ?             \
                    "can't convert negative value to " #target_type :     \
                    "value too large to convert to " #target_type);       \
                return (target_type) -1;                                  \
            }                                                             \
        }                                                                 \
        return (target_type) value;                                       \
    }

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
  #include "longintrepr.h"
 #endif
#endif
static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
    const size_t neg_one = (size_t) -1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(size_t) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(size_t, long, PyInt_AS_LONG)
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to size_t");
                return (size_t) -1;
            }
            return (size_t) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(size_t)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (size_t) ((PyLongObject*)x)->ob_digit[0];
                }
            }
 #endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to size_t");
                return (size_t) -1;
            }
            if (sizeof(size_t) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT(size_t, unsigned long, PyLong_AsUnsignedLong)
            } else if (sizeof(size_t) <= sizeof(unsigned long long)) {
                __PYX_VERIFY_RETURN_INT(size_t, unsigned long long, PyLong_AsUnsignedLongLong)
            }
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(size_t)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(size_t) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(size_t) ((PyLongObject*)x)->ob_digit[0];
                }
            }
 #endif
#endif
            if (sizeof(size_t) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT(size_t, long, PyLong_AsLong)
            } else if (sizeof(size_t) <= sizeof(long long)) {
                __PYX_VERIFY_RETURN_INT(size_t, long long, PyLong_AsLongLong)
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            size_t val;
            PyObject *v = __Pyx_PyNumber_Int(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (size_t) -1;
        }
    } else {
        size_t val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (size_t) -1;
        val = __Pyx_PyInt_As_size_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
  #include "longintrepr.h"
 #endif
#endif
static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
    const int neg_one = (int) -1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(int) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG)
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to int");
                return (int) -1;
            }
            return (int) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(int)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (int) ((PyLongObject*)x)->ob_digit[0];
                }
            }
 #endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to int");
                return (int) -1;
            }
            if (sizeof(int) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong)
            } else if (sizeof(int) <= sizeof(unsigned long long)) {
                __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong)
            }
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(int)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(int) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(int) ((PyLongObject*)x)->ob_digit[0];
                }
            }
 #endif
#endif
            if (sizeof(int) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong)
            } else if (sizeof(int) <= sizeof(long long)) {
                __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong)
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            int val;
            PyObject *v = __Pyx_PyNumber_Int(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (int) -1;
        }
    } else {
        int val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (int) -1;
        val = __Pyx_PyInt_As_int(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE PyObject* __Pyx_PyInt_From_signed__long(signed long value) {
    const signed long neg_one = (signed long) -1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(signed long) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(signed long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
        } else if (sizeof(signed long) <= sizeof(unsigned long long)) {
            return PyLong_FromUnsignedLongLong((unsigned long long) value);
        }
    } else {
        if (sizeof(signed long) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(signed long) <= sizeof(long long)) {
            return PyLong_FromLongLong((long long) value);
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(signed long),
                                     little, !is_unsigned);
    }
}

static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
    const long neg_one = (long) -1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(long) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
        } else if (sizeof(long) <= sizeof(unsigned long long)) {
            return PyLong_FromUnsignedLongLong((unsigned long long) value);
        }
    } else {
        if (sizeof(long) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(long long)) {
            return PyLong_FromLongLong((long long) value);
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(long),
                                     little, !is_unsigned);
    }
}

#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
static PyObject *__Pyx_GetStdout(void) {
    PyObject *f = PySys_GetObject((char *)"stdout");
    if (!f) {
        PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
    }
    return f;
}
static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) {
    int i;
    if (!f) {
        if (!(f = __Pyx_GetStdout()))
            return -1;
    }
    Py_INCREF(f);
    for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) {
        PyObject* v;
        if (PyFile_SoftSpace(f, 1)) {
            if (PyFile_WriteString(" ", f) < 0)
                goto error;
        }
        v = PyTuple_GET_ITEM(arg_tuple, i);
        if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0)
            goto error;
        if (PyString_Check(v)) {
            char *s = PyString_AsString(v);
            Py_ssize_t len = PyString_Size(v);
            if (len > 0) {
                switch (s[len-1]) {
                    case ' ': break;
                    case '\f': case '\r': case '\n': case '\t': case '\v':
                        PyFile_SoftSpace(f, 0);
                        break;
                    default:  break;
                }
            }
        }
    }
    if (newline) {
        if (PyFile_WriteString("\n", f) < 0)
            goto error;
        PyFile_SoftSpace(f, 0);
    }
    Py_DECREF(f);
    return 0;
error:
    Py_DECREF(f);
    return -1;
}
#else /* Python 3 has a print function */
static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
    PyObject* kwargs = 0;
    PyObject* result = 0;
    PyObject* end_string;
    if (unlikely(!__pyx_print)) {
        __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print);
        if (!__pyx_print)
            return -1;
    }
    if (stream) {
        kwargs = PyDict_New();
        if (unlikely(!kwargs))
            return -1;
        if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0))
            goto bad;
        if (!newline) {
            end_string = PyUnicode_FromStringAndSize(" ", 1);
            if (unlikely(!end_string))
                goto bad;
            if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) {
                Py_DECREF(end_string);
                goto bad;
            }
            Py_DECREF(end_string);
        }
    } else if (!newline) {
        if (unlikely(!__pyx_print_kwargs)) {
            __pyx_print_kwargs = PyDict_New();
            if (unlikely(!__pyx_print_kwargs))
                return -1;
            end_string = PyUnicode_FromStringAndSize(" ", 1);
            if (unlikely(!end_string))
                return -1;
            if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) {
                Py_DECREF(end_string);
                return -1;
            }
            Py_DECREF(end_string);
        }
        kwargs = __pyx_print_kwargs;
    }
    result = PyObject_Call(__pyx_print, arg_tuple, kwargs);
    if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs))
        Py_DECREF(kwargs);
    if (!result)
        return -1;
    Py_DECREF(result);
    return 0;
bad:
    if (kwargs != __pyx_print_kwargs)
        Py_XDECREF(kwargs);
    return -1;
}
#endif

#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
static int __Pyx_PrintOne(PyObject* f, PyObject *o) {
    if (!f) {
        if (!(f = __Pyx_GetStdout()))
            return -1;
    }
    Py_INCREF(f);
    if (PyFile_SoftSpace(f, 0)) {
        if (PyFile_WriteString(" ", f) < 0)
            goto error;
    }
    if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0)
        goto error;
    if (PyFile_WriteString("\n", f) < 0)
        goto error;
    Py_DECREF(f);
    return 0;
error:
    Py_DECREF(f);
    return -1;
    /* the line below is just to avoid C compiler
     * warnings about unused functions */
    return __Pyx_Print(f, NULL, 0);
}
#else /* Python 3 has a print function */
static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
    int res;
    PyObject* arg_tuple = PyTuple_Pack(1, o);
    if (unlikely(!arg_tuple))
        return -1;
    res = __Pyx_Print(stream, arg_tuple, 1);
    Py_DECREF(arg_tuple);
    return res;
}
#endif

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
  #include "longintrepr.h"
 #endif
#endif
static CYTHON_INLINE signed long __Pyx_PyInt_As_signed__long(PyObject *x) {
    const signed long neg_one = (signed long) -1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(signed long) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(signed long, long, PyInt_AS_LONG)
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to signed long");
                return (signed long) -1;
            }
            return (signed long) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(signed long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (signed long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
 #endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to signed long");
                return (signed long) -1;
            }
            if (sizeof(signed long) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT(signed long, unsigned long, PyLong_AsUnsignedLong)
            } else if (sizeof(signed long) <= sizeof(unsigned long long)) {
                __PYX_VERIFY_RETURN_INT(signed long, unsigned long long, PyLong_AsUnsignedLongLong)
            }
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(signed long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(signed long) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
 #endif
#endif
            if (sizeof(signed long) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT(signed long, long, PyLong_AsLong)
            } else if (sizeof(signed long) <= sizeof(long long)) {
                __PYX_VERIFY_RETURN_INT(signed long, long long, PyLong_AsLongLong)
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            signed long val;
            PyObject *v = __Pyx_PyNumber_Int(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (signed long) -1;
        }
    } else {
        signed long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (signed long) -1;
        val = __Pyx_PyInt_As_signed__long(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
#if CYTHON_COMPILING_IN_PYPY
    if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) { /* cdef classes */
        return PyClassMethod_New(method);
    }
#else
    static PyTypeObject *methoddescr_type = NULL;
    if (methoddescr_type == NULL) {
       PyObject *meth = __Pyx_GetAttrString((PyObject*)&PyList_Type, "append");
       if (!meth) return NULL;
       methoddescr_type = Py_TYPE(meth);
       Py_DECREF(meth);
    }
    if (PyObject_TypeCheck(method, methoddescr_type)) { /* cdef classes */
        PyMethodDescrObject *descr = (PyMethodDescrObject *)method;
        #if PY_VERSION_HEX < 0x03020000
        PyTypeObject *d_type = descr->d_type;
        #else
        PyTypeObject *d_type = descr->d_common.d_type;
        #endif
        return PyDescr_NewClassMethod(d_type, descr->d_method);
    }
#endif
    else if (PyMethod_Check(method)) { /* python classes */
        return PyClassMethod_New(PyMethod_GET_FUNCTION(method));
    }
    else if (PyCFunction_Check(method)) {
        return PyClassMethod_New(method);
    }
#ifdef __Pyx_CyFunction_USED
    else if (PyObject_TypeCheck(method, __pyx_CyFunctionType)) {
        return PyClassMethod_New(method);
    }
#endif
    PyErr_SetString(PyExc_TypeError,
                   "Class-level classmethod() can only be called on "
                   "a method_descriptor or instance method.");
    return NULL;
}

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
  #include "longintrepr.h"
 #endif
#endif
static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
    const long neg_one = (long) -1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(long) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG)
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to long");
                return (long) -1;
            }
            return (long) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
 #endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to long");
                return (long) -1;
            }
            if (sizeof(long) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong)
            } else if (sizeof(long) <= sizeof(unsigned long long)) {
                __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong)
            }
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(long) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
 #endif
#endif
            if (sizeof(long) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong)
            } else if (sizeof(long) <= sizeof(long long)) {
                __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong)
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            long val;
            PyObject *v = __Pyx_PyNumber_Int(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (long) -1;
        }
    } else {
        long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (long) -1;
        val = __Pyx_PyInt_As_long(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static int __Pyx_check_binary_version(void) {
    char ctversion[4], rtversion[4];
    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
        char message[200];
        PyOS_snprintf(message, sizeof(message),
                      "compiletime version %s of module '%.100s' "
                      "does not match runtime version %s",
                      ctversion, __Pyx_MODULE_NAME, rtversion);
        #if PY_VERSION_HEX < 0x02050000
        return PyErr_Warn(NULL, message);
        #else
        return PyErr_WarnEx(NULL, message, 1);
        #endif
    }
    return 0;
}

#ifndef __PYX_HAVE_RT_ImportModule
#define __PYX_HAVE_RT_ImportModule
static PyObject *__Pyx_ImportModule(const char *name) {
    PyObject *py_name = 0;
    PyObject *py_module = 0;
    py_name = __Pyx_PyIdentifier_FromString(name);
    if (!py_name)
        goto bad;
    py_module = PyImport_Import(py_name);
    Py_DECREF(py_name);
    return py_module;
bad:
    Py_XDECREF(py_name);
    return 0;
}
#endif

#ifndef __PYX_HAVE_RT_ImportFunction
#define __PYX_HAVE_RT_ImportFunction
static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    union {
        void (*fp)(void);
        void *p;
    } tmp;
    d = PyObject_GetAttrString(module, (char *)"__pyx_capi__");
    if (!d)
        goto bad;
    cobj = PyDict_GetItemString(d, funcname);
    if (!cobj) {
        PyErr_Format(PyExc_ImportError,
            "%.200s does not export expected C function %.200s",
                PyModule_GetName(module), funcname);
        goto bad;
    }
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3 && PY_MINOR_VERSION==0)
    if (!PyCapsule_IsValid(cobj, sig)) {
        PyErr_Format(PyExc_TypeError,
            "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj));
        goto bad;
    }
    tmp.p = PyCapsule_GetPointer(cobj, sig);
#else
    {const char *desc, *s1, *s2;
    desc = (const char *)PyCObject_GetDesc(cobj);
    if (!desc)
        goto bad;
    s1 = desc; s2 = sig;
    while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
    if (*s1 != *s2) {
        PyErr_Format(PyExc_TypeError,
            "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), funcname, sig, desc);
        goto bad;
    }
    tmp.p = PyCObject_AsVoidPtr(cobj);}
#endif
    *f = tmp.fp;
    if (!(*f))
        goto bad;
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(d);
    return -1;
}
#endif

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) / 2;
        if (code_line < entries[mid].code_line) {
            end = mid;
        } else if (code_line > entries[mid].code_line) {
             start = mid + 1;
        } else {
            return mid;
        }
    }
    if (code_line <= entries[mid].code_line) {
        return mid;
    } else {
        return mid + 1;
    }
}
static PyCodeObject *__pyx_find_code_object(int code_line) {
    PyCodeObject* code_object;
    int pos;
    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
        return NULL;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
        return NULL;
    }
    code_object = __pyx_code_cache.entries[pos].code_object;
    Py_INCREF(code_object);
    return code_object;
}
static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
    int pos, i;
    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
    if (unlikely(!code_line)) {
        return;
    }
    if (unlikely(!entries)) {
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
        if (likely(entries)) {
            __pyx_code_cache.entries = entries;
            __pyx_code_cache.max_count = 64;
            __pyx_code_cache.count = 1;
            entries[0].code_line = code_line;
            entries[0].code_object = code_object;
            Py_INCREF(code_object);
        }
        return;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
        PyCodeObject* tmp = entries[pos].code_object;
        entries[pos].code_object = code_object;
        Py_DECREF(tmp);
        return;
    }
    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
        int new_max = __pyx_code_cache.max_count + 64;
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
        if (unlikely(!entries)) {
            return;
        }
        __pyx_code_cache.entries = entries;
        __pyx_code_cache.max_count = new_max;
    }
    for (i=__pyx_code_cache.count; i>pos; i--) {
        entries[i] = entries[i-1];
    }
    entries[pos].code_line = code_line;
    entries[pos].code_object = code_object;
    __pyx_code_cache.count++;
    Py_INCREF(code_object);
}

#include "compile.h"
#include "frameobject.h"
#include "traceback.h"
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
            const char *funcname, int c_line,
            int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyObject *py_srcfile = 0;
    PyObject *py_funcname = 0;
    #if PY_MAJOR_VERSION < 3
    py_srcfile = PyString_FromString(filename);
    #else
    py_srcfile = PyUnicode_FromString(filename);
    #endif
    if (!py_srcfile) goto bad;
    if (c_line) {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #else
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #endif
    }
    else {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromString(funcname);
        #else
        py_funcname = PyUnicode_FromString(funcname);
        #endif
    }
    if (!py_funcname) goto bad;
    py_code = __Pyx_PyCode_New(
        0,            /*int argcount,*/
        0,            /*int kwonlyargcount,*/
        0,            /*int nlocals,*/
        0,            /*int stacksize,*/
        0,            /*int flags,*/
        __pyx_empty_bytes, /*PyObject *code,*/
        __pyx_empty_tuple, /*PyObject *consts,*/
        __pyx_empty_tuple, /*PyObject *names,*/
        __pyx_empty_tuple, /*PyObject *varnames,*/
        __pyx_empty_tuple, /*PyObject *freevars,*/
        __pyx_empty_tuple, /*PyObject *cellvars,*/
        py_srcfile,   /*PyObject *filename,*/
        py_funcname,  /*PyObject *name,*/
        py_line,      /*int firstlineno,*/
        __pyx_empty_bytes  /*PyObject *lnotab*/
    );
    Py_DECREF(py_srcfile);
    Py_DECREF(py_funcname);
    return py_code;
bad:
    Py_XDECREF(py_srcfile);
    Py_XDECREF(py_funcname);
    return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyObject *py_globals = 0;
    PyFrameObject *py_frame = 0;
    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
    if (!py_code) {
        py_code = __Pyx_CreateCodeObjectForTraceback(
            funcname, c_line, py_line, filename);
        if (!py_code) goto bad;
        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
    }
    py_globals = PyModule_GetDict(__pyx_m);
    if (!py_globals) goto bad;
    py_frame = PyFrame_New(
        PyThreadState_GET(), /*PyThreadState *tstate,*/
        py_code,             /*PyCodeObject *code,*/
        py_globals,          /*PyObject *globals,*/
        0                    /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    py_frame->f_lineno = py_line;
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        #if PY_MAJOR_VERSION < 3
        if (t->is_unicode) {
            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
        } else if (t->intern) {
            *t->p = PyString_InternFromString(t->s);
        } else {
            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
        }
        #else  /* Python 3+ has unicode identifiers */
        if (t->is_unicode | t->is_str) {
            if (t->intern) {
                *t->p = PyUnicode_InternFromString(t->s);
            } else if (t->encoding) {
                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
            } else {
                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
            }
        } else {
            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
        }
        #endif
        if (!*t->p)
            return -1;
        ++t;
    }
    return 0;
}

static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
    return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str));
}
static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
    Py_ssize_t ignore;
    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
}
static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
    if (
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
            __Pyx_sys_getdefaultencoding_not_ascii &&
#endif
            PyUnicode_Check(o)) {
#if PY_VERSION_HEX < 0x03030000
        char* defenc_c;
        PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
        if (!defenc) return NULL;
        defenc_c = PyBytes_AS_STRING(defenc);
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        {
            char* end = defenc_c + PyBytes_GET_SIZE(defenc);
            char* c;
            for (c = defenc_c; c < end; c++) {
                if ((unsigned char) (*c) >= 128) {
                    PyUnicode_AsASCIIString(o);
                    return NULL;
                }
            }
        }
#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/
        *length = PyBytes_GET_SIZE(defenc);
        return defenc_c;
#else /* PY_VERSION_HEX < 0x03030000 */
        if (PyUnicode_READY(o) == -1) return NULL;
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        if (PyUnicode_IS_ASCII(o)) {
            *length = PyUnicode_GET_LENGTH(o);
            return PyUnicode_AsUTF8(o);
        } else {
            PyUnicode_AsASCIIString(o);
            return NULL;
        }
#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
        return PyUnicode_AsUTF8AndSize(o, length);
#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
#endif /* PY_VERSION_HEX < 0x03030000 */
    } else
#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII  || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */
#if !CYTHON_COMPILING_IN_PYPY
#if PY_VERSION_HEX >= 0x02060000
    if (PyByteArray_Check(o)) {
        *length = PyByteArray_GET_SIZE(o);
        return PyByteArray_AS_STRING(o);
    } else
#endif
#endif
    {
        char* result;
        int r = PyBytes_AsStringAndSize(o, &result, length);
        if (unlikely(r < 0)) {
            return NULL;
        } else {
            return result;
        }
    }
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
   int is_true = x == Py_True;
   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
   else return PyObject_IsTrue(x);
}
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
  PyNumberMethods *m;
  const char *name = NULL;
  PyObject *res = NULL;
#if PY_MAJOR_VERSION < 3
  if (PyInt_Check(x) || PyLong_Check(x))
#else
  if (PyLong_Check(x))
#endif
    return Py_INCREF(x), x;
  m = Py_TYPE(x)->tp_as_number;
#if PY_MAJOR_VERSION < 3
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Int(x);
  }
  else if (m && m->nb_long) {
    name = "long";
    res = PyNumber_Long(x);
  }
#else
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Long(x);
  }
#endif
  if (res) {
#if PY_MAJOR_VERSION < 3
    if (!PyInt_Check(res) && !PyLong_Check(res)) {
#else
    if (!PyLong_Check(res)) {
#endif
      PyErr_Format(PyExc_TypeError,
                   "__%.4s__ returned non-%.4s (type %.200s)",
                   name, name, Py_TYPE(res)->tp_name);
      Py_DECREF(res);
      return NULL;
    }
  }
  else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_TypeError,
                    "an integer is required");
  }
  return res;
}
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
 #if CYTHON_USE_PYLONG_INTERNALS
  #include "longintrepr.h"
 #endif
#endif
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  Py_ssize_t ival;
  PyObject *x;
#if PY_MAJOR_VERSION < 3
  if (likely(PyInt_CheckExact(b)))
      return PyInt_AS_LONG(b);
#endif
  if (likely(PyLong_CheckExact(b))) {
    #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
     #if CYTHON_USE_PYLONG_INTERNALS
       switch (Py_SIZE(b)) {
       case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0];
       case  0: return 0;
       case  1: return ((PyLongObject*)b)->ob_digit[0];
       }
     #endif
    #endif
  #if PY_VERSION_HEX < 0x02060000
    return PyInt_AsSsize_t(b);
  #else
    return PyLong_AsSsize_t(b);
  #endif
  }
  x = PyNumber_Index(b);
  if (!x) return -1;
  ival = PyInt_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
#if PY_VERSION_HEX < 0x02050000
   if (ival <= LONG_MAX)
       return PyInt_FromLong((long)ival);
   else {
       unsigned char *bytes = (unsigned char *) &ival;
       int one = 1; int little = (int)*(unsigned char*)&one;
       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
   }
#else
   return PyInt_FromSize_t(ival);
#endif
}


#endif /* Py_PYTHON_H */
