| 25633 | #endif |
| 25634 | } |
| 25635 | static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, |
| 25636 | CYTHON_NCP_UNUSED int wraparound, |
| 25637 | CYTHON_NCP_UNUSED int boundscheck) { |
| 25638 | #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS |
| 25639 | if (is_list || PyList_CheckExact(o)) { |
| 25640 | Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); |
| 25641 | if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { |
| 25642 | PyObject *r = PyList_GET_ITEM(o, n); |
| 25643 | Py_INCREF(r); |
| 25644 | return r; |
| 25645 | } |
| 25646 | } |
| 25647 | else if (PyTuple_CheckExact(o)) { |
| 25648 | Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); |
| 25649 | if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { |
| 25650 | PyObject *r = PyTuple_GET_ITEM(o, n); |
| 25651 | Py_INCREF(r); |
| 25652 | return r; |
| 25653 | } |
| 25654 | } else { |
| 25655 | PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; |
| 25656 | PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; |
| 25657 | if (mm && mm->mp_subscript) { |
| 25658 | PyObject *r, *key = PyInt_FromSsize_t(i); |
| 25659 | if (unlikely(!key)) return NULL; |
| 25660 | r = mm->mp_subscript(o, key); |
| 25661 | Py_DECREF(key); |
| 25662 | return r; |
| 25663 | } |
| 25664 | if (likely(sm && sm->sq_item)) { |
| 25665 | if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { |
| 25666 | Py_ssize_t l = sm->sq_length(o); |
| 25667 | if (likely(l >= 0)) { |
| 25668 | i += l; |
| 25669 | } else { |
| 25670 | if (!PyErr_ExceptionMatches(PyExc_OverflowError)) |
| 25671 | return NULL; |
| 25672 | PyErr_Clear(); |
| 25673 | } |
| 25674 | } |
| 25675 | return sm->sq_item(o, i); |
| 25676 | } |
| 25677 | } |
| 25678 | #else |
| 25679 | if (is_list || !PyMapping_Check(o)) { |
| 25680 | return PySequence_GetItem(o, i); |
| 25681 | } |
| 25682 | #endif |
| 25683 | return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); |
| 25684 | } |
| 25685 | |
| 25686 | /* PyObjectCallOneArg */ |
| 25687 | static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { |
no test coverage detected