Home | History | Annotate | Download | only in Utility
      1 /*
      2  * General object operations and protocol implementations,
      3  * including their specialisations for certain builtins.
      4  *
      5  * Optional optimisations for builtins are in Optimize.c.
      6  *
      7  * Required replacements of builtins are in Builtins.c.
      8  */
      9 
     10 /////////////// RaiseNoneIterError.proto ///////////////
     11 
     12 static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
     13 
     14 /////////////// RaiseNoneIterError ///////////////
     15 
     16 static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
     17     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
     18 }
     19 
     20 /////////////// RaiseTooManyValuesToUnpack.proto ///////////////
     21 
     22 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
     23 
     24 /////////////// RaiseTooManyValuesToUnpack ///////////////
     25 
     26 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
     27     PyErr_Format(PyExc_ValueError,
     28                  "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
     29 }
     30 
     31 /////////////// RaiseNeedMoreValuesToUnpack.proto ///////////////
     32 
     33 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
     34 
     35 /////////////// RaiseNeedMoreValuesToUnpack ///////////////
     36 
     37 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
     38     PyErr_Format(PyExc_ValueError,
     39                  "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
     40                  index, (index == 1) ? "" : "s");
     41 }
     42 
     43 /////////////// UnpackTupleError.proto ///////////////
     44 
     45 static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/
     46 
     47 /////////////// UnpackTupleError ///////////////
     48 //@requires: RaiseNoneIterError
     49 //@requires: RaiseNeedMoreValuesToUnpack
     50 //@requires: RaiseTooManyValuesToUnpack
     51 
     52 static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
     53     if (t == Py_None) {
     54       __Pyx_RaiseNoneNotIterableError();
     55     } else if (PyTuple_GET_SIZE(t) < index) {
     56       __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t));
     57     } else {
     58       __Pyx_RaiseTooManyValuesError(index);
     59     }
     60 }
     61 
     62 /////////////// UnpackItemEndCheck.proto ///////////////
     63 
     64 static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
     65 
     66 /////////////// UnpackItemEndCheck ///////////////
     67 //@requires: RaiseTooManyValuesToUnpack
     68 //@requires: IterFinish
     69 
     70 static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
     71     if (unlikely(retval)) {
     72         Py_DECREF(retval);
     73         __Pyx_RaiseTooManyValuesError(expected);
     74         return -1;
     75     } else {
     76         return __Pyx_IterFinish();
     77     }
     78     return 0;
     79 }
     80 
     81 /////////////// UnpackTuple2.proto ///////////////
     82 
     83 static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** value1, PyObject** value2,
     84                                              int is_tuple, int has_known_size, int decref_tuple);
     85 
     86 /////////////// UnpackTuple2 ///////////////
     87 //@requires: UnpackItemEndCheck
     88 //@requires: UnpackTupleError
     89 //@requires: RaiseNeedMoreValuesToUnpack
     90 
     91 static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
     92                                              int is_tuple, int has_known_size, int decref_tuple) {
     93     Py_ssize_t index;
     94     PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
     95     if (!is_tuple && unlikely(!PyTuple_Check(tuple))) {
     96         iternextfunc iternext;
     97         iter = PyObject_GetIter(tuple);
     98         if (unlikely(!iter)) goto bad;
     99         if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
    100         iternext = Py_TYPE(iter)->tp_iternext;
    101         value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
    102         value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
    103         if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
    104         Py_DECREF(iter);
    105     } else {
    106         if (!has_known_size && unlikely(PyTuple_GET_SIZE(tuple) != 2)) {
    107             __Pyx_UnpackTupleError(tuple, 2);
    108             goto bad;
    109         }
    110 #if CYTHON_COMPILING_IN_PYPY
    111         value1 = PySequence_ITEM(tuple, 0);
    112         if (unlikely(!value1)) goto bad;
    113         value2 = PySequence_ITEM(tuple, 1);
    114         if (unlikely(!value2)) goto bad;
    115 #else
    116         value1 = PyTuple_GET_ITEM(tuple, 0);
    117         value2 = PyTuple_GET_ITEM(tuple, 1);
    118         Py_INCREF(value1);
    119         Py_INCREF(value2);
    120 #endif
    121         if (decref_tuple) { Py_DECREF(tuple); }
    122     }
    123     *pvalue1 = value1;
    124     *pvalue2 = value2;
    125     return 0;
    126 unpacking_failed:
    127     if (!has_known_size && __Pyx_IterFinish() == 0)
    128         __Pyx_RaiseNeedMoreValuesError(index);
    129 bad:
    130     Py_XDECREF(iter);
    131     Py_XDECREF(value1);
    132     Py_XDECREF(value2);
    133     if (decref_tuple) { Py_XDECREF(tuple); }
    134     return -1;
    135 }
    136 
    137 /////////////// IterNext.proto ///////////////
    138 
    139 #define __Pyx_PyIter_Next(obj) __Pyx_PyIter_Next2(obj, NULL)
    140 static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject *, PyObject *); /*proto*/
    141 
    142 /////////////// IterNext ///////////////
    143 
    144 // originally copied from Py3's builtin_next()
    145 static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject* iterator, PyObject* defval) {
    146     PyObject* next;
    147     iternextfunc iternext = Py_TYPE(iterator)->tp_iternext;
    148 #if CYTHON_COMPILING_IN_CPYTHON
    149     if (unlikely(!iternext)) {
    150 #else
    151     if (unlikely(!iternext) || unlikely(!PyIter_Check(iterator))) {
    152 #endif
    153         PyErr_Format(PyExc_TypeError,
    154             "%.200s object is not an iterator", Py_TYPE(iterator)->tp_name);
    155         return NULL;
    156     }
    157     next = iternext(iterator);
    158     if (likely(next))
    159         return next;
    160 #if CYTHON_COMPILING_IN_CPYTHON
    161 #if PY_VERSION_HEX >= 0x03010000 || (PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000)
    162     if (unlikely(iternext == &_PyObject_NextNotImplemented))
    163         return NULL;
    164 #endif
    165 #endif
    166     if (defval) {
    167         PyObject* exc_type = PyErr_Occurred();
    168         if (exc_type) {
    169             if (unlikely(exc_type != PyExc_StopIteration) &&
    170                     !PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))
    171                 return NULL;
    172             PyErr_Clear();
    173         }
    174         Py_INCREF(defval);
    175         return defval;
    176     }
    177     if (!PyErr_Occurred())
    178         PyErr_SetNone(PyExc_StopIteration);
    179     return NULL;
    180 }
    181 
    182 /////////////// IterFinish.proto ///////////////
    183 
    184 static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
    185 
    186 /////////////// IterFinish ///////////////
    187 
    188 // When PyIter_Next(iter) has returned NULL in order to signal termination,
    189 // this function does the right cleanup and returns 0 on success.  If it
    190 // detects an error that occurred in the iterator, it returns -1.
    191 
    192 static CYTHON_INLINE int __Pyx_IterFinish(void) {
    193 #if CYTHON_COMPILING_IN_CPYTHON
    194     PyThreadState *tstate = PyThreadState_GET();
    195     PyObject* exc_type = tstate->curexc_type;
    196     if (unlikely(exc_type)) {
    197         if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
    198             PyObject *exc_value, *exc_tb;
    199             exc_value = tstate->curexc_value;
    200             exc_tb = tstate->curexc_traceback;
    201             tstate->curexc_type = 0;
    202             tstate->curexc_value = 0;
    203             tstate->curexc_traceback = 0;
    204             Py_DECREF(exc_type);
    205             Py_XDECREF(exc_value);
    206             Py_XDECREF(exc_tb);
    207             return 0;
    208         } else {
    209             return -1;
    210         }
    211     }
    212     return 0;
    213 #else
    214     if (unlikely(PyErr_Occurred())) {
    215         if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
    216             PyErr_Clear();
    217             return 0;
    218         } else {
    219             return -1;
    220         }
    221     }
    222     return 0;
    223 #endif
    224 }
    225 
    226 /////////////// DictGetItem.proto ///////////////
    227 
    228 #if PY_MAJOR_VERSION >= 3
    229 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
    230     PyObject *value;
    231     value = PyDict_GetItemWithError(d, key);
    232     if (unlikely(!value)) {
    233         if (!PyErr_Occurred()) {
    234             PyObject* args = PyTuple_Pack(1, key);
    235             if (likely(args))
    236                 PyErr_SetObject(PyExc_KeyError, args);
    237             Py_XDECREF(args);
    238         }
    239         return NULL;
    240     }
    241     Py_INCREF(value);
    242     return value;
    243 }
    244 #else
    245     #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
    246 #endif
    247 
    248 /////////////// GetItemInt.proto ///////////////
    249 
    250 #define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
    251     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
    252     __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \
    253     (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \
    254                __Pyx_GetItemInt_Generic(o, to_py_func(i))))
    255 
    256 {{for type in ['List', 'Tuple']}}
    257 #define __Pyx_GetItemInt_{{type}}(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
    258     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
    259     __Pyx_GetItemInt_{{type}}_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
    260     (PyErr_SetString(PyExc_IndexError, "{{ type.lower() }} index out of range"), (PyObject*)NULL))
    261 
    262 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_{{type}}_Fast(PyObject *o, Py_ssize_t i,
    263                                                               int wraparound, int boundscheck);
    264 {{endfor}}
    265 
    266 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
    267 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
    268                                                      int is_list, int wraparound, int boundscheck);
    269 
    270 /////////////// GetItemInt ///////////////
    271 
    272 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    273     PyObject *r;
    274     if (!j) return NULL;
    275     r = PyObject_GetItem(o, j);
    276     Py_DECREF(j);
    277     return r;
    278 }
    279 
    280 {{for type in ['List', 'Tuple']}}
    281 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_{{type}}_Fast(PyObject *o, Py_ssize_t i,
    282                                                               int wraparound, int boundscheck) {
    283 #if CYTHON_COMPILING_IN_CPYTHON
    284     if (wraparound & unlikely(i < 0)) i += Py{{type}}_GET_SIZE(o);
    285     if ((!boundscheck) || likely((0 <= i) & (i < Py{{type}}_GET_SIZE(o)))) {
    286         PyObject *r = Py{{type}}_GET_ITEM(o, i);
    287         Py_INCREF(r);
    288         return r;
    289     }
    290     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
    291 #else
    292     return PySequence_GetItem(o, i);
    293 #endif
    294 }
    295 {{endfor}}
    296 
    297 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
    298                                                      int is_list, int wraparound, int boundscheck) {
    299 #if CYTHON_COMPILING_IN_CPYTHON
    300     if (is_list || PyList_CheckExact(o)) {
    301         Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
    302         if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
    303             PyObject *r = PyList_GET_ITEM(o, n);
    304             Py_INCREF(r);
    305             return r;
    306         }
    307     }
    308     else if (PyTuple_CheckExact(o)) {
    309         Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
    310         if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
    311             PyObject *r = PyTuple_GET_ITEM(o, n);
    312             Py_INCREF(r);
    313             return r;
    314         }
    315     } else {
    316         // inlined PySequence_GetItem() + special cased length overflow
    317         PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
    318         if (likely(m && m->sq_item)) {
    319             if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
    320                 Py_ssize_t l = m->sq_length(o);
    321                 if (likely(l >= 0)) {
    322                     i += l;
    323                 } else {
    324                     // if length > max(Py_ssize_t), maybe the object can wrap around itself?
    325                     if (PyErr_ExceptionMatches(PyExc_OverflowError))
    326                         PyErr_Clear();
    327                     else
    328                         return NULL;
    329                 }
    330             }
    331             return m->sq_item(o, i);
    332         }
    333     }
    334 #else
    335     if (is_list || PySequence_Check(o)) {
    336         return PySequence_GetItem(o, i);
    337     }
    338 #endif
    339     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
    340 }
    341 
    342 /////////////// SetItemInt.proto ///////////////
    343 
    344 #define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
    345     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
    346     __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) : \
    347     (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) : \
    348                __Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
    349 
    350 static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
    351 static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
    352                                                int is_list, int wraparound, int boundscheck);
    353 
    354 /////////////// SetItemInt ///////////////
    355 
    356 static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
    357     int r;
    358     if (!j) return -1;
    359     r = PyObject_SetItem(o, j, v);
    360     Py_DECREF(j);
    361     return r;
    362 }
    363 
    364 static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
    365                                                int is_list, int wraparound, int boundscheck) {
    366 #if CYTHON_COMPILING_IN_CPYTHON
    367     if (is_list || PyList_CheckExact(o)) {
    368         Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
    369         if ((!boundscheck) || likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
    370             PyObject* old = PyList_GET_ITEM(o, n);
    371             Py_INCREF(v);
    372             PyList_SET_ITEM(o, n, v);
    373             Py_DECREF(old);
    374             return 1;
    375         }
    376     } else {
    377         // inlined PySequence_SetItem() + special cased length overflow
    378         PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
    379         if (likely(m && m->sq_ass_item)) {
    380             if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
    381                 Py_ssize_t l = m->sq_length(o);
    382                 if (likely(l >= 0)) {
    383                     i += l;
    384                 } else {
    385                     // if length > max(Py_ssize_t), maybe the object can wrap around itself?
    386                     if (PyErr_ExceptionMatches(PyExc_OverflowError))
    387                         PyErr_Clear();
    388                     else
    389                         return -1;
    390                 }
    391             }
    392             return m->sq_ass_item(o, i, v);
    393         }
    394     }
    395 #else
    396 #if CYTHON_COMPILING_IN_PYPY
    397     if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) {
    398 #else
    399     if (is_list || PySequence_Check(o)) {
    400 #endif
    401         return PySequence_SetItem(o, i, v);
    402     }
    403 #endif
    404     return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
    405 }
    406 
    407 
    408 /////////////// DelItemInt.proto ///////////////
    409 
    410 #define __Pyx_DelItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
    411     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
    412     __Pyx_DelItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound) : \
    413     (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) : \
    414                __Pyx_DelItem_Generic(o, to_py_func(i))))
    415 
    416 static CYTHON_INLINE int __Pyx_DelItem_Generic(PyObject *o, PyObject *j);
    417 static CYTHON_INLINE int __Pyx_DelItemInt_Fast(PyObject *o, Py_ssize_t i,
    418                                                CYTHON_UNUSED int is_list, int wraparound);
    419 
    420 /////////////// DelItemInt ///////////////
    421 
    422 static CYTHON_INLINE int __Pyx_DelItem_Generic(PyObject *o, PyObject *j) {
    423     int r;
    424     if (!j) return -1;
    425     r = PyObject_DelItem(o, j);
    426     Py_DECREF(j);
    427     return r;
    428 }
    429 
    430 static CYTHON_INLINE int __Pyx_DelItemInt_Fast(PyObject *o, Py_ssize_t i,
    431                                                CYTHON_UNUSED int is_list, int wraparound) {
    432 #if CYTHON_COMPILING_IN_PYPY
    433     if (is_list || PySequence_Check(o)) {
    434         return PySequence_DelItem(o, i);
    435     }
    436 #else
    437     // inlined PySequence_DelItem() + special cased length overflow
    438     PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
    439     if (likely(m && m->sq_ass_item)) {
    440         if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
    441             Py_ssize_t l = m->sq_length(o);
    442             if (likely(l >= 0)) {
    443                 i += l;
    444             } else {
    445                 // if length > max(Py_ssize_t), maybe the object can wrap around itself?
    446                 if (PyErr_ExceptionMatches(PyExc_OverflowError))
    447                     PyErr_Clear();
    448                 else
    449                     return -1;
    450             }
    451         }
    452         return m->sq_ass_item(o, i, (PyObject *)NULL);
    453     }
    454 #endif
    455     return __Pyx_DelItem_Generic(o, PyInt_FromSsize_t(i));
    456 }
    457 
    458 
    459 /////////////// SliceObject.proto ///////////////
    460 
    461 // we pass pointer addresses to show the C compiler what is NULL and what isn't
    462 {{if access == 'Get'}}
    463 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
    464         PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
    465         PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
    466         int has_cstart, int has_cstop, int wraparound);
    467 {{else}}
    468 #define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) \
    469     __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)
    470 
    471 // we pass pointer addresses to show the C compiler what is NULL and what isn't
    472 static CYTHON_INLINE int __Pyx_PyObject_SetSlice(
    473         PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop,
    474         PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
    475         int has_cstart, int has_cstop, int wraparound);
    476 {{endif}}
    477 
    478 /////////////// SliceObject ///////////////
    479 
    480 {{if access == 'Get'}}
    481 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
    482         PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
    483 {{else}}
    484 static CYTHON_INLINE int __Pyx_PyObject_SetSlice(
    485         PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop,
    486 {{endif}}
    487         PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
    488         int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
    489 #if CYTHON_COMPILING_IN_CPYTHON
    490     PyMappingMethods* mp;
    491 #if PY_MAJOR_VERSION < 3
    492     PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
    493     if (likely(ms && ms->sq_{{if access == 'Set'}}ass_{{endif}}slice)) {
    494         if (!has_cstart) {
    495             if (_py_start && (*_py_start != Py_None)) {
    496                 cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
    497                 if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
    498             } else
    499                 cstart = 0;
    500         }
    501         if (!has_cstop) {
    502             if (_py_stop && (*_py_stop != Py_None)) {
    503                 cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
    504                 if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
    505             } else
    506                 cstop = PY_SSIZE_T_MAX;
    507         }
    508         if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
    509             Py_ssize_t l = ms->sq_length(obj);
    510             if (likely(l >= 0)) {
    511                 if (cstop < 0) {
    512                     cstop += l;
    513                     if (cstop < 0) cstop = 0;
    514                 }
    515                 if (cstart < 0) {
    516                     cstart += l;
    517                     if (cstart < 0) cstart = 0;
    518                 }
    519             } else {
    520                 // if length > max(Py_ssize_t), maybe the object can wrap around itself?
    521                 if (PyErr_ExceptionMatches(PyExc_OverflowError))
    522                     PyErr_Clear();
    523                 else
    524                     goto bad;
    525             }
    526         }
    527 {{if access == 'Get'}}
    528         return ms->sq_slice(obj, cstart, cstop);
    529 {{else}}
    530         return ms->sq_ass_slice(obj, cstart, cstop, value);
    531 {{endif}}
    532     }
    533 #endif
    534 
    535     mp = Py_TYPE(obj)->tp_as_mapping;
    536 {{if access == 'Get'}}
    537     if (likely(mp && mp->mp_subscript))
    538 {{else}}
    539     if (likely(mp && mp->mp_ass_subscript))
    540 {{endif}}
    541 #endif
    542     {
    543         {{if access == 'Get'}}PyObject*{{else}}int{{endif}} result;
    544         PyObject *py_slice, *py_start, *py_stop;
    545         if (_py_slice) {
    546             py_slice = *_py_slice;
    547         } else {
    548             PyObject* owned_start = NULL;
    549             PyObject* owned_stop = NULL;
    550             if (_py_start) {
    551                 py_start = *_py_start;
    552             } else {
    553                 if (has_cstart) {
    554                     owned_start = py_start = PyInt_FromSsize_t(cstart);
    555                     if (unlikely(!py_start)) goto bad;
    556                 } else
    557                     py_start = Py_None;
    558             }
    559             if (_py_stop) {
    560                 py_stop = *_py_stop;
    561             } else {
    562                 if (has_cstop) {
    563                     owned_stop = py_stop = PyInt_FromSsize_t(cstop);
    564                     if (unlikely(!py_stop)) {
    565                         Py_XDECREF(owned_start);
    566                         goto bad;
    567                     }
    568                 } else
    569                     py_stop = Py_None;
    570             }
    571             py_slice = PySlice_New(py_start, py_stop, Py_None);
    572             Py_XDECREF(owned_start);
    573             Py_XDECREF(owned_stop);
    574             if (unlikely(!py_slice)) goto bad;
    575         }
    576 #if CYTHON_COMPILING_IN_CPYTHON
    577 {{if access == 'Get'}}
    578         result = mp->mp_subscript(obj, py_slice);
    579 #else
    580         result = PyObject_GetItem(obj, py_slice);
    581 {{else}}
    582         result = mp->mp_ass_subscript(obj, py_slice, value);
    583 #else
    584         result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice);
    585 {{endif}}
    586 #endif
    587         if (!_py_slice) {
    588             Py_DECREF(py_slice);
    589         }
    590         return result;
    591     }
    592     PyErr_Format(PyExc_TypeError,
    593 {{if access == 'Get'}}
    594         "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name);
    595 {{else}}
    596         "'%.200s' object does not support slice %.10s",
    597         Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion");
    598 {{endif}}
    599 
    600 bad:
    601     return {{if access == 'Get'}}NULL{{else}}-1{{endif}};
    602 }
    603 
    604 
    605 /////////////// SliceTupleAndList.proto ///////////////
    606 
    607 #if CYTHON_COMPILING_IN_CPYTHON
    608 static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
    609 static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
    610 #else
    611 #define __Pyx_PyList_GetSlice(seq, start, stop)   PySequence_GetSlice(seq, start, stop)
    612 #define __Pyx_PyTuple_GetSlice(seq, start, stop)  PySequence_GetSlice(seq, start, stop)
    613 #endif
    614 
    615 /////////////// SliceTupleAndList ///////////////
    616 
    617 #if CYTHON_COMPILING_IN_CPYTHON
    618 static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) {
    619     Py_ssize_t start = *_start, stop = *_stop, length = *_length;
    620     if (start < 0) {
    621         start += length;
    622         if (start < 0)
    623             start = 0;
    624     }
    625 
    626     if (stop < 0)
    627         stop += length;
    628     else if (stop > length)
    629         stop = length;
    630 
    631     *_length = stop - start;
    632     *_start = start;
    633     *_stop = stop;
    634 }
    635 
    636 static CYTHON_INLINE void __Pyx_copy_object_array(PyObject** CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) {
    637     PyObject *v;
    638     Py_ssize_t i;
    639     for (i = 0; i < length; i++) {
    640         v = dest[i] = src[i];
    641         Py_INCREF(v);
    642     }
    643 }
    644 
    645 {{for type in ['List', 'Tuple']}}
    646 static CYTHON_INLINE PyObject* __Pyx_Py{{type}}_GetSlice(
    647             PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    648     PyObject* dest;
    649     Py_ssize_t length = Py{{type}}_GET_SIZE(src);
    650     __Pyx_crop_slice(&start, &stop, &length);
    651     if (unlikely(length <= 0))
    652         return Py{{type}}_New(0);
    653 
    654     dest = Py{{type}}_New(length);
    655     if (unlikely(!dest))
    656         return NULL;
    657     __Pyx_copy_object_array(
    658         ((Py{{type}}Object*)src)->ob_item + start,
    659         ((Py{{type}}Object*)dest)->ob_item,
    660         length);
    661     return dest;
    662 }
    663 {{endfor}}
    664 #endif
    665 
    666 
    667 /////////////// CalculateMetaclass.proto ///////////////
    668 
    669 static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);
    670 
    671 /////////////// CalculateMetaclass ///////////////
    672 
    673 static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
    674     Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
    675     for (i=0; i < nbases; i++) {
    676         PyTypeObject *tmptype;
    677         PyObject *tmp = PyTuple_GET_ITEM(bases, i);
    678         tmptype = Py_TYPE(tmp);
    679 #if PY_MAJOR_VERSION < 3
    680         if (tmptype == &PyClass_Type)
    681             continue;
    682 #endif
    683         if (!metaclass) {
    684             metaclass = tmptype;
    685             continue;
    686         }
    687         if (PyType_IsSubtype(metaclass, tmptype))
    688             continue;
    689         if (PyType_IsSubtype(tmptype, metaclass)) {
    690             metaclass = tmptype;
    691             continue;
    692         }
    693         // else:
    694         PyErr_SetString(PyExc_TypeError,
    695                         "metaclass conflict: "
    696                         "the metaclass of a derived class "
    697                         "must be a (non-strict) subclass "
    698                         "of the metaclasses of all its bases");
    699         return NULL;
    700     }
    701     if (!metaclass) {
    702 #if PY_MAJOR_VERSION < 3
    703         metaclass = &PyClass_Type;
    704 #else
    705         metaclass = &PyType_Type;
    706 #endif
    707     }
    708     // make owned reference
    709     Py_INCREF((PyObject*) metaclass);
    710     return (PyObject*) metaclass;
    711 }
    712 
    713 
    714 /////////////// FindInheritedMetaclass.proto ///////////////
    715 
    716 static PyObject *__Pyx_FindInheritedMetaclass(PyObject *bases); /*proto*/
    717 
    718 /////////////// FindInheritedMetaclass ///////////////
    719 //@requires: PyObjectGetAttrStr
    720 //@requires: CalculateMetaclass
    721 
    722 static PyObject *__Pyx_FindInheritedMetaclass(PyObject *bases) {
    723     PyObject *metaclass;
    724     if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
    725         PyTypeObject *metatype;
    726         PyObject *base = PyTuple_GET_ITEM(bases, 0);
    727 #if PY_MAJOR_VERSION < 3
    728         PyObject* basetype = __Pyx_PyObject_GetAttrStr(base, PYIDENT("__class__"));
    729         if (basetype) {
    730             metatype = (PyType_Check(basetype)) ? ((PyTypeObject*) basetype) : NULL;
    731         } else {
    732             PyErr_Clear();
    733             metatype = Py_TYPE(base);
    734             basetype = (PyObject*) metatype;
    735             Py_INCREF(basetype);
    736         }
    737 #else
    738         metatype = Py_TYPE(base);
    739 #endif
    740         metaclass = __Pyx_CalculateMetaclass(metatype, bases);
    741 #if PY_MAJOR_VERSION < 3
    742         Py_DECREF(basetype);
    743 #endif
    744     } else {
    745         // no bases => use default metaclass
    746 #if PY_MAJOR_VERSION < 3
    747         metaclass = (PyObject *) &PyClass_Type;
    748 #else
    749         metaclass = (PyObject *) &PyType_Type;
    750 #endif
    751         Py_INCREF(metaclass);
    752     }
    753     return metaclass;
    754 }
    755 
    756 /////////////// Py3MetaclassGet.proto ///////////////
    757 
    758 static PyObject *__Pyx_Py3MetaclassGet(PyObject *bases, PyObject *mkw); /*proto*/
    759 
    760 /////////////// Py3MetaclassGet ///////////////
    761 //@requires: FindInheritedMetaclass
    762 //@requires: CalculateMetaclass
    763 
    764 static PyObject *__Pyx_Py3MetaclassGet(PyObject *bases, PyObject *mkw) {
    765     PyObject *metaclass = PyDict_GetItem(mkw, PYIDENT("metaclass"));
    766     if (metaclass) {
    767         Py_INCREF(metaclass);
    768         if (PyDict_DelItem(mkw, PYIDENT("metaclass")) < 0) {
    769             Py_DECREF(metaclass);
    770             return NULL;
    771         }
    772         if (PyType_Check(metaclass)) {
    773             PyObject* orig = metaclass;
    774             metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
    775             Py_DECREF(orig);
    776         }
    777         return metaclass;
    778     }
    779     return __Pyx_FindInheritedMetaclass(bases);
    780 }
    781 
    782 /////////////// CreateClass.proto ///////////////
    783 
    784 static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
    785                                    PyObject *qualname, PyObject *modname); /*proto*/
    786 
    787 /////////////// CreateClass ///////////////
    788 //@requires: FindInheritedMetaclass
    789 //@requires: CalculateMetaclass
    790 
    791 static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
    792                                    PyObject *qualname, PyObject *modname) {
    793     PyObject *result;
    794     PyObject *metaclass;
    795 
    796     if (PyDict_SetItem(dict, PYIDENT("__module__"), modname) < 0)
    797         return NULL;
    798     if (PyDict_SetItem(dict, PYIDENT("__qualname__"), qualname) < 0)
    799         return NULL;
    800 
    801     /* Python2 __metaclass__ */
    802     metaclass = PyDict_GetItem(dict, PYIDENT("__metaclass__"));
    803     if (metaclass) {
    804         Py_INCREF(metaclass);
    805         if (PyType_Check(metaclass)) {
    806             PyObject* orig = metaclass;
    807             metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
    808             Py_DECREF(orig);
    809         }
    810     } else {
    811         metaclass = __Pyx_FindInheritedMetaclass(bases);
    812     }
    813     if (unlikely(!metaclass))
    814         return NULL;
    815     result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL);
    816     Py_DECREF(metaclass);
    817     return result;
    818 }
    819 
    820 /////////////// Py3ClassCreate.proto ///////////////
    821 
    822 static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
    823                                            PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/
    824 static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
    825                                       PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/
    826 
    827 /////////////// Py3ClassCreate ///////////////
    828 //@requires: PyObjectGetAttrStr
    829 //@requires: CalculateMetaclass
    830 
    831 static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
    832                                            PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
    833     PyObject *ns;
    834     if (metaclass) {
    835         PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, PYIDENT("__prepare__"));
    836         if (prep) {
    837             PyObject *pargs = PyTuple_Pack(2, name, bases);
    838             if (unlikely(!pargs)) {
    839                 Py_DECREF(prep);
    840                 return NULL;
    841             }
    842             ns = PyObject_Call(prep, pargs, mkw);
    843             Py_DECREF(prep);
    844             Py_DECREF(pargs);
    845         } else {
    846             if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
    847                 return NULL;
    848             PyErr_Clear();
    849             ns = PyDict_New();
    850         }
    851     } else {
    852         ns = PyDict_New();
    853     }
    854 
    855     if (unlikely(!ns))
    856         return NULL;
    857 
    858     /* Required here to emulate assignment order */
    859     if (unlikely(PyObject_SetItem(ns, PYIDENT("__module__"), modname) < 0)) goto bad;
    860     if (unlikely(PyObject_SetItem(ns, PYIDENT("__qualname__"), qualname) < 0)) goto bad;
    861     if (unlikely(doc && PyObject_SetItem(ns, PYIDENT("__doc__"), doc) < 0)) goto bad;
    862     return ns;
    863 bad:
    864     Py_DECREF(ns);
    865     return NULL;
    866 }
    867 
    868 static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
    869                                       PyObject *dict, PyObject *mkw,
    870                                       int calculate_metaclass, int allow_py2_metaclass) {
    871     PyObject *result, *margs;
    872     PyObject *owned_metaclass = NULL;
    873     if (allow_py2_metaclass) {
    874         /* honour Python2 __metaclass__ for backward compatibility */
    875         owned_metaclass = PyObject_GetItem(dict, PYIDENT("__metaclass__"));
    876         if (owned_metaclass) {
    877             metaclass = owned_metaclass;
    878         } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
    879             PyErr_Clear();
    880         } else {
    881             return NULL;
    882         }
    883     }
    884     if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
    885         metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
    886         Py_XDECREF(owned_metaclass);
    887         if (unlikely(!metaclass))
    888             return NULL;
    889         owned_metaclass = metaclass;
    890     }
    891     margs = PyTuple_Pack(3, name, bases, dict);
    892     if (unlikely(!margs)) {
    893         result = NULL;
    894     } else {
    895         result = PyObject_Call(metaclass, margs, mkw);
    896         Py_DECREF(margs);
    897     }
    898     Py_XDECREF(owned_metaclass);
    899     return result;
    900 }
    901 
    902 /////////////// ExtTypeTest.proto ///////////////
    903 
    904 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
    905 
    906 /////////////// ExtTypeTest ///////////////
    907 
    908 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    909     if (unlikely(!type)) {
    910         PyErr_SetString(PyExc_SystemError, "Missing type object");
    911         return 0;
    912     }
    913     if (likely(PyObject_TypeCheck(obj, type)))
    914         return 1;
    915     PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
    916                  Py_TYPE(obj)->tp_name, type->tp_name);
    917     return 0;
    918 }
    919 
    920 /////////////// CallableCheck.proto ///////////////
    921 
    922 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
    923 #define __Pyx_PyCallable_Check(obj)   ((obj)->ob_type->tp_call != NULL)
    924 #else
    925 #define __Pyx_PyCallable_Check(obj)   PyCallable_Check(obj)
    926 #endif
    927 
    928 /////////////// PyDictContains.proto ///////////////
    929 
    930 static CYTHON_INLINE int __Pyx_PyDict_Contains(PyObject* item, PyObject* dict, int eq) {
    931     int result = PyDict_Contains(dict, item);
    932     return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
    933 }
    934 
    935 /////////////// PySequenceContains.proto ///////////////
    936 
    937 static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) {
    938     int result = PySequence_Contains(seq, item);
    939     return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
    940 }
    941 
    942 /////////////// PyBoolOrNullFromLong.proto ///////////////
    943 
    944 static CYTHON_INLINE PyObject* __Pyx_PyBoolOrNull_FromLong(long b) {
    945     return unlikely(b < 0) ? NULL : __Pyx_PyBool_FromLong(b);
    946 }
    947 
    948 /////////////// GetBuiltinName.proto ///////////////
    949 
    950 static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/
    951 
    952 /////////////// GetBuiltinName ///////////////
    953 //@requires: PyObjectGetAttrStr
    954 //@substitute: naming
    955 
    956 static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    957     PyObject* result = __Pyx_PyObject_GetAttrStr($builtins_cname, name);
    958     if (unlikely(!result)) {
    959         PyErr_Format(PyExc_NameError,
    960 #if PY_MAJOR_VERSION >= 3
    961             "name '%U' is not defined", name);
    962 #else
    963             "name '%.200s' is not defined", PyString_AS_STRING(name));
    964 #endif
    965     }
    966     return result;
    967 }
    968 
    969 /////////////// GetNameInClass.proto ///////////////
    970 
    971 static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name); /*proto*/
    972 
    973 /////////////// GetNameInClass ///////////////
    974 //@requires: PyObjectGetAttrStr
    975 //@requires: GetModuleGlobalName
    976 
    977 static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) {
    978     PyObject *result;
    979     result = __Pyx_PyObject_GetAttrStr(nmspace, name);
    980     if (!result)
    981         result = __Pyx_GetModuleGlobalName(name);
    982     return result;
    983 }
    984 
    985 /////////////// GetModuleGlobalName.proto ///////////////
    986 
    987 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/
    988 
    989 /////////////// GetModuleGlobalName ///////////////
    990 //@requires: GetBuiltinName
    991 //@substitute: naming
    992 
    993 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
    994     PyObject *result;
    995 #if CYTHON_COMPILING_IN_CPYTHON
    996     result = PyDict_GetItem($moddict_cname, name);
    997     if (result) {
    998         Py_INCREF(result);
    999     } else {
   1000 #else
   1001     result = PyObject_GetItem($moddict_cname, name);
   1002     if (!result) {
   1003         PyErr_Clear();
   1004 #endif
   1005         result = __Pyx_GetBuiltinName(name);
   1006     }
   1007     return result;
   1008 }
   1009 
   1010 //////////////////// GetAttr.proto ////////////////////
   1011 
   1012 static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); /*proto*/
   1013 
   1014 //////////////////// GetAttr ////////////////////
   1015 //@requires: PyObjectGetAttrStr
   1016 
   1017 static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
   1018 #if CYTHON_COMPILING_IN_CPYTHON
   1019 #if PY_MAJOR_VERSION >= 3
   1020     if (likely(PyUnicode_Check(n)))
   1021 #else
   1022     if (likely(PyString_Check(n)))
   1023 #endif
   1024         return __Pyx_PyObject_GetAttrStr(o, n);
   1025 #endif
   1026     return PyObject_GetAttr(o, n);
   1027 }
   1028 
   1029 /////////////// PyObjectLookupSpecial.proto ///////////////
   1030 //@requires: PyObjectGetAttrStr
   1031 
   1032 #if CYTHON_COMPILING_IN_CPYTHON && (PY_VERSION_HEX >= 0x03020000 || PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000)
   1033 // looks like calling _PyType_Lookup() isn't safe in Py<=2.6/3.1
   1034 static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) {
   1035     PyObject *res;
   1036     PyTypeObject *tp = Py_TYPE(obj);
   1037 #if PY_MAJOR_VERSION < 3
   1038     if (unlikely(PyInstance_Check(obj)))
   1039         return __Pyx_PyObject_GetAttrStr(obj, attr_name);
   1040 #endif
   1041     // adapted from CPython's special_lookup() in ceval.c
   1042     res = _PyType_Lookup(tp, attr_name);
   1043     if (likely(res)) {
   1044         descrgetfunc f = Py_TYPE(res)->tp_descr_get;
   1045         if (!f) {
   1046             Py_INCREF(res);
   1047         } else {
   1048             res = f(res, obj, (PyObject *)tp);
   1049         }
   1050     } else {
   1051         PyErr_SetObject(PyExc_AttributeError, attr_name);
   1052     }
   1053     return res;
   1054 }
   1055 #else
   1056 #define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
   1057 #endif
   1058 
   1059 /////////////// PyObjectGetAttrStr.proto ///////////////
   1060 
   1061 #if CYTHON_COMPILING_IN_CPYTHON
   1062 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
   1063     PyTypeObject* tp = Py_TYPE(obj);
   1064     if (likely(tp->tp_getattro))
   1065         return tp->tp_getattro(obj, attr_name);
   1066 #if PY_MAJOR_VERSION < 3
   1067     if (likely(tp->tp_getattr))
   1068         return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
   1069 #endif
   1070     return PyObject_GetAttr(obj, attr_name);
   1071 }
   1072 #else
   1073 #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
   1074 #endif
   1075 
   1076 /////////////// PyObjectSetAttrStr.proto ///////////////
   1077 
   1078 #if CYTHON_COMPILING_IN_CPYTHON
   1079 #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
   1080 static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
   1081     PyTypeObject* tp = Py_TYPE(obj);
   1082     if (likely(tp->tp_setattro))
   1083         return tp->tp_setattro(obj, attr_name, value);
   1084 #if PY_MAJOR_VERSION < 3
   1085     if (likely(tp->tp_setattr))
   1086         return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value);
   1087 #endif
   1088     return PyObject_SetAttr(obj, attr_name, value);
   1089 }
   1090 #else
   1091 #define __Pyx_PyObject_DelAttrStr(o,n)   PyObject_DelAttr(o,n)
   1092 #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
   1093 #endif
   1094 
   1095 /////////////// PyObjectCallMethod.proto ///////////////
   1096 //@requires: PyObjectGetAttrStr
   1097 //@requires: PyObjectCall
   1098 //@substitute: naming
   1099 
   1100 static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_name, PyObject* args) {
   1101     PyObject *method, *result = NULL;
   1102     if (unlikely(!args)) return NULL;
   1103     method = __Pyx_PyObject_GetAttrStr(obj, method_name);
   1104     if (unlikely(!method)) goto bad;
   1105     result = __Pyx_PyObject_Call(method, args, NULL);
   1106     Py_DECREF(method);
   1107 bad:
   1108     Py_DECREF(args);
   1109     return result;
   1110 }
   1111 
   1112 #define __Pyx_PyObject_CallMethod3(obj, name, arg1, arg2, arg3) \
   1113     __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(3, arg1, arg2, arg3))
   1114 #define __Pyx_PyObject_CallMethod2(obj, name, arg1, arg2) \
   1115     __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(2, arg1, arg2))
   1116 #define __Pyx_PyObject_CallMethod1(obj, name, arg1) \
   1117     __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(1, arg1))
   1118 #define __Pyx_PyObject_CallMethod0(obj, name) \
   1119     __Pyx_PyObject_CallMethodTuple(obj, name, (Py_INCREF($empty_tuple), $empty_tuple))
   1120 
   1121 
   1122 /////////////// tp_new.proto ///////////////
   1123 
   1124 #define __Pyx_tp_new(type_obj, args) __Pyx_tp_new_kwargs(type_obj, args, NULL)
   1125 static CYTHON_INLINE PyObject* __Pyx_tp_new_kwargs(PyObject* type_obj, PyObject* args, PyObject* kwargs) {
   1126     return (PyObject*) (((PyTypeObject*)type_obj)->tp_new((PyTypeObject*)type_obj, args, kwargs));
   1127 }
   1128 
   1129 
   1130 /////////////// PyObjectCall.proto ///////////////
   1131 
   1132 #if CYTHON_COMPILING_IN_CPYTHON
   1133 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/
   1134 #else
   1135 #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
   1136 #endif
   1137 
   1138 /////////////// PyObjectCall ///////////////
   1139 
   1140 #if CYTHON_COMPILING_IN_CPYTHON
   1141 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
   1142     PyObject *result;
   1143     ternaryfunc call = func->ob_type->tp_call;
   1144 
   1145     if (unlikely(!call))
   1146         return PyObject_Call(func, arg, kw);
   1147 #if PY_VERSION_HEX >= 0x02060000
   1148     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
   1149         return NULL;
   1150 #endif
   1151     result = (*call)(func, arg, kw);
   1152 #if PY_VERSION_HEX >= 0x02060000
   1153     Py_LeaveRecursiveCall();
   1154 #endif
   1155     if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
   1156         PyErr_SetString(
   1157             PyExc_SystemError,
   1158             "NULL result without error in PyObject_Call");
   1159     }
   1160     return result;
   1161 }
   1162 #endif
   1163