1 /* Generated by Cython 0.17.4 on Sun Feb 24 19:48:34 2013 */ 2 3 #define PY_SSIZE_T_CLEAN 4 #include "Python.h" 5 #ifndef Py_PYTHON_H 6 #error Python headers needed to compile C extensions, please install development version of Python. 7 #elif PY_VERSION_HEX < 0x02040000 8 #error Cython requires Python 2.4+. 9 #else 10 #include <stddef.h> /* For offsetof */ 11 #ifndef offsetof 12 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) 13 #endif 14 #if !defined(WIN32) && !defined(MS_WINDOWS) 15 #ifndef __stdcall 16 #define __stdcall 17 #endif 18 #ifndef __cdecl 19 #define __cdecl 20 #endif 21 #ifndef __fastcall 22 #define __fastcall 23 #endif 24 #endif 25 #ifndef DL_IMPORT 26 #define DL_IMPORT(t) t 27 #endif 28 #ifndef DL_EXPORT 29 #define DL_EXPORT(t) t 30 #endif 31 #ifndef PY_LONG_LONG 32 #define PY_LONG_LONG LONG_LONG 33 #endif 34 #ifndef Py_HUGE_VAL 35 #define Py_HUGE_VAL HUGE_VAL 36 #endif 37 #ifdef PYPY_VERSION 38 #define CYTHON_COMPILING_IN_PYPY 1 39 #define CYTHON_COMPILING_IN_CPYTHON 0 40 #else 41 #define CYTHON_COMPILING_IN_PYPY 0 42 #define CYTHON_COMPILING_IN_CPYTHON 1 43 #endif 44 #if PY_VERSION_HEX < 0x02050000 45 typedef int Py_ssize_t; 46 #define PY_SSIZE_T_MAX INT_MAX 47 #define PY_SSIZE_T_MIN INT_MIN 48 #define PY_FORMAT_SIZE_T "" 49 #define CYTHON_FORMAT_SSIZE_T "" 50 #define PyInt_FromSsize_t(z) PyInt_FromLong(z) 51 #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) 52 #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ 53 (PyErr_Format(PyExc_TypeError, \ 54 "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ 55 (PyObject*)0)) 56 #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ 57 !PyComplex_Check(o)) 58 #define PyIndex_Check __Pyx_PyIndex_Check 59 #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) 60 #define __PYX_BUILD_PY_SSIZE_T "i" 61 #else 62 #define __PYX_BUILD_PY_SSIZE_T "n" 63 #define CYTHON_FORMAT_SSIZE_T "z" 64 #define __Pyx_PyIndex_Check PyIndex_Check 65 #endif 66 #if PY_VERSION_HEX < 0x02060000 67 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) 68 #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) 69 #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) 70 #define PyVarObject_HEAD_INIT(type, size) \ 71 PyObject_HEAD_INIT(type) size, 72 #define PyType_Modified(t) 73 typedef struct { 74 void *buf; 75 PyObject *obj; 76 Py_ssize_t len; 77 Py_ssize_t itemsize; 78 int readonly; 79 int ndim; 80 char *format; 81 Py_ssize_t *shape; 82 Py_ssize_t *strides; 83 Py_ssize_t *suboffsets; 84 void *internal; 85 } Py_buffer; 86 #define PyBUF_SIMPLE 0 87 #define PyBUF_WRITABLE 0x0001 88 #define PyBUF_FORMAT 0x0004 89 #define PyBUF_ND 0x0008 90 #define PyBUF_STRIDES (0x0010 | PyBUF_ND) 91 #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) 92 #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) 93 #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) 94 #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) 95 #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) 96 #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) 97 typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); 98 typedef void (*releasebufferproc)(PyObject *, Py_buffer *); 99 #endif 100 #if PY_MAJOR_VERSION < 3 101 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" 102 #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ 103 PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) 104 #else 105 #define __Pyx_BUILTIN_MODULE_NAME "builtins" 106 #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ 107 PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) 108 #endif 109 #if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6 110 #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") 111 #endif 112 #if PY_MAJOR_VERSION >= 3 113 #define Py_TPFLAGS_CHECKTYPES 0 114 #define Py_TPFLAGS_HAVE_INDEX 0 115 #endif 116 #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) 117 #define Py_TPFLAGS_HAVE_NEWBUFFER 0 118 #endif 119 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) 120 #define CYTHON_PEP393_ENABLED 1 121 #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ 122 0 : _PyUnicode_Ready((PyObject *)(op))) 123 #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) 124 #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) 125 #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) 126 #else 127 #define CYTHON_PEP393_ENABLED 0 128 #define __Pyx_PyUnicode_READY(op) (0) 129 #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) 130 #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) 131 #define __Pyx_PyUnicode_READ(k, d, i) ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i])) 132 #endif 133 #if PY_MAJOR_VERSION >= 3 134 #define PyBaseString_Type PyUnicode_Type 135 #define PyStringObject PyUnicodeObject 136 #define PyString_Type PyUnicode_Type 137 #define PyString_Check PyUnicode_Check 138 #define PyString_CheckExact PyUnicode_CheckExact 139 #endif 140 #if PY_VERSION_HEX < 0x02060000 141 #define PyBytesObject PyStringObject 142 #define PyBytes_Type PyString_Type 143 #define PyBytes_Check PyString_Check 144 #define PyBytes_CheckExact PyString_CheckExact 145 #define PyBytes_FromString PyString_FromString 146 #define PyBytes_FromStringAndSize PyString_FromStringAndSize 147 #define PyBytes_FromFormat PyString_FromFormat 148 #define PyBytes_DecodeEscape PyString_DecodeEscape 149 #define PyBytes_AsString PyString_AsString 150 #define PyBytes_AsStringAndSize PyString_AsStringAndSize 151 #define PyBytes_Size PyString_Size 152 #define PyBytes_AS_STRING PyString_AS_STRING 153 #define PyBytes_GET_SIZE PyString_GET_SIZE 154 #define PyBytes_Repr PyString_Repr 155 #define PyBytes_Concat PyString_Concat 156 #define PyBytes_ConcatAndDel PyString_ConcatAndDel 157 #endif 158 #if PY_VERSION_HEX < 0x02060000 159 #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) 160 #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) 161 #endif 162 #ifndef PySet_CheckExact 163 #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) 164 #endif 165 #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) 166 #if PY_MAJOR_VERSION >= 3 167 #define PyIntObject PyLongObject 168 #define PyInt_Type PyLong_Type 169 #define PyInt_Check(op) PyLong_Check(op) 170 #define PyInt_CheckExact(op) PyLong_CheckExact(op) 171 #define PyInt_FromString PyLong_FromString 172 #define PyInt_FromUnicode PyLong_FromUnicode 173 #define PyInt_FromLong PyLong_FromLong 174 #define PyInt_FromSize_t PyLong_FromSize_t 175 #define PyInt_FromSsize_t PyLong_FromSsize_t 176 #define PyInt_AsLong PyLong_AsLong 177 #define PyInt_AS_LONG PyLong_AS_LONG 178 #define PyInt_AsSsize_t PyLong_AsSsize_t 179 #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask 180 #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask 181 #endif 182 #if PY_MAJOR_VERSION >= 3 183 #define PyBoolObject PyLongObject 184 #endif 185 #if PY_VERSION_HEX < 0x03020000 186 typedef long Py_hash_t; 187 #define __Pyx_PyInt_FromHash_t PyInt_FromLong 188 #define __Pyx_PyInt_AsHash_t PyInt_AsLong 189 #else 190 #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t 191 #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t 192 #endif 193 #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) 194 #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) 195 #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) 196 #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) 197 #else 198 #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ 199 (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ 200 (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ 201 (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) 202 #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ 203 (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ 204 (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ 205 (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) 206 #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ 207 (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ 208 (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ 209 (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) 210 #endif 211 #if PY_MAJOR_VERSION >= 3 212 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) 213 #endif 214 #if PY_VERSION_HEX < 0x02050000 215 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) 216 #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) 217 #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) 218 #else 219 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) 220 #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) 221 #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) 222 #endif 223 #if PY_VERSION_HEX < 0x02050000 224 #define __Pyx_NAMESTR(n) ((char *)(n)) 225 #define __Pyx_DOCSTR(n) ((char *)(n)) 226 #else 227 #define __Pyx_NAMESTR(n) (n) 228 #define __Pyx_DOCSTR(n) (n) 229 #endif 230 231 232 #if PY_MAJOR_VERSION >= 3 233 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) 234 #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) 235 #else 236 #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) 237 #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) 238 #endif 239 240 #ifndef __PYX_EXTERN_C 241 #ifdef __cplusplus 242 #define __PYX_EXTERN_C extern "C" 243 #else 244 #define __PYX_EXTERN_C extern 245 #endif 246 #endif 247 248 #if defined(WIN32) || defined(MS_WINDOWS) 249 #define _USE_MATH_DEFINES 250 #endif 251 #include <math.h> 252 #define __PYX_HAVE__bintrees__qavltree 253 #define __PYX_HAVE_API__bintrees__qavltree 254 #include "ctrees.h" 255 #include "stack.h" 256 #ifdef _OPENMP 257 #include <omp.h> 258 #endif /* _OPENMP */ 259 260 #ifdef PYREX_WITHOUT_ASSERTIONS 261 #define CYTHON_WITHOUT_ASSERTIONS 262 #endif 263 264 265 /* inline attribute */ 266 #ifndef CYTHON_INLINE 267 #if defined(__GNUC__) 268 #define CYTHON_INLINE __inline__ 269 #elif defined(_MSC_VER) 270 #define CYTHON_INLINE __inline 271 #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 272 #define CYTHON_INLINE inline 273 #else 274 #define CYTHON_INLINE 275 #endif 276 #endif 277 278 /* unused attribute */ 279 #ifndef CYTHON_UNUSED 280 # if defined(__GNUC__) 281 # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) 282 # define CYTHON_UNUSED __attribute__ ((__unused__)) 283 # else 284 # define CYTHON_UNUSED 285 # endif 286 # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) 287 # define CYTHON_UNUSED __attribute__ ((__unused__)) 288 # else 289 # define CYTHON_UNUSED 290 # endif 291 #endif 292 293 typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ 294 295 296 /* Type Conversion Predeclarations */ 297 298 #define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s) 299 #define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s)) 300 301 #define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) 302 #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) 303 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); 304 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); 305 306 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); 307 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); 308 static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); 309 310 #if CYTHON_COMPILING_IN_CPYTHON 311 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) 312 #else 313 #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) 314 #endif 315 #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) 316 317 #ifdef __GNUC__ 318 /* Test for GCC > 2.95 */ 319 #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) 320 #define likely(x) __builtin_expect(!!(x), 1) 321 #define unlikely(x) __builtin_expect(!!(x), 0) 322 #else /* __GNUC__ > 2 ... */ 323 #define likely(x) (x) 324 #define unlikely(x) (x) 325 #endif /* __GNUC__ > 2 ... */ 326 #else /* __GNUC__ */ 327 #define likely(x) (x) 328 #define unlikely(x) (x) 329 #endif /* __GNUC__ */ 330 331 static PyObject *__pyx_m; 332 static PyObject *__pyx_b; 333 static PyObject *__pyx_empty_tuple; 334 static PyObject *__pyx_empty_bytes; 335 static int __pyx_lineno; 336 static int __pyx_clineno = 0; 337 static const char * __pyx_cfilenm= __FILE__; 338 static const char *__pyx_filename; 339 340 341 static const char *__pyx_f[] = { 342 "qavltree.pyx", 343 "cwalker.pxd", 344 }; 345 346 /*--- Type declarations ---*/ 347 struct __pyx_obj_8bintrees_7cwalker_cWalker; 348 struct __pyx_obj_8bintrees_8qavltree_cAVLTree; 349 350 /* "cwalker.pxd":11 351 * from stack cimport node_stack_t 352 * 353 * cdef class cWalker: # <<<<<<<<<<<<<< 354 * cdef node_t *node 355 * cdef node_t *root 356 */ 357 struct __pyx_obj_8bintrees_7cwalker_cWalker { 358 PyObject_HEAD 359 struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *__pyx_vtab; 360 node_t *node; 361 node_t *root; 362 node_stack_t *stack; 363 }; 364 365 366 /* "bintrees\qavltree.pyx":16 367 * from ctrees cimport * 368 * 369 * cdef class cAVLTree: # <<<<<<<<<<<<<< 370 * cdef node_t *_root 371 * cdef int _count 372 */ 373 struct __pyx_obj_8bintrees_8qavltree_cAVLTree { 374 PyObject_HEAD 375 node_t *_root; 376 int _count; 377 }; 378 379 380 381 /* "cwalker.pxd":11 382 * from stack cimport node_stack_t 383 * 384 * cdef class cWalker: # <<<<<<<<<<<<<< 385 * cdef node_t *node 386 * cdef node_t *root 387 */ 388 389 struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker { 390 void (*set_tree)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, node_t *); 391 PyObject *(*reset)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch); 392 PyObject *(*push)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch); 393 PyObject *(*pop)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch); 394 }; 395 static struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *__pyx_vtabptr_8bintrees_7cwalker_cWalker; 396 #ifndef CYTHON_REFNANNY 397 #define CYTHON_REFNANNY 0 398 #endif 399 #if CYTHON_REFNANNY 400 typedef struct { 401 void (*INCREF)(void*, PyObject*, int); 402 void (*DECREF)(void*, PyObject*, int); 403 void (*GOTREF)(void*, PyObject*, int); 404 void (*GIVEREF)(void*, PyObject*, int); 405 void* (*SetupContext)(const char*, int, const char*); 406 void (*FinishContext)(void**); 407 } __Pyx_RefNannyAPIStruct; 408 static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; 409 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ 410 #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; 411 #ifdef WITH_THREAD 412 #define __Pyx_RefNannySetupContext(name, acquire_gil) \ 413 if (acquire_gil) { \ 414 PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ 415 __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ 416 PyGILState_Release(__pyx_gilstate_save); \ 417 } else { \ 418 __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ 419 } 420 #else 421 #define __Pyx_RefNannySetupContext(name, acquire_gil) \ 422 __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) 423 #endif 424 #define __Pyx_RefNannyFinishContext() \ 425 __Pyx_RefNanny->FinishContext(&__pyx_refnanny) 426 #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) 427 #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) 428 #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) 429 #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) 430 #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) 431 #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) 432 #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) 433 #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) 434 #else 435 #define __Pyx_RefNannyDeclarations 436 #define __Pyx_RefNannySetupContext(name, acquire_gil) 437 #define __Pyx_RefNannyFinishContext() 438 #define __Pyx_INCREF(r) Py_INCREF(r) 439 #define __Pyx_DECREF(r) Py_DECREF(r) 440 #define __Pyx_GOTREF(r) 441 #define __Pyx_GIVEREF(r) 442 #define __Pyx_XINCREF(r) Py_XINCREF(r) 443 #define __Pyx_XDECREF(r) Py_XDECREF(r) 444 #define __Pyx_XGOTREF(r) 445 #define __Pyx_XGIVEREF(r) 446 #endif /* CYTHON_REFNANNY */ 447 #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) 448 #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) 449 450 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ 451 452 static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ 453 454 static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ 455 PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ 456 const char* function_name); /*proto*/ 457 458 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, 459 Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ 460 461 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ 462 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ 463 464 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ 465 466 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { 467 PyObject *r; 468 if (!j) return NULL; 469 r = PyObject_GetItem(o, j); 470 Py_DECREF(j); 471 return r; 472 } 473 #define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \ 474 __Pyx_GetItemInt_List_Fast(o, i) : \ 475 __Pyx_GetItemInt_Generic(o, to_py_func(i))) 476 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) { 477 #if CYTHON_COMPILING_IN_CPYTHON 478 if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { 479 PyObject *r = PyList_GET_ITEM(o, i); 480 Py_INCREF(r); 481 return r; 482 } 483 else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) { 484 PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i); 485 Py_INCREF(r); 486 return r; 487 } 488 return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); 489 #else 490 return PySequence_GetItem(o, i); 491 #endif 492 } 493 #define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \ 494 __Pyx_GetItemInt_Tuple_Fast(o, i) : \ 495 __Pyx_GetItemInt_Generic(o, to_py_func(i))) 496 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) { 497 #if CYTHON_COMPILING_IN_CPYTHON 498 if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { 499 PyObject *r = PyTuple_GET_ITEM(o, i); 500 Py_INCREF(r); 501 return r; 502 } 503 else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) { 504 PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i); 505 Py_INCREF(r); 506 return r; 507 } 508 return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); 509 #else 510 return PySequence_GetItem(o, i); 511 #endif 512 } 513 #define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \ 514 __Pyx_GetItemInt_Fast(o, i) : \ 515 __Pyx_GetItemInt_Generic(o, to_py_func(i))) 516 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) { 517 #if CYTHON_COMPILING_IN_CPYTHON 518 if (PyList_CheckExact(o)) { 519 Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); 520 if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) { 521 PyObject *r = PyList_GET_ITEM(o, n); 522 Py_INCREF(r); 523 return r; 524 } 525 } 526 else if (PyTuple_CheckExact(o)) { 527 Py_ssize_t n = (likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); 528 if (likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { 529 PyObject *r = PyTuple_GET_ITEM(o, n); 530 Py_INCREF(r); 531 return r; 532 } 533 } else { /* inlined PySequence_GetItem() */ 534 PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; 535 if (likely(m && m->sq_item)) { 536 if (unlikely(i < 0) && likely(m->sq_length)) { 537 Py_ssize_t l = m->sq_length(o); 538 if (unlikely(l < 0)) return NULL; 539 i += l; 540 } 541 return m->sq_item(o, i); 542 } 543 } 544 #else 545 if (PySequence_Check(o)) { 546 return PySequence_GetItem(o, i); 547 } 548 #endif 549 return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); 550 } 551 552 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/ 553 554 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); 555 556 static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); 557 558 static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); 559 560 static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); 561 562 static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); 563 564 static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); 565 566 static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); 567 568 static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); 569 570 static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); 571 572 static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); 573 574 static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); 575 576 static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); 577 578 static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); 579 580 static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); 581 582 static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); 583 584 static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); 585 586 static int __Pyx_check_binary_version(void); 587 588 #if !defined(__Pyx_PyIdentifier_FromString) 589 #if PY_MAJOR_VERSION < 3 590 #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) 591 #else 592 #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) 593 #endif 594 #endif 595 596 static PyObject *__Pyx_ImportModule(const char *name); /*proto*/ 597 598 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); /*proto*/ 599 600 static void* __Pyx_GetVtable(PyObject *dict); /*proto*/ 601 602 typedef struct { 603 int code_line; 604 PyCodeObject* code_object; 605 } __Pyx_CodeObjectCacheEntry; 606 struct __Pyx_CodeObjectCache { 607 int count; 608 int max_count; 609 __Pyx_CodeObjectCacheEntry* entries; 610 }; 611 static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; 612 static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); 613 static PyCodeObject *__pyx_find_code_object(int code_line); 614 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); 615 616 static void __Pyx_AddTraceback(const char *funcname, int c_line, 617 int py_line, const char *filename); /*proto*/ 618 619 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ 620 621 622 /* Module declarations from 'bintrees.ctrees' */ 623 624 /* Module declarations from 'bintrees.stack' */ 625 626 /* Module declarations from 'bintrees.cwalker' */ 627 static PyTypeObject *__pyx_ptype_8bintrees_7cwalker_cWalker = 0; 628 629 /* Module declarations from 'bintrees.qavltree' */ 630 static PyTypeObject *__pyx_ptype_8bintrees_8qavltree_cAVLTree = 0; 631 #define __Pyx_MODULE_NAME "bintrees.qavltree" 632 int __pyx_module_is_main_bintrees__qavltree = 0; 633 634 /* Implementation of 'bintrees.qavltree' */ 635 static PyObject *__pyx_builtin_property; 636 static PyObject *__pyx_builtin_KeyError; 637 static PyObject *__pyx_builtin_MemoryError; 638 static PyObject *__pyx_builtin_ValueError; 639 static int __pyx_pf_8bintrees_8qavltree_8cAVLTree___cinit__(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_items); /* proto */ 640 static void __pyx_pf_8bintrees_8qavltree_8cAVLTree_2__dealloc__(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self); /* proto */ 641 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_4count(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self); /* proto */ 642 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_6__getstate__(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self); /* proto */ 643 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_8__setstate__(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_state); /* proto */ 644 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_10clear(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self); /* proto */ 645 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_12get_value(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ 646 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_14get_walker(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self); /* proto */ 647 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_16insert(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /* proto */ 648 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_18remove(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ 649 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_20max_item(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self); /* proto */ 650 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_22min_item(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self); /* proto */ 651 static char __pyx_k_1[] = "Can not allocate memory for node structure."; 652 static char __pyx_k_3[] = "Tree is empty"; 653 static char __pyx_k__key[] = "key"; 654 static char __pyx_k__count[] = "count"; 655 static char __pyx_k__items[] = "items"; 656 static char __pyx_k__value[] = "value"; 657 static char __pyx_k__update[] = "update"; 658 static char __pyx_k____all__[] = "__all__"; 659 static char __pyx_k__cWalker[] = "cWalker"; 660 static char __pyx_k__cwalker[] = "cwalker"; 661 static char __pyx_k__KeyError[] = "KeyError"; 662 static char __pyx_k____main__[] = "__main__"; 663 static char __pyx_k____test__[] = "__test__"; 664 static char __pyx_k__cAVLTree[] = "cAVLTree"; 665 static char __pyx_k__property[] = "property"; 666 static char __pyx_k__ValueError[] = "ValueError"; 667 static char __pyx_k__MemoryError[] = "MemoryError"; 668 static PyObject *__pyx_kp_s_1; 669 static PyObject *__pyx_kp_s_3; 670 static PyObject *__pyx_n_s__KeyError; 671 static PyObject *__pyx_n_s__MemoryError; 672 static PyObject *__pyx_n_s__ValueError; 673 static PyObject *__pyx_n_s____all__; 674 static PyObject *__pyx_n_s____main__; 675 static PyObject *__pyx_n_s____test__; 676 static PyObject *__pyx_n_s__cAVLTree; 677 static PyObject *__pyx_n_s__cWalker; 678 static PyObject *__pyx_n_s__count; 679 static PyObject *__pyx_n_s__cwalker; 680 static PyObject *__pyx_n_s__items; 681 static PyObject *__pyx_n_s__key; 682 static PyObject *__pyx_n_s__property; 683 static PyObject *__pyx_n_s__update; 684 static PyObject *__pyx_n_s__value; 685 static PyObject *__pyx_int_0; 686 static PyObject *__pyx_k_tuple_2; 687 static PyObject *__pyx_k_tuple_4; 688 static PyObject *__pyx_k_tuple_5; 689 690 /* Python wrapper */ 691 static int __pyx_pw_8bintrees_8qavltree_8cAVLTree_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ 692 static int __pyx_pw_8bintrees_8qavltree_8cAVLTree_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { 693 PyObject *__pyx_v_items = 0; 694 int __pyx_r; 695 __Pyx_RefNannyDeclarations 696 __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); 697 { 698 static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__items,0}; 699 PyObject* values[1] = {0}; 700 701 /* "bintrees\qavltree.pyx":20 702 * cdef int _count 703 * 704 * def __cinit__(self, items=None): # <<<<<<<<<<<<<< 705 * self._root = NULL 706 * self._count = 0 707 */ 708 values[0] = ((PyObject *)Py_None); 709 if (unlikely(__pyx_kwds)) { 710 Py_ssize_t kw_args; 711 const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); 712 switch (pos_args) { 713 case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); 714 case 0: break; 715 default: goto __pyx_L5_argtuple_error; 716 } 717 kw_args = PyDict_Size(__pyx_kwds); 718 switch (pos_args) { 719 case 0: 720 if (kw_args > 0) { 721 PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__items); 722 if (value) { values[0] = value; kw_args--; } 723 } 724 } 725 if (unlikely(kw_args > 0)) { 726 if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} 727 } 728 } else { 729 switch (PyTuple_GET_SIZE(__pyx_args)) { 730 case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); 731 case 0: break; 732 default: goto __pyx_L5_argtuple_error; 733 } 734 } 735 __pyx_v_items = values[0]; 736 } 737 goto __pyx_L4_argument_unpacking_done; 738 __pyx_L5_argtuple_error:; 739 __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} 740 __pyx_L3_error:; 741 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); 742 __Pyx_RefNannyFinishContext(); 743 return -1; 744 __pyx_L4_argument_unpacking_done:; 745 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree___cinit__(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self), __pyx_v_items); 746 __Pyx_RefNannyFinishContext(); 747 return __pyx_r; 748 } 749 750 static int __pyx_pf_8bintrees_8qavltree_8cAVLTree___cinit__(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_items) { 751 int __pyx_r; 752 __Pyx_RefNannyDeclarations 753 int __pyx_t_1; 754 PyObject *__pyx_t_2 = NULL; 755 PyObject *__pyx_t_3 = NULL; 756 PyObject *__pyx_t_4 = NULL; 757 int __pyx_lineno = 0; 758 const char *__pyx_filename = NULL; 759 int __pyx_clineno = 0; 760 __Pyx_RefNannySetupContext("__cinit__", 0); 761 762 /* "bintrees\qavltree.pyx":21 763 * 764 * def __cinit__(self, items=None): 765 * self._root = NULL # <<<<<<<<<<<<<< 766 * self._count = 0 767 * if items: 768 */ 769 __pyx_v_self->_root = NULL; 770 771 /* "bintrees\qavltree.pyx":22 772 * def __cinit__(self, items=None): 773 * self._root = NULL 774 * self._count = 0 # <<<<<<<<<<<<<< 775 * if items: 776 * self.update(items) 777 */ 778 __pyx_v_self->_count = 0; 779 780 /* "bintrees\qavltree.pyx":23 781 * self._root = NULL 782 * self._count = 0 783 * if items: # <<<<<<<<<<<<<< 784 * self.update(items) 785 * 786 */ 787 __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_items); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 788 if (__pyx_t_1) { 789 790 /* "bintrees\qavltree.pyx":24 791 * self._count = 0 792 * if items: 793 * self.update(items) # <<<<<<<<<<<<<< 794 * 795 * def __dealloc__(self): 796 */ 797 __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__update); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 798 __Pyx_GOTREF(__pyx_t_2); 799 __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 800 __Pyx_GOTREF(__pyx_t_3); 801 __Pyx_INCREF(__pyx_v_items); 802 PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_items); 803 __Pyx_GIVEREF(__pyx_v_items); 804 __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 805 __Pyx_GOTREF(__pyx_t_4); 806 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; 807 __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; 808 __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; 809 goto __pyx_L3; 810 } 811 __pyx_L3:; 812 813 __pyx_r = 0; 814 goto __pyx_L0; 815 __pyx_L1_error:; 816 __Pyx_XDECREF(__pyx_t_2); 817 __Pyx_XDECREF(__pyx_t_3); 818 __Pyx_XDECREF(__pyx_t_4); 819 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); 820 __pyx_r = -1; 821 __pyx_L0:; 822 __Pyx_RefNannyFinishContext(); 823 return __pyx_r; 824 } 825 826 /* Python wrapper */ 827 static void __pyx_pw_8bintrees_8qavltree_8cAVLTree_3__dealloc__(PyObject *__pyx_v_self); /*proto*/ 828 static void __pyx_pw_8bintrees_8qavltree_8cAVLTree_3__dealloc__(PyObject *__pyx_v_self) { 829 __Pyx_RefNannyDeclarations 830 __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); 831 __pyx_pf_8bintrees_8qavltree_8cAVLTree_2__dealloc__(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self)); 832 __Pyx_RefNannyFinishContext(); 833 } 834 835 /* "bintrees\qavltree.pyx":26 836 * self.update(items) 837 * 838 * def __dealloc__(self): # <<<<<<<<<<<<<< 839 * ct_delete_tree(self._root) 840 * 841 */ 842 843 static void __pyx_pf_8bintrees_8qavltree_8cAVLTree_2__dealloc__(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self) { 844 __Pyx_RefNannyDeclarations 845 __Pyx_RefNannySetupContext("__dealloc__", 0); 846 847 /* "bintrees\qavltree.pyx":27 848 * 849 * def __dealloc__(self): 850 * ct_delete_tree(self._root) # <<<<<<<<<<<<<< 851 * 852 * @property 853 */ 854 ct_delete_tree(__pyx_v_self->_root); 855 856 __Pyx_RefNannyFinishContext(); 857 } 858 859 /* Python wrapper */ 860 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_5count(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 861 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_5count(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 862 PyObject *__pyx_r = 0; 863 __Pyx_RefNannyDeclarations 864 __Pyx_RefNannySetupContext("count (wrapper)", 0); 865 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_4count(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self)); 866 __Pyx_RefNannyFinishContext(); 867 return __pyx_r; 868 } 869 870 /* "bintrees\qavltree.pyx":30 871 * 872 * @property 873 * def count(self): # <<<<<<<<<<<<<< 874 * return self._count 875 * 876 */ 877 878 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_4count(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self) { 879 PyObject *__pyx_r = NULL; 880 __Pyx_RefNannyDeclarations 881 PyObject *__pyx_t_1 = NULL; 882 int __pyx_lineno = 0; 883 const char *__pyx_filename = NULL; 884 int __pyx_clineno = 0; 885 __Pyx_RefNannySetupContext("count", 0); 886 887 /* "bintrees\qavltree.pyx":31 888 * @property 889 * def count(self): 890 * return self._count # <<<<<<<<<<<<<< 891 * 892 * def __getstate__(self): 893 */ 894 __Pyx_XDECREF(__pyx_r); 895 __pyx_t_1 = PyInt_FromLong(__pyx_v_self->_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 896 __Pyx_GOTREF(__pyx_t_1); 897 __pyx_r = __pyx_t_1; 898 __pyx_t_1 = 0; 899 goto __pyx_L0; 900 901 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 902 goto __pyx_L0; 903 __pyx_L1_error:; 904 __Pyx_XDECREF(__pyx_t_1); 905 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.count", __pyx_clineno, __pyx_lineno, __pyx_filename); 906 __pyx_r = NULL; 907 __pyx_L0:; 908 __Pyx_XGIVEREF(__pyx_r); 909 __Pyx_RefNannyFinishContext(); 910 return __pyx_r; 911 } 912 913 /* Python wrapper */ 914 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_7__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 915 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_7__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 916 PyObject *__pyx_r = 0; 917 __Pyx_RefNannyDeclarations 918 __Pyx_RefNannySetupContext("__getstate__ (wrapper)", 0); 919 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_6__getstate__(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self)); 920 __Pyx_RefNannyFinishContext(); 921 return __pyx_r; 922 } 923 924 /* "bintrees\qavltree.pyx":33 925 * return self._count 926 * 927 * def __getstate__(self): # <<<<<<<<<<<<<< 928 * return dict(self.items()) 929 * 930 */ 931 932 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_6__getstate__(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self) { 933 PyObject *__pyx_r = NULL; 934 __Pyx_RefNannyDeclarations 935 PyObject *__pyx_t_1 = NULL; 936 PyObject *__pyx_t_2 = NULL; 937 int __pyx_lineno = 0; 938 const char *__pyx_filename = NULL; 939 int __pyx_clineno = 0; 940 __Pyx_RefNannySetupContext("__getstate__", 0); 941 942 /* "bintrees\qavltree.pyx":34 943 * 944 * def __getstate__(self): 945 * return dict(self.items()) # <<<<<<<<<<<<<< 946 * 947 * def __setstate__(self, state): 948 */ 949 __Pyx_XDECREF(__pyx_r); 950 __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 951 __Pyx_GOTREF(__pyx_t_1); 952 __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 953 __Pyx_GOTREF(__pyx_t_2); 954 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 955 __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 956 __Pyx_GOTREF(__pyx_t_1); 957 PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); 958 __Pyx_GIVEREF(__pyx_t_2); 959 __pyx_t_2 = 0; 960 __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 961 __Pyx_GOTREF(__pyx_t_2); 962 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; 963 __pyx_r = __pyx_t_2; 964 __pyx_t_2 = 0; 965 goto __pyx_L0; 966 967 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 968 goto __pyx_L0; 969 __pyx_L1_error:; 970 __Pyx_XDECREF(__pyx_t_1); 971 __Pyx_XDECREF(__pyx_t_2); 972 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.__getstate__", __pyx_clineno, __pyx_lineno, __pyx_filename); 973 __pyx_r = NULL; 974 __pyx_L0:; 975 __Pyx_XGIVEREF(__pyx_r); 976 __Pyx_RefNannyFinishContext(); 977 return __pyx_r; 978 } 979 980 /* Python wrapper */ 981 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_9__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state); /*proto*/ 982 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_9__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state) { 983 PyObject *__pyx_r = 0; 984 __Pyx_RefNannyDeclarations 985 __Pyx_RefNannySetupContext("__setstate__ (wrapper)", 0); 986 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_8__setstate__(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self), ((PyObject *)__pyx_v_state)); 987 __Pyx_RefNannyFinishContext(); 988 return __pyx_r; 989 } 990 991 /* "bintrees\qavltree.pyx":36 992 * return dict(self.items()) 993 * 994 * def __setstate__(self, state): # <<<<<<<<<<<<<< 995 * self.update(state) 996 * 997 */ 998 999 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_8__setstate__(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_state) { 1000 PyObject *__pyx_r = NULL; 1001 __Pyx_RefNannyDeclarations 1002 PyObject *__pyx_t_1 = NULL; 1003 PyObject *__pyx_t_2 = NULL; 1004 PyObject *__pyx_t_3 = NULL; 1005 int __pyx_lineno = 0; 1006 const char *__pyx_filename = NULL; 1007 int __pyx_clineno = 0; 1008 __Pyx_RefNannySetupContext("__setstate__", 0); 1009 1010 /* "bintrees\qavltree.pyx":37 1011 * 1012 * def __setstate__(self, state): 1013 * self.update(state) # <<<<<<<<<<<<<< 1014 * 1015 * def clear(self): 1016 */ 1017 __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1018 __Pyx_GOTREF(__pyx_t_1); 1019 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1020 __Pyx_GOTREF(__pyx_t_2); 1021 __Pyx_INCREF(__pyx_v_state); 1022 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_state); 1023 __Pyx_GIVEREF(__pyx_v_state); 1024 __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1025 __Pyx_GOTREF(__pyx_t_3); 1026 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 1027 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 1028 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; 1029 1030 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1031 goto __pyx_L0; 1032 __pyx_L1_error:; 1033 __Pyx_XDECREF(__pyx_t_1); 1034 __Pyx_XDECREF(__pyx_t_2); 1035 __Pyx_XDECREF(__pyx_t_3); 1036 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.__setstate__", __pyx_clineno, __pyx_lineno, __pyx_filename); 1037 __pyx_r = NULL; 1038 __pyx_L0:; 1039 __Pyx_XGIVEREF(__pyx_r); 1040 __Pyx_RefNannyFinishContext(); 1041 return __pyx_r; 1042 } 1043 1044 /* Python wrapper */ 1045 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_11clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1046 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_11clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1047 PyObject *__pyx_r = 0; 1048 __Pyx_RefNannyDeclarations 1049 __Pyx_RefNannySetupContext("clear (wrapper)", 0); 1050 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_10clear(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self)); 1051 __Pyx_RefNannyFinishContext(); 1052 return __pyx_r; 1053 } 1054 1055 /* "bintrees\qavltree.pyx":39 1056 * self.update(state) 1057 * 1058 * def clear(self): # <<<<<<<<<<<<<< 1059 * ct_delete_tree(self._root) 1060 * self._count = 0 1061 */ 1062 1063 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_10clear(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self) { 1064 PyObject *__pyx_r = NULL; 1065 __Pyx_RefNannyDeclarations 1066 __Pyx_RefNannySetupContext("clear", 0); 1067 1068 /* "bintrees\qavltree.pyx":40 1069 * 1070 * def clear(self): 1071 * ct_delete_tree(self._root) # <<<<<<<<<<<<<< 1072 * self._count = 0 1073 * self._root = NULL 1074 */ 1075 ct_delete_tree(__pyx_v_self->_root); 1076 1077 /* "bintrees\qavltree.pyx":41 1078 * def clear(self): 1079 * ct_delete_tree(self._root) 1080 * self._count = 0 # <<<<<<<<<<<<<< 1081 * self._root = NULL 1082 * 1083 */ 1084 __pyx_v_self->_count = 0; 1085 1086 /* "bintrees\qavltree.pyx":42 1087 * ct_delete_tree(self._root) 1088 * self._count = 0 1089 * self._root = NULL # <<<<<<<<<<<<<< 1090 * 1091 * def get_value(self, key): 1092 */ 1093 __pyx_v_self->_root = NULL; 1094 1095 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1096 __Pyx_XGIVEREF(__pyx_r); 1097 __Pyx_RefNannyFinishContext(); 1098 return __pyx_r; 1099 } 1100 1101 /* Python wrapper */ 1102 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_13get_value(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/ 1103 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_13get_value(PyObject *__pyx_v_self, PyObject *__pyx_v_key) { 1104 PyObject *__pyx_r = 0; 1105 __Pyx_RefNannyDeclarations 1106 __Pyx_RefNannySetupContext("get_value (wrapper)", 0); 1107 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_12get_value(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self), ((PyObject *)__pyx_v_key)); 1108 __Pyx_RefNannyFinishContext(); 1109 return __pyx_r; 1110 } 1111 1112 /* "bintrees\qavltree.pyx":44 1113 * self._root = NULL 1114 * 1115 * def get_value(self, key): # <<<<<<<<<<<<<< 1116 * result = <object> ct_get_item(self._root, key) 1117 * if result is None: 1118 */ 1119 1120 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_12get_value(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_key) { 1121 PyObject *__pyx_v_result = NULL; 1122 PyObject *__pyx_r = NULL; 1123 __Pyx_RefNannyDeclarations 1124 PyObject *__pyx_t_1; 1125 int __pyx_t_2; 1126 PyObject *__pyx_t_3 = NULL; 1127 PyObject *__pyx_t_4 = NULL; 1128 int __pyx_lineno = 0; 1129 const char *__pyx_filename = NULL; 1130 int __pyx_clineno = 0; 1131 __Pyx_RefNannySetupContext("get_value", 0); 1132 1133 /* "bintrees\qavltree.pyx":45 1134 * 1135 * def get_value(self, key): 1136 * result = <object> ct_get_item(self._root, key) # <<<<<<<<<<<<<< 1137 * if result is None: 1138 * raise KeyError(key) 1139 */ 1140 __pyx_t_1 = ct_get_item(__pyx_v_self->_root, __pyx_v_key); 1141 __Pyx_INCREF(((PyObject *)__pyx_t_1)); 1142 __pyx_v_result = ((PyObject *)__pyx_t_1); 1143 1144 /* "bintrees\qavltree.pyx":46 1145 * def get_value(self, key): 1146 * result = <object> ct_get_item(self._root, key) 1147 * if result is None: # <<<<<<<<<<<<<< 1148 * raise KeyError(key) 1149 * else: 1150 */ 1151 __pyx_t_2 = (__pyx_v_result == Py_None); 1152 if (__pyx_t_2) { 1153 1154 /* "bintrees\qavltree.pyx":47 1155 * result = <object> ct_get_item(self._root, key) 1156 * if result is None: 1157 * raise KeyError(key) # <<<<<<<<<<<<<< 1158 * else: 1159 * return result[1] 1160 */ 1161 __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1162 __Pyx_GOTREF(__pyx_t_3); 1163 __Pyx_INCREF(__pyx_v_key); 1164 PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key); 1165 __Pyx_GIVEREF(__pyx_v_key); 1166 __pyx_t_4 = PyObject_Call(__pyx_builtin_KeyError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1167 __Pyx_GOTREF(__pyx_t_4); 1168 __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; 1169 __Pyx_Raise(__pyx_t_4, 0, 0, 0); 1170 __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; 1171 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1172 goto __pyx_L3; 1173 } 1174 /*else*/ { 1175 1176 /* "bintrees\qavltree.pyx":49 1177 * raise KeyError(key) 1178 * else: 1179 * return result[1] # <<<<<<<<<<<<<< 1180 * 1181 * def get_walker(self): 1182 */ 1183 __Pyx_XDECREF(__pyx_r); 1184 __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_result, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1185 __Pyx_GOTREF(__pyx_t_4); 1186 __pyx_r = __pyx_t_4; 1187 __pyx_t_4 = 0; 1188 goto __pyx_L0; 1189 } 1190 __pyx_L3:; 1191 1192 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1193 goto __pyx_L0; 1194 __pyx_L1_error:; 1195 __Pyx_XDECREF(__pyx_t_3); 1196 __Pyx_XDECREF(__pyx_t_4); 1197 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.get_value", __pyx_clineno, __pyx_lineno, __pyx_filename); 1198 __pyx_r = NULL; 1199 __pyx_L0:; 1200 __Pyx_XDECREF(__pyx_v_result); 1201 __Pyx_XGIVEREF(__pyx_r); 1202 __Pyx_RefNannyFinishContext(); 1203 return __pyx_r; 1204 } 1205 1206 /* Python wrapper */ 1207 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_15get_walker(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1208 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_15get_walker(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1209 PyObject *__pyx_r = 0; 1210 __Pyx_RefNannyDeclarations 1211 __Pyx_RefNannySetupContext("get_walker (wrapper)", 0); 1212 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_14get_walker(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self)); 1213 __Pyx_RefNannyFinishContext(); 1214 return __pyx_r; 1215 } 1216 1217 /* "bintrees\qavltree.pyx":51 1218 * return result[1] 1219 * 1220 * def get_walker(self): # <<<<<<<<<<<<<< 1221 * cdef cWalker walker 1222 * walker = cWalker() 1223 */ 1224 1225 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_14get_walker(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self) { 1226 struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_walker = 0; 1227 PyObject *__pyx_r = NULL; 1228 __Pyx_RefNannyDeclarations 1229 PyObject *__pyx_t_1 = NULL; 1230 int __pyx_lineno = 0; 1231 const char *__pyx_filename = NULL; 1232 int __pyx_clineno = 0; 1233 __Pyx_RefNannySetupContext("get_walker", 0); 1234 1235 /* "bintrees\qavltree.pyx":53 1236 * def get_walker(self): 1237 * cdef cWalker walker 1238 * walker = cWalker() # <<<<<<<<<<<<<< 1239 * walker.set_tree(self._root) 1240 * return walker 1241 */ 1242 __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8bintrees_7cwalker_cWalker)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1243 __Pyx_GOTREF(__pyx_t_1); 1244 __pyx_v_walker = ((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_t_1); 1245 __pyx_t_1 = 0; 1246 1247 /* "bintrees\qavltree.pyx":54 1248 * cdef cWalker walker 1249 * walker = cWalker() 1250 * walker.set_tree(self._root) # <<<<<<<<<<<<<< 1251 * return walker 1252 * 1253 */ 1254 ((struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *)__pyx_v_walker->__pyx_vtab)->set_tree(__pyx_v_walker, __pyx_v_self->_root); 1255 1256 /* "bintrees\qavltree.pyx":55 1257 * walker = cWalker() 1258 * walker.set_tree(self._root) 1259 * return walker # <<<<<<<<<<<<<< 1260 * 1261 * def insert(self, key, value): 1262 */ 1263 __Pyx_XDECREF(__pyx_r); 1264 __Pyx_INCREF(((PyObject *)__pyx_v_walker)); 1265 __pyx_r = ((PyObject *)__pyx_v_walker); 1266 goto __pyx_L0; 1267 1268 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1269 goto __pyx_L0; 1270 __pyx_L1_error:; 1271 __Pyx_XDECREF(__pyx_t_1); 1272 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.get_walker", __pyx_clineno, __pyx_lineno, __pyx_filename); 1273 __pyx_r = NULL; 1274 __pyx_L0:; 1275 __Pyx_XDECREF((PyObject *)__pyx_v_walker); 1276 __Pyx_XGIVEREF(__pyx_r); 1277 __Pyx_RefNannyFinishContext(); 1278 return __pyx_r; 1279 } 1280 1281 /* Python wrapper */ 1282 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_17insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ 1283 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_17insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { 1284 PyObject *__pyx_v_key = 0; 1285 PyObject *__pyx_v_value = 0; 1286 PyObject *__pyx_r = 0; 1287 __Pyx_RefNannyDeclarations 1288 __Pyx_RefNannySetupContext("insert (wrapper)", 0); 1289 { 1290 static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__key,&__pyx_n_s__value,0}; 1291 PyObject* values[2] = {0,0}; 1292 if (unlikely(__pyx_kwds)) { 1293 Py_ssize_t kw_args; 1294 const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); 1295 switch (pos_args) { 1296 case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); 1297 case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); 1298 case 0: break; 1299 default: goto __pyx_L5_argtuple_error; 1300 } 1301 kw_args = PyDict_Size(__pyx_kwds); 1302 switch (pos_args) { 1303 case 0: 1304 if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; 1305 else goto __pyx_L5_argtuple_error; 1306 case 1: 1307 if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; 1308 else { 1309 __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L3_error;} 1310 } 1311 } 1312 if (unlikely(kw_args > 0)) { 1313 if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L3_error;} 1314 } 1315 } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { 1316 goto __pyx_L5_argtuple_error; 1317 } else { 1318 values[0] = PyTuple_GET_ITEM(__pyx_args, 0); 1319 values[1] = PyTuple_GET_ITEM(__pyx_args, 1); 1320 } 1321 __pyx_v_key = values[0]; 1322 __pyx_v_value = values[1]; 1323 } 1324 goto __pyx_L4_argument_unpacking_done; 1325 __pyx_L5_argtuple_error:; 1326 __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L3_error;} 1327 __pyx_L3_error:; 1328 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.insert", __pyx_clineno, __pyx_lineno, __pyx_filename); 1329 __Pyx_RefNannyFinishContext(); 1330 return NULL; 1331 __pyx_L4_argument_unpacking_done:; 1332 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_16insert(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self), __pyx_v_key, __pyx_v_value); 1333 __Pyx_RefNannyFinishContext(); 1334 return __pyx_r; 1335 } 1336 1337 /* "bintrees\qavltree.pyx":57 1338 * return walker 1339 * 1340 * def insert(self, key, value): # <<<<<<<<<<<<<< 1341 * res = avl_insert(&self._root, key, value) 1342 * if res < 0: 1343 */ 1344 1345 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_16insert(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) { 1346 PyObject *__pyx_v_res = NULL; 1347 PyObject *__pyx_r = NULL; 1348 __Pyx_RefNannyDeclarations 1349 PyObject *__pyx_t_1 = NULL; 1350 int __pyx_t_2; 1351 PyObject *__pyx_t_3 = NULL; 1352 int __pyx_t_4; 1353 int __pyx_lineno = 0; 1354 const char *__pyx_filename = NULL; 1355 int __pyx_clineno = 0; 1356 __Pyx_RefNannySetupContext("insert", 0); 1357 1358 /* "bintrees\qavltree.pyx":58 1359 * 1360 * def insert(self, key, value): 1361 * res = avl_insert(&self._root, key, value) # <<<<<<<<<<<<<< 1362 * if res < 0: 1363 * raise MemoryError('Can not allocate memory for node structure.') 1364 */ 1365 __pyx_t_1 = PyInt_FromLong(avl_insert((&__pyx_v_self->_root), __pyx_v_key, __pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1366 __Pyx_GOTREF(__pyx_t_1); 1367 __pyx_v_res = __pyx_t_1; 1368 __pyx_t_1 = 0; 1369 1370 /* "bintrees\qavltree.pyx":59 1371 * def insert(self, key, value): 1372 * res = avl_insert(&self._root, key, value) 1373 * if res < 0: # <<<<<<<<<<<<<< 1374 * raise MemoryError('Can not allocate memory for node structure.') 1375 * else: 1376 */ 1377 __pyx_t_1 = PyObject_RichCompare(__pyx_v_res, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1378 __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1379 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 1380 if (__pyx_t_2) { 1381 1382 /* "bintrees\qavltree.pyx":60 1383 * res = avl_insert(&self._root, key, value) 1384 * if res < 0: 1385 * raise MemoryError('Can not allocate memory for node structure.') # <<<<<<<<<<<<<< 1386 * else: 1387 * self._count += res 1388 */ 1389 __pyx_t_1 = PyObject_Call(__pyx_builtin_MemoryError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1390 __Pyx_GOTREF(__pyx_t_1); 1391 __Pyx_Raise(__pyx_t_1, 0, 0, 0); 1392 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 1393 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1394 goto __pyx_L3; 1395 } 1396 /*else*/ { 1397 1398 /* "bintrees\qavltree.pyx":62 1399 * raise MemoryError('Can not allocate memory for node structure.') 1400 * else: 1401 * self._count += res # <<<<<<<<<<<<<< 1402 * 1403 * def remove(self, key): 1404 */ 1405 __pyx_t_1 = PyInt_FromLong(__pyx_v_self->_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1406 __Pyx_GOTREF(__pyx_t_1); 1407 __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_v_res); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1408 __Pyx_GOTREF(__pyx_t_3); 1409 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 1410 __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1411 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; 1412 __pyx_v_self->_count = __pyx_t_4; 1413 } 1414 __pyx_L3:; 1415 1416 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1417 goto __pyx_L0; 1418 __pyx_L1_error:; 1419 __Pyx_XDECREF(__pyx_t_1); 1420 __Pyx_XDECREF(__pyx_t_3); 1421 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.insert", __pyx_clineno, __pyx_lineno, __pyx_filename); 1422 __pyx_r = NULL; 1423 __pyx_L0:; 1424 __Pyx_XDECREF(__pyx_v_res); 1425 __Pyx_XGIVEREF(__pyx_r); 1426 __Pyx_RefNannyFinishContext(); 1427 return __pyx_r; 1428 } 1429 1430 /* Python wrapper */ 1431 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_19remove(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/ 1432 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_19remove(PyObject *__pyx_v_self, PyObject *__pyx_v_key) { 1433 PyObject *__pyx_r = 0; 1434 __Pyx_RefNannyDeclarations 1435 __Pyx_RefNannySetupContext("remove (wrapper)", 0); 1436 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_18remove(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self), ((PyObject *)__pyx_v_key)); 1437 __Pyx_RefNannyFinishContext(); 1438 return __pyx_r; 1439 } 1440 1441 /* "bintrees\qavltree.pyx":64 1442 * self._count += res 1443 * 1444 * def remove(self, key): # <<<<<<<<<<<<<< 1445 * cdef int result 1446 * result = avl_remove(&self._root, key) 1447 */ 1448 1449 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_18remove(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self, PyObject *__pyx_v_key) { 1450 int __pyx_v_result; 1451 PyObject *__pyx_r = NULL; 1452 __Pyx_RefNannyDeclarations 1453 int __pyx_t_1; 1454 PyObject *__pyx_t_2 = NULL; 1455 PyObject *__pyx_t_3 = NULL; 1456 int __pyx_lineno = 0; 1457 const char *__pyx_filename = NULL; 1458 int __pyx_clineno = 0; 1459 __Pyx_RefNannySetupContext("remove", 0); 1460 1461 /* "bintrees\qavltree.pyx":66 1462 * def remove(self, key): 1463 * cdef int result 1464 * result = avl_remove(&self._root, key) # <<<<<<<<<<<<<< 1465 * if result == 0: 1466 * raise KeyError(str(key)) 1467 */ 1468 __pyx_v_result = avl_remove((&__pyx_v_self->_root), __pyx_v_key); 1469 1470 /* "bintrees\qavltree.pyx":67 1471 * cdef int result 1472 * result = avl_remove(&self._root, key) 1473 * if result == 0: # <<<<<<<<<<<<<< 1474 * raise KeyError(str(key)) 1475 * else: 1476 */ 1477 __pyx_t_1 = (__pyx_v_result == 0); 1478 if (__pyx_t_1) { 1479 1480 /* "bintrees\qavltree.pyx":68 1481 * result = avl_remove(&self._root, key) 1482 * if result == 0: 1483 * raise KeyError(str(key)) # <<<<<<<<<<<<<< 1484 * else: 1485 * self._count -= 1 1486 */ 1487 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1488 __Pyx_GOTREF(__pyx_t_2); 1489 __Pyx_INCREF(__pyx_v_key); 1490 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key); 1491 __Pyx_GIVEREF(__pyx_v_key); 1492 __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1493 __Pyx_GOTREF(__pyx_t_3); 1494 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 1495 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1496 __Pyx_GOTREF(__pyx_t_2); 1497 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); 1498 __Pyx_GIVEREF(__pyx_t_3); 1499 __pyx_t_3 = 0; 1500 __pyx_t_3 = PyObject_Call(__pyx_builtin_KeyError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1501 __Pyx_GOTREF(__pyx_t_3); 1502 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 1503 __Pyx_Raise(__pyx_t_3, 0, 0, 0); 1504 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; 1505 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1506 goto __pyx_L3; 1507 } 1508 /*else*/ { 1509 1510 /* "bintrees\qavltree.pyx":70 1511 * raise KeyError(str(key)) 1512 * else: 1513 * self._count -= 1 # <<<<<<<<<<<<<< 1514 * 1515 * def max_item(self): 1516 */ 1517 __pyx_v_self->_count = (__pyx_v_self->_count - 1); 1518 } 1519 __pyx_L3:; 1520 1521 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1522 goto __pyx_L0; 1523 __pyx_L1_error:; 1524 __Pyx_XDECREF(__pyx_t_2); 1525 __Pyx_XDECREF(__pyx_t_3); 1526 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.remove", __pyx_clineno, __pyx_lineno, __pyx_filename); 1527 __pyx_r = NULL; 1528 __pyx_L0:; 1529 __Pyx_XGIVEREF(__pyx_r); 1530 __Pyx_RefNannyFinishContext(); 1531 return __pyx_r; 1532 } 1533 1534 /* Python wrapper */ 1535 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_21max_item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1536 static char __pyx_doc_8bintrees_8qavltree_8cAVLTree_20max_item[] = " Get item with max key of tree, raises ValueError if tree is empty. "; 1537 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_21max_item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1538 PyObject *__pyx_r = 0; 1539 __Pyx_RefNannyDeclarations 1540 __Pyx_RefNannySetupContext("max_item (wrapper)", 0); 1541 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_20max_item(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self)); 1542 __Pyx_RefNannyFinishContext(); 1543 return __pyx_r; 1544 } 1545 1546 /* "bintrees\qavltree.pyx":72 1547 * self._count -= 1 1548 * 1549 * def max_item(self): # <<<<<<<<<<<<<< 1550 * """ Get item with max key of tree, raises ValueError if tree is empty. """ 1551 * cdef node_t *node 1552 */ 1553 1554 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_20max_item(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self) { 1555 node_t *__pyx_v_node; 1556 PyObject *__pyx_r = NULL; 1557 __Pyx_RefNannyDeclarations 1558 int __pyx_t_1; 1559 PyObject *__pyx_t_2 = NULL; 1560 int __pyx_lineno = 0; 1561 const char *__pyx_filename = NULL; 1562 int __pyx_clineno = 0; 1563 __Pyx_RefNannySetupContext("max_item", 0); 1564 1565 /* "bintrees\qavltree.pyx":75 1566 * """ Get item with max key of tree, raises ValueError if tree is empty. """ 1567 * cdef node_t *node 1568 * node = ct_max_node(self._root) # <<<<<<<<<<<<<< 1569 * if node == NULL: # root is None 1570 * raise ValueError("Tree is empty") 1571 */ 1572 __pyx_v_node = ct_max_node(__pyx_v_self->_root); 1573 1574 /* "bintrees\qavltree.pyx":76 1575 * cdef node_t *node 1576 * node = ct_max_node(self._root) 1577 * if node == NULL: # root is None # <<<<<<<<<<<<<< 1578 * raise ValueError("Tree is empty") 1579 * return (<object>node.key, <object>node.value) 1580 */ 1581 __pyx_t_1 = (__pyx_v_node == NULL); 1582 if (__pyx_t_1) { 1583 1584 /* "bintrees\qavltree.pyx":77 1585 * node = ct_max_node(self._root) 1586 * if node == NULL: # root is None 1587 * raise ValueError("Tree is empty") # <<<<<<<<<<<<<< 1588 * return (<object>node.key, <object>node.value) 1589 * 1590 */ 1591 __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1592 __Pyx_GOTREF(__pyx_t_2); 1593 __Pyx_Raise(__pyx_t_2, 0, 0, 0); 1594 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; 1595 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1596 goto __pyx_L3; 1597 } 1598 __pyx_L3:; 1599 1600 /* "bintrees\qavltree.pyx":78 1601 * if node == NULL: # root is None 1602 * raise ValueError("Tree is empty") 1603 * return (<object>node.key, <object>node.value) # <<<<<<<<<<<<<< 1604 * 1605 * def min_item(self): 1606 */ 1607 __Pyx_XDECREF(__pyx_r); 1608 __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1609 __Pyx_GOTREF(__pyx_t_2); 1610 __Pyx_INCREF(((PyObject *)__pyx_v_node->key)); 1611 PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_node->key)); 1612 __Pyx_GIVEREF(((PyObject *)__pyx_v_node->key)); 1613 __Pyx_INCREF(((PyObject *)__pyx_v_node->value)); 1614 PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_node->value)); 1615 __Pyx_GIVEREF(((PyObject *)__pyx_v_node->value)); 1616 __pyx_r = ((PyObject *)__pyx_t_2); 1617 __pyx_t_2 = 0; 1618 goto __pyx_L0; 1619 1620 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1621 goto __pyx_L0; 1622 __pyx_L1_error:; 1623 __Pyx_XDECREF(__pyx_t_2); 1624 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.max_item", __pyx_clineno, __pyx_lineno, __pyx_filename); 1625 __pyx_r = NULL; 1626 __pyx_L0:; 1627 __Pyx_XGIVEREF(__pyx_r); 1628 __Pyx_RefNannyFinishContext(); 1629 return __pyx_r; 1630 } 1631 1632 /* Python wrapper */ 1633 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_23min_item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1634 static char __pyx_doc_8bintrees_8qavltree_8cAVLTree_22min_item[] = " Get item with min key of tree, raises ValueError if tree is empty. "; 1635 static PyObject *__pyx_pw_8bintrees_8qavltree_8cAVLTree_23min_item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1636 PyObject *__pyx_r = 0; 1637 __Pyx_RefNannyDeclarations 1638 __Pyx_RefNannySetupContext("min_item (wrapper)", 0); 1639 __pyx_r = __pyx_pf_8bintrees_8qavltree_8cAVLTree_22min_item(((struct __pyx_obj_8bintrees_8qavltree_cAVLTree *)__pyx_v_self)); 1640 __Pyx_RefNannyFinishContext(); 1641 return __pyx_r; 1642 } 1643 1644 /* "bintrees\qavltree.pyx":80 1645 * return (<object>node.key, <object>node.value) 1646 * 1647 * def min_item(self): # <<<<<<<<<<<<<< 1648 * """ Get item with min key of tree, raises ValueError if tree is empty. """ 1649 * cdef node_t *node 1650 */ 1651 1652 static PyObject *__pyx_pf_8bintrees_8qavltree_8cAVLTree_22min_item(struct __pyx_obj_8bintrees_8qavltree_cAVLTree *__pyx_v_self) { 1653 node_t *__pyx_v_node; 1654 PyObject *__pyx_r = NULL; 1655 __Pyx_RefNannyDeclarations 1656 int __pyx_t_1; 1657 PyObject *__pyx_t_2 = NULL; 1658 int __pyx_lineno = 0; 1659 const char *__pyx_filename = NULL; 1660 int __pyx_clineno = 0; 1661 __Pyx_RefNannySetupContext("min_item", 0); 1662 1663 /* "bintrees\qavltree.pyx":83 1664 * """ Get item with min key of tree, raises ValueError if tree is empty. """ 1665 * cdef node_t *node 1666 * node = ct_min_node(self._root) # <<<<<<<<<<<<<< 1667 * if node == NULL: # root is None 1668 * raise ValueError("Tree is empty") 1669 */ 1670 __pyx_v_node = ct_min_node(__pyx_v_self->_root); 1671 1672 /* "bintrees\qavltree.pyx":84 1673 * cdef node_t *node 1674 * node = ct_min_node(self._root) 1675 * if node == NULL: # root is None # <<<<<<<<<<<<<< 1676 * raise ValueError("Tree is empty") 1677 * return (<object>node.key, <object>node.value) 1678 */ 1679 __pyx_t_1 = (__pyx_v_node == NULL); 1680 if (__pyx_t_1) { 1681 1682 /* "bintrees\qavltree.pyx":85 1683 * node = ct_min_node(self._root) 1684 * if node == NULL: # root is None 1685 * raise ValueError("Tree is empty") # <<<<<<<<<<<<<< 1686 * return (<object>node.key, <object>node.value) 1687 * 1688 */ 1689 __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_5), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1690 __Pyx_GOTREF(__pyx_t_2); 1691 __Pyx_Raise(__pyx_t_2, 0, 0, 0); 1692 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; 1693 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1694 goto __pyx_L3; 1695 } 1696 __pyx_L3:; 1697 1698 /* "bintrees\qavltree.pyx":86 1699 * if node == NULL: # root is None 1700 * raise ValueError("Tree is empty") 1701 * return (<object>node.key, <object>node.value) # <<<<<<<<<<<<<< 1702 * 1703 */ 1704 __Pyx_XDECREF(__pyx_r); 1705 __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1706 __Pyx_GOTREF(__pyx_t_2); 1707 __Pyx_INCREF(((PyObject *)__pyx_v_node->key)); 1708 PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_node->key)); 1709 __Pyx_GIVEREF(((PyObject *)__pyx_v_node->key)); 1710 __Pyx_INCREF(((PyObject *)__pyx_v_node->value)); 1711 PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_node->value)); 1712 __Pyx_GIVEREF(((PyObject *)__pyx_v_node->value)); 1713 __pyx_r = ((PyObject *)__pyx_t_2); 1714 __pyx_t_2 = 0; 1715 goto __pyx_L0; 1716 1717 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1718 goto __pyx_L0; 1719 __pyx_L1_error:; 1720 __Pyx_XDECREF(__pyx_t_2); 1721 __Pyx_AddTraceback("bintrees.qavltree.cAVLTree.min_item", __pyx_clineno, __pyx_lineno, __pyx_filename); 1722 __pyx_r = NULL; 1723 __pyx_L0:; 1724 __Pyx_XGIVEREF(__pyx_r); 1725 __Pyx_RefNannyFinishContext(); 1726 return __pyx_r; 1727 } 1728 1729 static PyObject *__pyx_tp_new_8bintrees_8qavltree_cAVLTree(PyTypeObject *t, PyObject *a, PyObject *k) { 1730 PyObject *o = (*t->tp_alloc)(t, 0); 1731 if (!o) return 0; 1732 if (__pyx_pw_8bintrees_8qavltree_8cAVLTree_1__cinit__(o, a, k) < 0) { 1733 Py_DECREF(o); o = 0; 1734 } 1735 return o; 1736 } 1737 1738 static void __pyx_tp_dealloc_8bintrees_8qavltree_cAVLTree(PyObject *o) { 1739 { 1740 PyObject *etype, *eval, *etb; 1741 PyErr_Fetch(&etype, &eval, &etb); 1742 ++Py_REFCNT(o); 1743 __pyx_pw_8bintrees_8qavltree_8cAVLTree_3__dealloc__(o); 1744 if (PyErr_Occurred()) PyErr_WriteUnraisable(o); 1745 --Py_REFCNT(o); 1746 PyErr_Restore(etype, eval, etb); 1747 } 1748 (*Py_TYPE(o)->tp_free)(o); 1749 } 1750 1751 static PyMethodDef __pyx_methods_8bintrees_8qavltree_cAVLTree[] = { 1752 {__Pyx_NAMESTR("count"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_5count, METH_NOARGS, __Pyx_DOCSTR(0)}, 1753 {__Pyx_NAMESTR("__getstate__"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_7__getstate__, METH_NOARGS, __Pyx_DOCSTR(0)}, 1754 {__Pyx_NAMESTR("__setstate__"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_9__setstate__, METH_O, __Pyx_DOCSTR(0)}, 1755 {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_11clear, METH_NOARGS, __Pyx_DOCSTR(0)}, 1756 {__Pyx_NAMESTR("get_value"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_13get_value, METH_O, __Pyx_DOCSTR(0)}, 1757 {__Pyx_NAMESTR("get_walker"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_15get_walker, METH_NOARGS, __Pyx_DOCSTR(0)}, 1758 {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_17insert, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, 1759 {__Pyx_NAMESTR("remove"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_19remove, METH_O, __Pyx_DOCSTR(0)}, 1760 {__Pyx_NAMESTR("max_item"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_21max_item, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_8bintrees_8qavltree_8cAVLTree_20max_item)}, 1761 {__Pyx_NAMESTR("min_item"), (PyCFunction)__pyx_pw_8bintrees_8qavltree_8cAVLTree_23min_item, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_8bintrees_8qavltree_8cAVLTree_22min_item)}, 1762 {0, 0, 0, 0} 1763 }; 1764 1765 static PyNumberMethods __pyx_tp_as_number_cAVLTree = { 1766 0, /*nb_add*/ 1767 0, /*nb_subtract*/ 1768 0, /*nb_multiply*/ 1769 #if PY_MAJOR_VERSION < 3 1770 0, /*nb_divide*/ 1771 #endif 1772 0, /*nb_remainder*/ 1773 0, /*nb_divmod*/ 1774 0, /*nb_power*/ 1775 0, /*nb_negative*/ 1776 0, /*nb_positive*/ 1777 0, /*nb_absolute*/ 1778 0, /*nb_nonzero*/ 1779 0, /*nb_invert*/ 1780 0, /*nb_lshift*/ 1781 0, /*nb_rshift*/ 1782 0, /*nb_and*/ 1783 0, /*nb_xor*/ 1784 0, /*nb_or*/ 1785 #if PY_MAJOR_VERSION < 3 1786 0, /*nb_coerce*/ 1787 #endif 1788 0, /*nb_int*/ 1789 #if PY_MAJOR_VERSION < 3 1790 0, /*nb_long*/ 1791 #else 1792 0, /*reserved*/ 1793 #endif 1794 0, /*nb_float*/ 1795 #if PY_MAJOR_VERSION < 3 1796 0, /*nb_oct*/ 1797 #endif 1798 #if PY_MAJOR_VERSION < 3 1799 0, /*nb_hex*/ 1800 #endif 1801 0, /*nb_inplace_add*/ 1802 0, /*nb_inplace_subtract*/ 1803 0, /*nb_inplace_multiply*/ 1804 #if PY_MAJOR_VERSION < 3 1805 0, /*nb_inplace_divide*/ 1806 #endif 1807 0, /*nb_inplace_remainder*/ 1808 0, /*nb_inplace_power*/ 1809 0, /*nb_inplace_lshift*/ 1810 0, /*nb_inplace_rshift*/ 1811 0, /*nb_inplace_and*/ 1812 0, /*nb_inplace_xor*/ 1813 0, /*nb_inplace_or*/ 1814 0, /*nb_floor_divide*/ 1815 0, /*nb_true_divide*/ 1816 0, /*nb_inplace_floor_divide*/ 1817 0, /*nb_inplace_true_divide*/ 1818 #if PY_VERSION_HEX >= 0x02050000 1819 0, /*nb_index*/ 1820 #endif 1821 }; 1822 1823 static PySequenceMethods __pyx_tp_as_sequence_cAVLTree = { 1824 0, /*sq_length*/ 1825 0, /*sq_concat*/ 1826 0, /*sq_repeat*/ 1827 0, /*sq_item*/ 1828 0, /*sq_slice*/ 1829 0, /*sq_ass_item*/ 1830 0, /*sq_ass_slice*/ 1831 0, /*sq_contains*/ 1832 0, /*sq_inplace_concat*/ 1833 0, /*sq_inplace_repeat*/ 1834 }; 1835 1836 static PyMappingMethods __pyx_tp_as_mapping_cAVLTree = { 1837 0, /*mp_length*/ 1838 0, /*mp_subscript*/ 1839 0, /*mp_ass_subscript*/ 1840 }; 1841 1842 static PyBufferProcs __pyx_tp_as_buffer_cAVLTree = { 1843 #if PY_MAJOR_VERSION < 3 1844 0, /*bf_getreadbuffer*/ 1845 #endif 1846 #if PY_MAJOR_VERSION < 3 1847 0, /*bf_getwritebuffer*/ 1848 #endif 1849 #if PY_MAJOR_VERSION < 3 1850 0, /*bf_getsegcount*/ 1851 #endif 1852 #if PY_MAJOR_VERSION < 3 1853 0, /*bf_getcharbuffer*/ 1854 #endif 1855 #if PY_VERSION_HEX >= 0x02060000 1856 0, /*bf_getbuffer*/ 1857 #endif 1858 #if PY_VERSION_HEX >= 0x02060000 1859 0, /*bf_releasebuffer*/ 1860 #endif 1861 }; 1862 1863 static PyTypeObject __pyx_type_8bintrees_8qavltree_cAVLTree = { 1864 PyVarObject_HEAD_INIT(0, 0) 1865 __Pyx_NAMESTR("bintrees.qavltree.cAVLTree"), /*tp_name*/ 1866 sizeof(struct __pyx_obj_8bintrees_8qavltree_cAVLTree), /*tp_basicsize*/ 1867 0, /*tp_itemsize*/ 1868 __pyx_tp_dealloc_8bintrees_8qavltree_cAVLTree, /*tp_dealloc*/ 1869 0, /*tp_print*/ 1870 0, /*tp_getattr*/ 1871 0, /*tp_setattr*/ 1872 #if PY_MAJOR_VERSION < 3 1873 0, /*tp_compare*/ 1874 #else 1875 0, /*reserved*/ 1876 #endif 1877 0, /*tp_repr*/ 1878 &__pyx_tp_as_number_cAVLTree, /*tp_as_number*/ 1879 &__pyx_tp_as_sequence_cAVLTree, /*tp_as_sequence*/ 1880 &__pyx_tp_as_mapping_cAVLTree, /*tp_as_mapping*/ 1881 0, /*tp_hash*/ 1882 0, /*tp_call*/ 1883 0, /*tp_str*/ 1884 0, /*tp_getattro*/ 1885 0, /*tp_setattro*/ 1886 &__pyx_tp_as_buffer_cAVLTree, /*tp_as_buffer*/ 1887 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ 1888 0, /*tp_doc*/ 1889 0, /*tp_traverse*/ 1890 0, /*tp_clear*/ 1891 0, /*tp_richcompare*/ 1892 0, /*tp_weaklistoffset*/ 1893 0, /*tp_iter*/ 1894 0, /*tp_iternext*/ 1895 __pyx_methods_8bintrees_8qavltree_cAVLTree, /*tp_methods*/ 1896 0, /*tp_members*/ 1897 0, /*tp_getset*/ 1898 0, /*tp_base*/ 1899 0, /*tp_dict*/ 1900 0, /*tp_descr_get*/ 1901 0, /*tp_descr_set*/ 1902 0, /*tp_dictoffset*/ 1903 0, /*tp_init*/ 1904 0, /*tp_alloc*/ 1905 __pyx_tp_new_8bintrees_8qavltree_cAVLTree, /*tp_new*/ 1906 0, /*tp_free*/ 1907 0, /*tp_is_gc*/ 1908 0, /*tp_bases*/ 1909 0, /*tp_mro*/ 1910 0, /*tp_cache*/ 1911 0, /*tp_subclasses*/ 1912 0, /*tp_weaklist*/ 1913 0, /*tp_del*/ 1914 #if PY_VERSION_HEX >= 0x02060000 1915 0, /*tp_version_tag*/ 1916 #endif 1917 }; 1918 1919 static PyMethodDef __pyx_methods[] = { 1920 {0, 0, 0, 0} 1921 }; 1922 1923 #if PY_MAJOR_VERSION >= 3 1924 static struct PyModuleDef __pyx_moduledef = { 1925 PyModuleDef_HEAD_INIT, 1926 __Pyx_NAMESTR("qavltree"), 1927 0, /* m_doc */ 1928 -1, /* m_size */ 1929 __pyx_methods /* m_methods */, 1930 NULL, /* m_reload */ 1931 NULL, /* m_traverse */ 1932 NULL, /* m_clear */ 1933 NULL /* m_free */ 1934 }; 1935 #endif 1936 1937 static __Pyx_StringTabEntry __pyx_string_tab[] = { 1938 {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, 1939 {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0}, 1940 {&__pyx_n_s__KeyError, __pyx_k__KeyError, sizeof(__pyx_k__KeyError), 0, 0, 1, 1}, 1941 {&__pyx_n_s__MemoryError, __pyx_k__MemoryError, sizeof(__pyx_k__MemoryError), 0, 0, 1, 1}, 1942 {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1}, 1943 {&__pyx_n_s____all__, __pyx_k____all__, sizeof(__pyx_k____all__), 0, 0, 1, 1}, 1944 {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, 1945 {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, 1946 {&__pyx_n_s__cAVLTree, __pyx_k__cAVLTree, sizeof(__pyx_k__cAVLTree), 0, 0, 1, 1}, 1947 {&__pyx_n_s__cWalker, __pyx_k__cWalker, sizeof(__pyx_k__cWalker), 0, 0, 1, 1}, 1948 {&__pyx_n_s__count, __pyx_k__count, sizeof(__pyx_k__count), 0, 0, 1, 1}, 1949 {&__pyx_n_s__cwalker, __pyx_k__cwalker, sizeof(__pyx_k__cwalker), 0, 0, 1, 1}, 1950 {&__pyx_n_s__items, __pyx_k__items, sizeof(__pyx_k__items), 0, 0, 1, 1}, 1951 {&__pyx_n_s__key, __pyx_k__key, sizeof(__pyx_k__key), 0, 0, 1, 1}, 1952 {&__pyx_n_s__property, __pyx_k__property, sizeof(__pyx_k__property), 0, 0, 1, 1}, 1953 {&__pyx_n_s__update, __pyx_k__update, sizeof(__pyx_k__update), 0, 0, 1, 1}, 1954 {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1}, 1955 {0, 0, 0, 0, 0, 0, 0} 1956 }; 1957 static int __Pyx_InitCachedBuiltins(void) { 1958 __pyx_builtin_property = __Pyx_GetName(__pyx_b, __pyx_n_s__property); if (!__pyx_builtin_property) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1959 __pyx_builtin_KeyError = __Pyx_GetName(__pyx_b, __pyx_n_s__KeyError); if (!__pyx_builtin_KeyError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1960 __pyx_builtin_MemoryError = __Pyx_GetName(__pyx_b, __pyx_n_s__MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1961 __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1962 return 0; 1963 __pyx_L1_error:; 1964 return -1; 1965 } 1966 1967 static int __Pyx_InitCachedConstants(void) { 1968 __Pyx_RefNannyDeclarations 1969 __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); 1970 1971 /* "bintrees\qavltree.pyx":60 1972 * res = avl_insert(&self._root, key, value) 1973 * if res < 0: 1974 * raise MemoryError('Can not allocate memory for node structure.') # <<<<<<<<<<<<<< 1975 * else: 1976 * self._count += res 1977 */ 1978 __pyx_k_tuple_2 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1979 __Pyx_GOTREF(__pyx_k_tuple_2); 1980 __Pyx_INCREF(((PyObject *)__pyx_kp_s_1)); 1981 PyTuple_SET_ITEM(__pyx_k_tuple_2, 0, ((PyObject *)__pyx_kp_s_1)); 1982 __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1)); 1983 __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2)); 1984 1985 /* "bintrees\qavltree.pyx":77 1986 * node = ct_max_node(self._root) 1987 * if node == NULL: # root is None 1988 * raise ValueError("Tree is empty") # <<<<<<<<<<<<<< 1989 * return (<object>node.key, <object>node.value) 1990 * 1991 */ 1992 __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1993 __Pyx_GOTREF(__pyx_k_tuple_4); 1994 __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); 1995 PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_s_3)); 1996 __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); 1997 __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4)); 1998 1999 /* "bintrees\qavltree.pyx":85 2000 * node = ct_min_node(self._root) 2001 * if node == NULL: # root is None 2002 * raise ValueError("Tree is empty") # <<<<<<<<<<<<<< 2003 * return (<object>node.key, <object>node.value) 2004 * 2005 */ 2006 __pyx_k_tuple_5 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2007 __Pyx_GOTREF(__pyx_k_tuple_5); 2008 __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); 2009 PyTuple_SET_ITEM(__pyx_k_tuple_5, 0, ((PyObject *)__pyx_kp_s_3)); 2010 __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); 2011 __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_5)); 2012 __Pyx_RefNannyFinishContext(); 2013 return 0; 2014 __pyx_L1_error:; 2015 __Pyx_RefNannyFinishContext(); 2016 return -1; 2017 } 2018 2019 static int __Pyx_InitGlobals(void) { 2020 if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; 2021 __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;}; 2022 return 0; 2023 __pyx_L1_error:; 2024 return -1; 2025 } 2026 2027 #if PY_MAJOR_VERSION < 3 2028 PyMODINIT_FUNC initqavltree(void); /*proto*/ 2029 PyMODINIT_FUNC initqavltree(void) 2030 #else 2031 PyMODINIT_FUNC PyInit_qavltree(void); /*proto*/ 2032 PyMODINIT_FUNC PyInit_qavltree(void) 2033 #endif 2034 { 2035 PyObject *__pyx_t_1 = NULL; 2036 PyObject *__pyx_t_2 = NULL; 2037 __Pyx_RefNannyDeclarations 2038 #if CYTHON_REFNANNY 2039 __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); 2040 if (!__Pyx_RefNanny) { 2041 PyErr_Clear(); 2042 __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); 2043 if (!__Pyx_RefNanny) 2044 Py_FatalError("failed to import 'refnanny' module"); 2045 } 2046 #endif 2047 __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_qavltree(void)", 0); 2048 if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2049 __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;} 2050 __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;} 2051 #ifdef __Pyx_CyFunction_USED 2052 if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2053 #endif 2054 #ifdef __Pyx_FusedFunction_USED 2055 if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2056 #endif 2057 #ifdef __Pyx_Generator_USED 2058 if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2059 #endif 2060 /*--- Library function declarations ---*/ 2061 /*--- Threads initialization code ---*/ 2062 #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS 2063 #ifdef WITH_THREAD /* Python build with threading support? */ 2064 PyEval_InitThreads(); 2065 #endif 2066 #endif 2067 /*--- Module creation code ---*/ 2068 #if PY_MAJOR_VERSION < 3 2069 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("qavltree"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); 2070 #else 2071 __pyx_m = PyModule_Create(&__pyx_moduledef); 2072 #endif 2073 if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2074 #if PY_MAJOR_VERSION >= 3 2075 { 2076 PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2077 if (!PyDict_GetItemString(modules, "bintrees.qavltree")) { 2078 if (unlikely(PyDict_SetItemString(modules, "bintrees.qavltree", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2079 } 2080 } 2081 #endif 2082 __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;} 2083 #if CYTHON_COMPILING_IN_PYPY 2084 Py_INCREF(__pyx_b); 2085 #endif 2086 if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; 2087 /*--- Initialize various global constants etc. ---*/ 2088 if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2089 if (__pyx_module_is_main_bintrees__qavltree) { 2090 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;}; 2091 } 2092 /*--- Builtin init code ---*/ 2093 if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2094 /*--- Constants init code ---*/ 2095 if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2096 /*--- Global init code ---*/ 2097 /*--- Variable export code ---*/ 2098 /*--- Function export code ---*/ 2099 /*--- Type init code ---*/ 2100 if (PyType_Ready(&__pyx_type_8bintrees_8qavltree_cAVLTree) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2101 if (__Pyx_SetAttrString(__pyx_m, "cAVLTree", (PyObject *)&__pyx_type_8bintrees_8qavltree_cAVLTree) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2102 __pyx_ptype_8bintrees_8qavltree_cAVLTree = &__pyx_type_8bintrees_8qavltree_cAVLTree; 2103 /*--- Type import code ---*/ 2104 __pyx_ptype_8bintrees_7cwalker_cWalker = __Pyx_ImportType("bintrees.cwalker", "cWalker", sizeof(struct __pyx_obj_8bintrees_7cwalker_cWalker), 1); if (unlikely(!__pyx_ptype_8bintrees_7cwalker_cWalker)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2105 __pyx_vtabptr_8bintrees_7cwalker_cWalker = (struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker*)__Pyx_GetVtable(__pyx_ptype_8bintrees_7cwalker_cWalker->tp_dict); if (unlikely(!__pyx_vtabptr_8bintrees_7cwalker_cWalker)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2106 /*--- Variable import code ---*/ 2107 /*--- Function import code ---*/ 2108 /*--- Execution code ---*/ 2109 2110 /* "bintrees\qavltree.pyx":9 2111 * # License: MIT License 2112 * 2113 * __all__ = ['cAVLTree'] # <<<<<<<<<<<<<< 2114 * 2115 * from cwalker import cWalker 2116 */ 2117 __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2118 __Pyx_GOTREF(__pyx_t_1); 2119 __Pyx_INCREF(((PyObject *)__pyx_n_s__cAVLTree)); 2120 PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__cAVLTree)); 2121 __Pyx_GIVEREF(((PyObject *)__pyx_n_s__cAVLTree)); 2122 if (PyObject_SetAttr(__pyx_m, __pyx_n_s____all__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2123 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; 2124 2125 /* "bintrees\qavltree.pyx":11 2126 * __all__ = ['cAVLTree'] 2127 * 2128 * from cwalker import cWalker # <<<<<<<<<<<<<< 2129 * 2130 * from cwalker cimport * 2131 */ 2132 __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2133 __Pyx_GOTREF(__pyx_t_1); 2134 __Pyx_INCREF(((PyObject *)__pyx_n_s__cWalker)); 2135 PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__cWalker)); 2136 __Pyx_GIVEREF(((PyObject *)__pyx_n_s__cWalker)); 2137 __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__cwalker), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2138 __Pyx_GOTREF(__pyx_t_2); 2139 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; 2140 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; 2141 2142 /* "bintrees\qavltree.pyx":30 2143 * 2144 * @property 2145 * def count(self): # <<<<<<<<<<<<<< 2146 * return self._count 2147 * 2148 */ 2149 __pyx_t_2 = __Pyx_GetName((PyObject *)__pyx_ptype_8bintrees_8qavltree_cAVLTree, __pyx_n_s__count); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2150 __Pyx_GOTREF(__pyx_t_2); 2151 __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2152 __Pyx_GOTREF(__pyx_t_1); 2153 PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); 2154 __Pyx_GIVEREF(__pyx_t_2); 2155 __pyx_t_2 = 0; 2156 __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2157 __Pyx_GOTREF(__pyx_t_2); 2158 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; 2159 if (PyDict_SetItem((PyObject *)__pyx_ptype_8bintrees_8qavltree_cAVLTree->tp_dict, __pyx_n_s__count, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2160 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; 2161 PyType_Modified(__pyx_ptype_8bintrees_8qavltree_cAVLTree); 2162 2163 /* "bintrees\qavltree.pyx":1 2164 * #!/usr/bin/env python # <<<<<<<<<<<<<< 2165 * #coding:utf-8 2166 * # Author: mozman 2167 */ 2168 __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2169 __Pyx_GOTREF(((PyObject *)__pyx_t_2)); 2170 if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2171 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2172 goto __pyx_L0; 2173 __pyx_L1_error:; 2174 __Pyx_XDECREF(__pyx_t_1); 2175 __Pyx_XDECREF(__pyx_t_2); 2176 if (__pyx_m) { 2177 __Pyx_AddTraceback("init bintrees.qavltree", __pyx_clineno, __pyx_lineno, __pyx_filename); 2178 Py_DECREF(__pyx_m); __pyx_m = 0; 2179 } else if (!PyErr_Occurred()) { 2180 PyErr_SetString(PyExc_ImportError, "init bintrees.qavltree"); 2181 } 2182 __pyx_L0:; 2183 __Pyx_RefNannyFinishContext(); 2184 #if PY_MAJOR_VERSION < 3 2185 return; 2186 #else 2187 return __pyx_m; 2188 #endif 2189 } 2190 2191 /* Runtime support code */ 2192 #if CYTHON_REFNANNY 2193 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { 2194 PyObject *m = NULL, *p = NULL; 2195 void *r = NULL; 2196 m = PyImport_ImportModule((char *)modname); 2197 if (!m) goto end; 2198 p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); 2199 if (!p) goto end; 2200 r = PyLong_AsVoidPtr(p); 2201 end: 2202 Py_XDECREF(p); 2203 Py_XDECREF(m); 2204 return (__Pyx_RefNannyAPIStruct *)r; 2205 } 2206 #endif /* CYTHON_REFNANNY */ 2207 2208 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { 2209 PyObject *result; 2210 result = PyObject_GetAttr(dict, name); 2211 if (!result) { 2212 if (dict != __pyx_b) { 2213 PyErr_Clear(); 2214 result = PyObject_GetAttr(__pyx_b, name); 2215 } 2216 if (!result) { 2217 PyErr_SetObject(PyExc_NameError, name); 2218 } 2219 } 2220 return result; 2221 } 2222 2223 static void __Pyx_RaiseDoubleKeywordsError( 2224 const char* func_name, 2225 PyObject* kw_name) 2226 { 2227 PyErr_Format(PyExc_TypeError, 2228 #if PY_MAJOR_VERSION >= 3 2229 "%s() got multiple values for keyword argument '%U'", func_name, kw_name); 2230 #else 2231 "%s() got multiple values for keyword argument '%s'", func_name, 2232 PyString_AsString(kw_name)); 2233 #endif 2234 } 2235 2236 static int __Pyx_ParseOptionalKeywords( 2237 PyObject *kwds, 2238 PyObject **argnames[], 2239 PyObject *kwds2, 2240 PyObject *values[], 2241 Py_ssize_t num_pos_args, 2242 const char* function_name) 2243 { 2244 PyObject *key = 0, *value = 0; 2245 Py_ssize_t pos = 0; 2246 PyObject*** name; 2247 PyObject*** first_kw_arg = argnames + num_pos_args; 2248 while (PyDict_Next(kwds, &pos, &key, &value)) { 2249 name = first_kw_arg; 2250 while (*name && (**name != key)) name++; 2251 if (*name) { 2252 values[name-argnames] = value; 2253 continue; 2254 } 2255 name = first_kw_arg; 2256 #if PY_MAJOR_VERSION < 3 2257 if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { 2258 while (*name) { 2259 if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) 2260 && _PyString_Eq(**name, key)) { 2261 values[name-argnames] = value; 2262 break; 2263 } 2264 name++; 2265 } 2266 if (*name) continue; 2267 else { 2268 PyObject*** argname = argnames; 2269 while (argname != first_kw_arg) { 2270 if ((**argname == key) || ( 2271 (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) 2272 && _PyString_Eq(**argname, key))) { 2273 goto arg_passed_twice; 2274 } 2275 argname++; 2276 } 2277 } 2278 } else 2279 #endif 2280 if (likely(PyUnicode_Check(key))) { 2281 while (*name) { 2282 int cmp = (**name == key) ? 0 : 2283 #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 2284 (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : 2285 #endif 2286 PyUnicode_Compare(**name, key); 2287 if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; 2288 if (cmp == 0) { 2289 values[name-argnames] = value; 2290 break; 2291 } 2292 name++; 2293 } 2294 if (*name) continue; 2295 else { 2296 PyObject*** argname = argnames; 2297 while (argname != first_kw_arg) { 2298 int cmp = (**argname == key) ? 0 : 2299 #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 2300 (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : 2301 #endif 2302 PyUnicode_Compare(**argname, key); 2303 if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; 2304 if (cmp == 0) goto arg_passed_twice; 2305 argname++; 2306 } 2307 } 2308 } else 2309 goto invalid_keyword_type; 2310 if (kwds2) { 2311 if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; 2312 } else { 2313 goto invalid_keyword; 2314 } 2315 } 2316 return 0; 2317 arg_passed_twice: 2318 __Pyx_RaiseDoubleKeywordsError(function_name, key); 2319 goto bad; 2320 invalid_keyword_type: 2321 PyErr_Format(PyExc_TypeError, 2322 "%s() keywords must be strings", function_name); 2323 goto bad; 2324 invalid_keyword: 2325 PyErr_Format(PyExc_TypeError, 2326 #if PY_MAJOR_VERSION < 3 2327 "%s() got an unexpected keyword argument '%s'", 2328 function_name, PyString_AsString(key)); 2329 #else 2330 "%s() got an unexpected keyword argument '%U'", 2331 function_name, key); 2332 #endif 2333 bad: 2334 return -1; 2335 } 2336 2337 static void __Pyx_RaiseArgtupleInvalid( 2338 const char* func_name, 2339 int exact, 2340 Py_ssize_t num_min, 2341 Py_ssize_t num_max, 2342 Py_ssize_t num_found) 2343 { 2344 Py_ssize_t num_expected; 2345 const char *more_or_less; 2346 if (num_found < num_min) { 2347 num_expected = num_min; 2348 more_or_less = "at least"; 2349 } else { 2350 num_expected = num_max; 2351 more_or_less = "at most"; 2352 } 2353 if (exact) { 2354 more_or_less = "exactly"; 2355 } 2356 PyErr_Format(PyExc_TypeError, 2357 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)", 2358 func_name, more_or_less, num_expected, 2359 (num_expected == 1) ? "" : "s", num_found); 2360 } 2361 2362 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { 2363 #if CYTHON_COMPILING_IN_CPYTHON 2364 PyObject *tmp_type, *tmp_value, *tmp_tb; 2365 PyThreadState *tstate = PyThreadState_GET(); 2366 tmp_type = tstate->curexc_type; 2367 tmp_value = tstate->curexc_value; 2368 tmp_tb = tstate->curexc_traceback; 2369 tstate->curexc_type = type; 2370 tstate->curexc_value = value; 2371 tstate->curexc_traceback = tb; 2372 Py_XDECREF(tmp_type); 2373 Py_XDECREF(tmp_value); 2374 Py_XDECREF(tmp_tb); 2375 #else 2376 PyErr_Restore(type, value, tb); 2377 #endif 2378 } 2379 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { 2380 #if CYTHON_COMPILING_IN_CPYTHON 2381 PyThreadState *tstate = PyThreadState_GET(); 2382 *type = tstate->curexc_type; 2383 *value = tstate->curexc_value; 2384 *tb = tstate->curexc_traceback; 2385 tstate->curexc_type = 0; 2386 tstate->curexc_value = 0; 2387 tstate->curexc_traceback = 0; 2388 #else 2389 PyErr_Fetch(type, value, tb); 2390 #endif 2391 } 2392 2393 #if PY_MAJOR_VERSION < 3 2394 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, 2395 CYTHON_UNUSED PyObject *cause) { 2396 Py_XINCREF(type); 2397 if (!value || value == Py_None) 2398 value = NULL; 2399 else 2400 Py_INCREF(value); 2401 if (!tb || tb == Py_None) 2402 tb = NULL; 2403 else { 2404 Py_INCREF(tb); 2405 if (!PyTraceBack_Check(tb)) { 2406 PyErr_SetString(PyExc_TypeError, 2407 "raise: arg 3 must be a traceback or None"); 2408 goto raise_error; 2409 } 2410 } 2411 #if PY_VERSION_HEX < 0x02050000 2412 if (PyClass_Check(type)) { 2413 #else 2414 if (PyType_Check(type)) { 2415 #endif 2416 #if CYTHON_COMPILING_IN_PYPY 2417 if (!value) { 2418 Py_INCREF(Py_None); 2419 value = Py_None; 2420 } 2421 #endif 2422 PyErr_NormalizeException(&type, &value, &tb); 2423 } else { 2424 if (value) { 2425 PyErr_SetString(PyExc_TypeError, 2426 "instance exception may not have a separate value"); 2427 goto raise_error; 2428 } 2429 value = type; 2430 #if PY_VERSION_HEX < 0x02050000 2431 if (PyInstance_Check(type)) { 2432 type = (PyObject*) ((PyInstanceObject*)type)->in_class; 2433 Py_INCREF(type); 2434 } 2435 else { 2436 type = 0; 2437 PyErr_SetString(PyExc_TypeError, 2438 "raise: exception must be an old-style class or instance"); 2439 goto raise_error; 2440 } 2441 #else 2442 type = (PyObject*) Py_TYPE(type); 2443 Py_INCREF(type); 2444 if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { 2445 PyErr_SetString(PyExc_TypeError, 2446 "raise: exception class must be a subclass of BaseException"); 2447 goto raise_error; 2448 } 2449 #endif 2450 } 2451 __Pyx_ErrRestore(type, value, tb); 2452 return; 2453 raise_error: 2454 Py_XDECREF(value); 2455 Py_XDECREF(type); 2456 Py_XDECREF(tb); 2457 return; 2458 } 2459 #else /* Python 3+ */ 2460 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { 2461 PyObject* owned_instance = NULL; 2462 if (tb == Py_None) { 2463 tb = 0; 2464 } else if (tb && !PyTraceBack_Check(tb)) { 2465 PyErr_SetString(PyExc_TypeError, 2466 "raise: arg 3 must be a traceback or None"); 2467 goto bad; 2468 } 2469 if (value == Py_None) 2470 value = 0; 2471 if (PyExceptionInstance_Check(type)) { 2472 if (value) { 2473 PyErr_SetString(PyExc_TypeError, 2474 "instance exception may not have a separate value"); 2475 goto bad; 2476 } 2477 value = type; 2478 type = (PyObject*) Py_TYPE(value); 2479 } else if (PyExceptionClass_Check(type)) { 2480 PyObject *args; 2481 if (!value) 2482 args = PyTuple_New(0); 2483 else if (PyTuple_Check(value)) { 2484 Py_INCREF(value); 2485 args = value; 2486 } 2487 else 2488 args = PyTuple_Pack(1, value); 2489 if (!args) 2490 goto bad; 2491 owned_instance = PyEval_CallObject(type, args); 2492 Py_DECREF(args); 2493 if (!owned_instance) 2494 goto bad; 2495 value = owned_instance; 2496 if (!PyExceptionInstance_Check(value)) { 2497 PyErr_Format(PyExc_TypeError, 2498 "calling %R should have returned an instance of " 2499 "BaseException, not %R", 2500 type, Py_TYPE(value)); 2501 goto bad; 2502 } 2503 } else { 2504 PyErr_SetString(PyExc_TypeError, 2505 "raise: exception class must be a subclass of BaseException"); 2506 goto bad; 2507 } 2508 if (cause && cause != Py_None) { 2509 PyObject *fixed_cause; 2510 if (PyExceptionClass_Check(cause)) { 2511 fixed_cause = PyObject_CallObject(cause, NULL); 2512 if (fixed_cause == NULL) 2513 goto bad; 2514 } 2515 else if (PyExceptionInstance_Check(cause)) { 2516 fixed_cause = cause; 2517 Py_INCREF(fixed_cause); 2518 } 2519 else { 2520 PyErr_SetString(PyExc_TypeError, 2521 "exception causes must derive from " 2522 "BaseException"); 2523 goto bad; 2524 } 2525 PyException_SetCause(value, fixed_cause); 2526 } 2527 PyErr_SetObject(type, value); 2528 if (tb) { 2529 PyThreadState *tstate = PyThreadState_GET(); 2530 PyObject* tmp_tb = tstate->curexc_traceback; 2531 if (tb != tmp_tb) { 2532 Py_INCREF(tb); 2533 tstate->curexc_traceback = tb; 2534 Py_XDECREF(tmp_tb); 2535 } 2536 } 2537 bad: 2538 Py_XDECREF(owned_instance); 2539 return; 2540 } 2541 #endif 2542 2543 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) { 2544 PyObject *py_import = 0; 2545 PyObject *empty_list = 0; 2546 PyObject *module = 0; 2547 PyObject *global_dict = 0; 2548 PyObject *empty_dict = 0; 2549 PyObject *list; 2550 py_import = __Pyx_GetAttrString(__pyx_b, "__import__"); 2551 if (!py_import) 2552 goto bad; 2553 if (from_list) 2554 list = from_list; 2555 else { 2556 empty_list = PyList_New(0); 2557 if (!empty_list) 2558 goto bad; 2559 list = empty_list; 2560 } 2561 global_dict = PyModule_GetDict(__pyx_m); 2562 if (!global_dict) 2563 goto bad; 2564 empty_dict = PyDict_New(); 2565 if (!empty_dict) 2566 goto bad; 2567 #if PY_VERSION_HEX >= 0x02050000 2568 { 2569 #if PY_MAJOR_VERSION >= 3 2570 if (level == -1) { 2571 if (strchr(__Pyx_MODULE_NAME, '.')) { 2572 /* try package relative import first */ 2573 PyObject *py_level = PyInt_FromLong(1); 2574 if (!py_level) 2575 goto bad; 2576 module = PyObject_CallFunctionObjArgs(py_import, 2577 name, global_dict, empty_dict, list, py_level, NULL); 2578 Py_DECREF(py_level); 2579 if (!module) { 2580 if (!PyErr_ExceptionMatches(PyExc_ImportError)) 2581 goto bad; 2582 PyErr_Clear(); 2583 } 2584 } 2585 level = 0; /* try absolute import on failure */ 2586 } 2587 #endif 2588 if (!module) { 2589 PyObject *py_level = PyInt_FromLong(level); 2590 if (!py_level) 2591 goto bad; 2592 module = PyObject_CallFunctionObjArgs(py_import, 2593 name, global_dict, empty_dict, list, py_level, NULL); 2594 Py_DECREF(py_level); 2595 } 2596 } 2597 #else 2598 if (level>0) { 2599 PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); 2600 goto bad; 2601 } 2602 module = PyObject_CallFunctionObjArgs(py_import, 2603 name, global_dict, empty_dict, list, NULL); 2604 #endif 2605 bad: 2606 Py_XDECREF(empty_list); 2607 Py_XDECREF(py_import); 2608 Py_XDECREF(empty_dict); 2609 return module; 2610 } 2611 2612 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { 2613 const unsigned char neg_one = (unsigned char)-1, const_zero = 0; 2614 const int is_unsigned = neg_one > const_zero; 2615 if (sizeof(unsigned char) < sizeof(long)) { 2616 long val = __Pyx_PyInt_AsLong(x); 2617 if (unlikely(val != (long)(unsigned char)val)) { 2618 if (!unlikely(val == -1 && PyErr_Occurred())) { 2619 PyErr_SetString(PyExc_OverflowError, 2620 (is_unsigned && unlikely(val < 0)) ? 2621 "can't convert negative value to unsigned char" : 2622 "value too large to convert to unsigned char"); 2623 } 2624 return (unsigned char)-1; 2625 } 2626 return (unsigned char)val; 2627 } 2628 return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); 2629 } 2630 2631 static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { 2632 const unsigned short neg_one = (unsigned short)-1, const_zero = 0; 2633 const int is_unsigned = neg_one > const_zero; 2634 if (sizeof(unsigned short) < sizeof(long)) { 2635 long val = __Pyx_PyInt_AsLong(x); 2636 if (unlikely(val != (long)(unsigned short)val)) { 2637 if (!unlikely(val == -1 && PyErr_Occurred())) { 2638 PyErr_SetString(PyExc_OverflowError, 2639 (is_unsigned && unlikely(val < 0)) ? 2640 "can't convert negative value to unsigned short" : 2641 "value too large to convert to unsigned short"); 2642 } 2643 return (unsigned short)-1; 2644 } 2645 return (unsigned short)val; 2646 } 2647 return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); 2648 } 2649 2650 static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { 2651 const unsigned int neg_one = (unsigned int)-1, const_zero = 0; 2652 const int is_unsigned = neg_one > const_zero; 2653 if (sizeof(unsigned int) < sizeof(long)) { 2654 long val = __Pyx_PyInt_AsLong(x); 2655 if (unlikely(val != (long)(unsigned int)val)) { 2656 if (!unlikely(val == -1 && PyErr_Occurred())) { 2657 PyErr_SetString(PyExc_OverflowError, 2658 (is_unsigned && unlikely(val < 0)) ? 2659 "can't convert negative value to unsigned int" : 2660 "value too large to convert to unsigned int"); 2661 } 2662 return (unsigned int)-1; 2663 } 2664 return (unsigned int)val; 2665 } 2666 return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); 2667 } 2668 2669 static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { 2670 const char neg_one = (char)-1, const_zero = 0; 2671 const int is_unsigned = neg_one > const_zero; 2672 if (sizeof(char) < sizeof(long)) { 2673 long val = __Pyx_PyInt_AsLong(x); 2674 if (unlikely(val != (long)(char)val)) { 2675 if (!unlikely(val == -1 && PyErr_Occurred())) { 2676 PyErr_SetString(PyExc_OverflowError, 2677 (is_unsigned && unlikely(val < 0)) ? 2678 "can't convert negative value to char" : 2679 "value too large to convert to char"); 2680 } 2681 return (char)-1; 2682 } 2683 return (char)val; 2684 } 2685 return (char)__Pyx_PyInt_AsLong(x); 2686 } 2687 2688 static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { 2689 const short neg_one = (short)-1, const_zero = 0; 2690 const int is_unsigned = neg_one > const_zero; 2691 if (sizeof(short) < sizeof(long)) { 2692 long val = __Pyx_PyInt_AsLong(x); 2693 if (unlikely(val != (long)(short)val)) { 2694 if (!unlikely(val == -1 && PyErr_Occurred())) { 2695 PyErr_SetString(PyExc_OverflowError, 2696 (is_unsigned && unlikely(val < 0)) ? 2697 "can't convert negative value to short" : 2698 "value too large to convert to short"); 2699 } 2700 return (short)-1; 2701 } 2702 return (short)val; 2703 } 2704 return (short)__Pyx_PyInt_AsLong(x); 2705 } 2706 2707 static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { 2708 const int neg_one = (int)-1, const_zero = 0; 2709 const int is_unsigned = neg_one > const_zero; 2710 if (sizeof(int) < sizeof(long)) { 2711 long val = __Pyx_PyInt_AsLong(x); 2712 if (unlikely(val != (long)(int)val)) { 2713 if (!unlikely(val == -1 && PyErr_Occurred())) { 2714 PyErr_SetString(PyExc_OverflowError, 2715 (is_unsigned && unlikely(val < 0)) ? 2716 "can't convert negative value to int" : 2717 "value too large to convert to int"); 2718 } 2719 return (int)-1; 2720 } 2721 return (int)val; 2722 } 2723 return (int)__Pyx_PyInt_AsLong(x); 2724 } 2725 2726 static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { 2727 const signed char neg_one = (signed char)-1, const_zero = 0; 2728 const int is_unsigned = neg_one > const_zero; 2729 if (sizeof(signed char) < sizeof(long)) { 2730 long val = __Pyx_PyInt_AsLong(x); 2731 if (unlikely(val != (long)(signed char)val)) { 2732 if (!unlikely(val == -1 && PyErr_Occurred())) { 2733 PyErr_SetString(PyExc_OverflowError, 2734 (is_unsigned && unlikely(val < 0)) ? 2735 "can't convert negative value to signed char" : 2736 "value too large to convert to signed char"); 2737 } 2738 return (signed char)-1; 2739 } 2740 return (signed char)val; 2741 } 2742 return (signed char)__Pyx_PyInt_AsSignedLong(x); 2743 } 2744 2745 static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { 2746 const signed short neg_one = (signed short)-1, const_zero = 0; 2747 const int is_unsigned = neg_one > const_zero; 2748 if (sizeof(signed short) < sizeof(long)) { 2749 long val = __Pyx_PyInt_AsLong(x); 2750 if (unlikely(val != (long)(signed short)val)) { 2751 if (!unlikely(val == -1 && PyErr_Occurred())) { 2752 PyErr_SetString(PyExc_OverflowError, 2753 (is_unsigned && unlikely(val < 0)) ? 2754 "can't convert negative value to signed short" : 2755 "value too large to convert to signed short"); 2756 } 2757 return (signed short)-1; 2758 } 2759 return (signed short)val; 2760 } 2761 return (signed short)__Pyx_PyInt_AsSignedLong(x); 2762 } 2763 2764 static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { 2765 const signed int neg_one = (signed int)-1, const_zero = 0; 2766 const int is_unsigned = neg_one > const_zero; 2767 if (sizeof(signed int) < sizeof(long)) { 2768 long val = __Pyx_PyInt_AsLong(x); 2769 if (unlikely(val != (long)(signed int)val)) { 2770 if (!unlikely(val == -1 && PyErr_Occurred())) { 2771 PyErr_SetString(PyExc_OverflowError, 2772 (is_unsigned && unlikely(val < 0)) ? 2773 "can't convert negative value to signed int" : 2774 "value too large to convert to signed int"); 2775 } 2776 return (signed int)-1; 2777 } 2778 return (signed int)val; 2779 } 2780 return (signed int)__Pyx_PyInt_AsSignedLong(x); 2781 } 2782 2783 static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { 2784 const int neg_one = (int)-1, const_zero = 0; 2785 const int is_unsigned = neg_one > const_zero; 2786 if (sizeof(int) < sizeof(long)) { 2787 long val = __Pyx_PyInt_AsLong(x); 2788 if (unlikely(val != (long)(int)val)) { 2789 if (!unlikely(val == -1 && PyErr_Occurred())) { 2790 PyErr_SetString(PyExc_OverflowError, 2791 (is_unsigned && unlikely(val < 0)) ? 2792 "can't convert negative value to int" : 2793 "value too large to convert to int"); 2794 } 2795 return (int)-1; 2796 } 2797 return (int)val; 2798 } 2799 return (int)__Pyx_PyInt_AsLong(x); 2800 } 2801 2802 static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { 2803 const unsigned long neg_one = (unsigned long)-1, const_zero = 0; 2804 const int is_unsigned = neg_one > const_zero; 2805 #if PY_VERSION_HEX < 0x03000000 2806 if (likely(PyInt_Check(x))) { 2807 long val = PyInt_AS_LONG(x); 2808 if (is_unsigned && unlikely(val < 0)) { 2809 PyErr_SetString(PyExc_OverflowError, 2810 "can't convert negative value to unsigned long"); 2811 return (unsigned long)-1; 2812 } 2813 return (unsigned long)val; 2814 } else 2815 #endif 2816 if (likely(PyLong_Check(x))) { 2817 if (is_unsigned) { 2818 if (unlikely(Py_SIZE(x) < 0)) { 2819 PyErr_SetString(PyExc_OverflowError, 2820 "can't convert negative value to unsigned long"); 2821 return (unsigned long)-1; 2822 } 2823 return (unsigned long)PyLong_AsUnsignedLong(x); 2824 } else { 2825 return (unsigned long)PyLong_AsLong(x); 2826 } 2827 } else { 2828 unsigned long val; 2829 PyObject *tmp = __Pyx_PyNumber_Int(x); 2830 if (!tmp) return (unsigned long)-1; 2831 val = __Pyx_PyInt_AsUnsignedLong(tmp); 2832 Py_DECREF(tmp); 2833 return val; 2834 } 2835 } 2836 2837 static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { 2838 const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; 2839 const int is_unsigned = neg_one > const_zero; 2840 #if PY_VERSION_HEX < 0x03000000 2841 if (likely(PyInt_Check(x))) { 2842 long val = PyInt_AS_LONG(x); 2843 if (is_unsigned && unlikely(val < 0)) { 2844 PyErr_SetString(PyExc_OverflowError, 2845 "can't convert negative value to unsigned PY_LONG_LONG"); 2846 return (unsigned PY_LONG_LONG)-1; 2847 } 2848 return (unsigned PY_LONG_LONG)val; 2849 } else 2850 #endif 2851 if (likely(PyLong_Check(x))) { 2852 if (is_unsigned) { 2853 if (unlikely(Py_SIZE(x) < 0)) { 2854 PyErr_SetString(PyExc_OverflowError, 2855 "can't convert negative value to unsigned PY_LONG_LONG"); 2856 return (unsigned PY_LONG_LONG)-1; 2857 } 2858 return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); 2859 } else { 2860 return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); 2861 } 2862 } else { 2863 unsigned PY_LONG_LONG val; 2864 PyObject *tmp = __Pyx_PyNumber_Int(x); 2865 if (!tmp) return (unsigned PY_LONG_LONG)-1; 2866 val = __Pyx_PyInt_AsUnsignedLongLong(tmp); 2867 Py_DECREF(tmp); 2868 return val; 2869 } 2870 } 2871 2872 static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { 2873 const long neg_one = (long)-1, const_zero = 0; 2874 const int is_unsigned = neg_one > const_zero; 2875 #if PY_VERSION_HEX < 0x03000000 2876 if (likely(PyInt_Check(x))) { 2877 long val = PyInt_AS_LONG(x); 2878 if (is_unsigned && unlikely(val < 0)) { 2879 PyErr_SetString(PyExc_OverflowError, 2880 "can't convert negative value to long"); 2881 return (long)-1; 2882 } 2883 return (long)val; 2884 } else 2885 #endif 2886 if (likely(PyLong_Check(x))) { 2887 if (is_unsigned) { 2888 if (unlikely(Py_SIZE(x) < 0)) { 2889 PyErr_SetString(PyExc_OverflowError, 2890 "can't convert negative value to long"); 2891 return (long)-1; 2892 } 2893 return (long)PyLong_AsUnsignedLong(x); 2894 } else { 2895 return (long)PyLong_AsLong(x); 2896 } 2897 } else { 2898 long val; 2899 PyObject *tmp = __Pyx_PyNumber_Int(x); 2900 if (!tmp) return (long)-1; 2901 val = __Pyx_PyInt_AsLong(tmp); 2902 Py_DECREF(tmp); 2903 return val; 2904 } 2905 } 2906 2907 static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { 2908 const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; 2909 const int is_unsigned = neg_one > const_zero; 2910 #if PY_VERSION_HEX < 0x03000000 2911 if (likely(PyInt_Check(x))) { 2912 long val = PyInt_AS_LONG(x); 2913 if (is_unsigned && unlikely(val < 0)) { 2914 PyErr_SetString(PyExc_OverflowError, 2915 "can't convert negative value to PY_LONG_LONG"); 2916 return (PY_LONG_LONG)-1; 2917 } 2918 return (PY_LONG_LONG)val; 2919 } else 2920 #endif 2921 if (likely(PyLong_Check(x))) { 2922 if (is_unsigned) { 2923 if (unlikely(Py_SIZE(x) < 0)) { 2924 PyErr_SetString(PyExc_OverflowError, 2925 "can't convert negative value to PY_LONG_LONG"); 2926 return (PY_LONG_LONG)-1; 2927 } 2928 return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); 2929 } else { 2930 return (PY_LONG_LONG)PyLong_AsLongLong(x); 2931 } 2932 } else { 2933 PY_LONG_LONG val; 2934 PyObject *tmp = __Pyx_PyNumber_Int(x); 2935 if (!tmp) return (PY_LONG_LONG)-1; 2936 val = __Pyx_PyInt_AsLongLong(tmp); 2937 Py_DECREF(tmp); 2938 return val; 2939 } 2940 } 2941 2942 static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { 2943 const signed long neg_one = (signed long)-1, const_zero = 0; 2944 const int is_unsigned = neg_one > const_zero; 2945 #if PY_VERSION_HEX < 0x03000000 2946 if (likely(PyInt_Check(x))) { 2947 long val = PyInt_AS_LONG(x); 2948 if (is_unsigned && unlikely(val < 0)) { 2949 PyErr_SetString(PyExc_OverflowError, 2950 "can't convert negative value to signed long"); 2951 return (signed long)-1; 2952 } 2953 return (signed long)val; 2954 } else 2955 #endif 2956 if (likely(PyLong_Check(x))) { 2957 if (is_unsigned) { 2958 if (unlikely(Py_SIZE(x) < 0)) { 2959 PyErr_SetString(PyExc_OverflowError, 2960 "can't convert negative value to signed long"); 2961 return (signed long)-1; 2962 } 2963 return (signed long)PyLong_AsUnsignedLong(x); 2964 } else { 2965 return (signed long)PyLong_AsLong(x); 2966 } 2967 } else { 2968 signed long val; 2969 PyObject *tmp = __Pyx_PyNumber_Int(x); 2970 if (!tmp) return (signed long)-1; 2971 val = __Pyx_PyInt_AsSignedLong(tmp); 2972 Py_DECREF(tmp); 2973 return val; 2974 } 2975 } 2976 2977 static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { 2978 const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; 2979 const int is_unsigned = neg_one > const_zero; 2980 #if PY_VERSION_HEX < 0x03000000 2981 if (likely(PyInt_Check(x))) { 2982 long val = PyInt_AS_LONG(x); 2983 if (is_unsigned && unlikely(val < 0)) { 2984 PyErr_SetString(PyExc_OverflowError, 2985 "can't convert negative value to signed PY_LONG_LONG"); 2986 return (signed PY_LONG_LONG)-1; 2987 } 2988 return (signed PY_LONG_LONG)val; 2989 } else 2990 #endif 2991 if (likely(PyLong_Check(x))) { 2992 if (is_unsigned) { 2993 if (unlikely(Py_SIZE(x) < 0)) { 2994 PyErr_SetString(PyExc_OverflowError, 2995 "can't convert negative value to signed PY_LONG_LONG"); 2996 return (signed PY_LONG_LONG)-1; 2997 } 2998 return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); 2999 } else { 3000 return (signed PY_LONG_LONG)PyLong_AsLongLong(x); 3001 } 3002 } else { 3003 signed PY_LONG_LONG val; 3004 PyObject *tmp = __Pyx_PyNumber_Int(x); 3005 if (!tmp) return (signed PY_LONG_LONG)-1; 3006 val = __Pyx_PyInt_AsSignedLongLong(tmp); 3007 Py_DECREF(tmp); 3008 return val; 3009 } 3010 } 3011 3012 static int __Pyx_check_binary_version(void) { 3013 char ctversion[4], rtversion[4]; 3014 PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); 3015 PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); 3016 if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { 3017 char message[200]; 3018 PyOS_snprintf(message, sizeof(message), 3019 "compiletime version %s of module '%.100s' " 3020 "does not match runtime version %s", 3021 ctversion, __Pyx_MODULE_NAME, rtversion); 3022 #if PY_VERSION_HEX < 0x02050000 3023 return PyErr_Warn(NULL, message); 3024 #else 3025 return PyErr_WarnEx(NULL, message, 1); 3026 #endif 3027 } 3028 return 0; 3029 } 3030 3031 #ifndef __PYX_HAVE_RT_ImportModule 3032 #define __PYX_HAVE_RT_ImportModule 3033 static PyObject *__Pyx_ImportModule(const char *name) { 3034 PyObject *py_name = 0; 3035 PyObject *py_module = 0; 3036 py_name = __Pyx_PyIdentifier_FromString(name); 3037 if (!py_name) 3038 goto bad; 3039 py_module = PyImport_Import(py_name); 3040 Py_DECREF(py_name); 3041 return py_module; 3042 bad: 3043 Py_XDECREF(py_name); 3044 return 0; 3045 } 3046 #endif 3047 3048 #ifndef __PYX_HAVE_RT_ImportType 3049 #define __PYX_HAVE_RT_ImportType 3050 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, 3051 size_t size, int strict) 3052 { 3053 PyObject *py_module = 0; 3054 PyObject *result = 0; 3055 PyObject *py_name = 0; 3056 char warning[200]; 3057 py_module = __Pyx_ImportModule(module_name); 3058 if (!py_module) 3059 goto bad; 3060 py_name = __Pyx_PyIdentifier_FromString(class_name); 3061 if (!py_name) 3062 goto bad; 3063 result = PyObject_GetAttr(py_module, py_name); 3064 Py_DECREF(py_name); 3065 py_name = 0; 3066 Py_DECREF(py_module); 3067 py_module = 0; 3068 if (!result) 3069 goto bad; 3070 if (!PyType_Check(result)) { 3071 PyErr_Format(PyExc_TypeError, 3072 "%s.%s is not a type object", 3073 module_name, class_name); 3074 goto bad; 3075 } 3076 if (!strict && (size_t)((PyTypeObject *)result)->tp_basicsize > size) { 3077 PyOS_snprintf(warning, sizeof(warning), 3078 "%s.%s size changed, may indicate binary incompatibility", 3079 module_name, class_name); 3080 #if PY_VERSION_HEX < 0x02050000 3081 if (PyErr_Warn(NULL, warning) < 0) goto bad; 3082 #else 3083 if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; 3084 #endif 3085 } 3086 else if ((size_t)((PyTypeObject *)result)->tp_basicsize != size) { 3087 PyErr_Format(PyExc_ValueError, 3088 "%s.%s has the wrong size, try recompiling", 3089 module_name, class_name); 3090 goto bad; 3091 } 3092 return (PyTypeObject *)result; 3093 bad: 3094 Py_XDECREF(py_module); 3095 Py_XDECREF(result); 3096 return NULL; 3097 } 3098 #endif 3099 3100 static void* __Pyx_GetVtable(PyObject *dict) { 3101 void* ptr; 3102 PyObject *ob = PyMapping_GetItemString(dict, (char *)"__pyx_vtable__"); 3103 if (!ob) 3104 goto bad; 3105 #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0) 3106 ptr = PyCapsule_GetPointer(ob, 0); 3107 #else 3108 ptr = PyCObject_AsVoidPtr(ob); 3109 #endif 3110 if (!ptr && !PyErr_Occurred()) 3111 PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); 3112 Py_DECREF(ob); 3113 return ptr; 3114 bad: 3115 Py_XDECREF(ob); 3116 return NULL; 3117 } 3118 3119 static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { 3120 int start = 0, mid = 0, end = count - 1; 3121 if (end >= 0 && code_line > entries[end].code_line) { 3122 return count; 3123 } 3124 while (start < end) { 3125 mid = (start + end) / 2; 3126 if (code_line < entries[mid].code_line) { 3127 end = mid; 3128 } else if (code_line > entries[mid].code_line) { 3129 start = mid + 1; 3130 } else { 3131 return mid; 3132 } 3133 } 3134 if (code_line <= entries[mid].code_line) { 3135 return mid; 3136 } else { 3137 return mid + 1; 3138 } 3139 } 3140 static PyCodeObject *__pyx_find_code_object(int code_line) { 3141 PyCodeObject* code_object; 3142 int pos; 3143 if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { 3144 return NULL; 3145 } 3146 pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); 3147 if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { 3148 return NULL; 3149 } 3150 code_object = __pyx_code_cache.entries[pos].code_object; 3151 Py_INCREF(code_object); 3152 return code_object; 3153 } 3154 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { 3155 int pos, i; 3156 __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; 3157 if (unlikely(!code_line)) { 3158 return; 3159 } 3160 if (unlikely(!entries)) { 3161 entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); 3162 if (likely(entries)) { 3163 __pyx_code_cache.entries = entries; 3164 __pyx_code_cache.max_count = 64; 3165 __pyx_code_cache.count = 1; 3166 entries[0].code_line = code_line; 3167 entries[0].code_object = code_object; 3168 Py_INCREF(code_object); 3169 } 3170 return; 3171 } 3172 pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); 3173 if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { 3174 PyCodeObject* tmp = entries[pos].code_object; 3175 entries[pos].code_object = code_object; 3176 Py_DECREF(tmp); 3177 return; 3178 } 3179 if (__pyx_code_cache.count == __pyx_code_cache.max_count) { 3180 int new_max = __pyx_code_cache.max_count + 64; 3181 entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( 3182 __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); 3183 if (unlikely(!entries)) { 3184 return; 3185 } 3186 __pyx_code_cache.entries = entries; 3187 __pyx_code_cache.max_count = new_max; 3188 } 3189 for (i=__pyx_code_cache.count; i>pos; i--) { 3190 entries[i] = entries[i-1]; 3191 } 3192 entries[pos].code_line = code_line; 3193 entries[pos].code_object = code_object; 3194 __pyx_code_cache.count++; 3195 Py_INCREF(code_object); 3196 } 3197 3198 #include "compile.h" 3199 #include "frameobject.h" 3200 #include "traceback.h" 3201 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( 3202 const char *funcname, int c_line, 3203 int py_line, const char *filename) { 3204 PyCodeObject *py_code = 0; 3205 PyObject *py_srcfile = 0; 3206 PyObject *py_funcname = 0; 3207 #if PY_MAJOR_VERSION < 3 3208 py_srcfile = PyString_FromString(filename); 3209 #else 3210 py_srcfile = PyUnicode_FromString(filename); 3211 #endif 3212 if (!py_srcfile) goto bad; 3213 if (c_line) { 3214 #if PY_MAJOR_VERSION < 3 3215 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); 3216 #else 3217 py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); 3218 #endif 3219 } 3220 else { 3221 #if PY_MAJOR_VERSION < 3 3222 py_funcname = PyString_FromString(funcname); 3223 #else 3224 py_funcname = PyUnicode_FromString(funcname); 3225 #endif 3226 } 3227 if (!py_funcname) goto bad; 3228 py_code = __Pyx_PyCode_New( 3229 0, /*int argcount,*/ 3230 0, /*int kwonlyargcount,*/ 3231 0, /*int nlocals,*/ 3232 0, /*int stacksize,*/ 3233 0, /*int flags,*/ 3234 __pyx_empty_bytes, /*PyObject *code,*/ 3235 __pyx_empty_tuple, /*PyObject *consts,*/ 3236 __pyx_empty_tuple, /*PyObject *names,*/ 3237 __pyx_empty_tuple, /*PyObject *varnames,*/ 3238 __pyx_empty_tuple, /*PyObject *freevars,*/ 3239 __pyx_empty_tuple, /*PyObject *cellvars,*/ 3240 py_srcfile, /*PyObject *filename,*/ 3241 py_funcname, /*PyObject *name,*/ 3242 py_line, /*int firstlineno,*/ 3243 __pyx_empty_bytes /*PyObject *lnotab*/ 3244 ); 3245 Py_DECREF(py_srcfile); 3246 Py_DECREF(py_funcname); 3247 return py_code; 3248 bad: 3249 Py_XDECREF(py_srcfile); 3250 Py_XDECREF(py_funcname); 3251 return NULL; 3252 } 3253 static void __Pyx_AddTraceback(const char *funcname, int c_line, 3254 int py_line, const char *filename) { 3255 PyCodeObject *py_code = 0; 3256 PyObject *py_globals = 0; 3257 PyFrameObject *py_frame = 0; 3258 py_code = __pyx_find_code_object(c_line ? c_line : py_line); 3259 if (!py_code) { 3260 py_code = __Pyx_CreateCodeObjectForTraceback( 3261 funcname, c_line, py_line, filename); 3262 if (!py_code) goto bad; 3263 __pyx_insert_code_object(c_line ? c_line : py_line, py_code); 3264 } 3265 py_globals = PyModule_GetDict(__pyx_m); 3266 if (!py_globals) goto bad; 3267 py_frame = PyFrame_New( 3268 PyThreadState_GET(), /*PyThreadState *tstate,*/ 3269 py_code, /*PyCodeObject *code,*/ 3270 py_globals, /*PyObject *globals,*/ 3271 0 /*PyObject *locals*/ 3272 ); 3273 if (!py_frame) goto bad; 3274 py_frame->f_lineno = py_line; 3275 PyTraceBack_Here(py_frame); 3276 bad: 3277 Py_XDECREF(py_code); 3278 Py_XDECREF(py_frame); 3279 } 3280 3281 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { 3282 while (t->p) { 3283 #if PY_MAJOR_VERSION < 3 3284 if (t->is_unicode) { 3285 *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); 3286 } else if (t->intern) { 3287 *t->p = PyString_InternFromString(t->s); 3288 } else { 3289 *t->p = PyString_FromStringAndSize(t->s, t->n - 1); 3290 } 3291 #else /* Python 3+ has unicode identifiers */ 3292 if (t->is_unicode | t->is_str) { 3293 if (t->intern) { 3294 *t->p = PyUnicode_InternFromString(t->s); 3295 } else if (t->encoding) { 3296 *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); 3297 } else { 3298 *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); 3299 } 3300 } else { 3301 *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); 3302 } 3303 #endif 3304 if (!*t->p) 3305 return -1; 3306 ++t; 3307 } 3308 return 0; 3309 } 3310 3311 3312 /* Type Conversion Functions */ 3313 3314 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { 3315 int is_true = x == Py_True; 3316 if (is_true | (x == Py_False) | (x == Py_None)) return is_true; 3317 else return PyObject_IsTrue(x); 3318 } 3319 3320 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { 3321 PyNumberMethods *m; 3322 const char *name = NULL; 3323 PyObject *res = NULL; 3324 #if PY_VERSION_HEX < 0x03000000 3325 if (PyInt_Check(x) || PyLong_Check(x)) 3326 #else 3327 if (PyLong_Check(x)) 3328 #endif 3329 return Py_INCREF(x), x; 3330 m = Py_TYPE(x)->tp_as_number; 3331 #if PY_VERSION_HEX < 0x03000000 3332 if (m && m->nb_int) { 3333 name = "int"; 3334 res = PyNumber_Int(x); 3335 } 3336 else if (m && m->nb_long) { 3337 name = "long"; 3338 res = PyNumber_Long(x); 3339 } 3340 #else 3341 if (m && m->nb_int) { 3342 name = "int"; 3343 res = PyNumber_Long(x); 3344 } 3345 #endif 3346 if (res) { 3347 #if PY_VERSION_HEX < 0x03000000 3348 if (!PyInt_Check(res) && !PyLong_Check(res)) { 3349 #else 3350 if (!PyLong_Check(res)) { 3351 #endif 3352 PyErr_Format(PyExc_TypeError, 3353 "__%s__ returned non-%s (type %.200s)", 3354 name, name, Py_TYPE(res)->tp_name); 3355 Py_DECREF(res); 3356 return NULL; 3357 } 3358 } 3359 else if (!PyErr_Occurred()) { 3360 PyErr_SetString(PyExc_TypeError, 3361 "an integer is required"); 3362 } 3363 return res; 3364 } 3365 3366 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { 3367 Py_ssize_t ival; 3368 PyObject* x = PyNumber_Index(b); 3369 if (!x) return -1; 3370 ival = PyInt_AsSsize_t(x); 3371 Py_DECREF(x); 3372 return ival; 3373 } 3374 3375 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { 3376 #if PY_VERSION_HEX < 0x02050000 3377 if (ival <= LONG_MAX) 3378 return PyInt_FromLong((long)ival); 3379 else { 3380 unsigned char *bytes = (unsigned char *) &ival; 3381 int one = 1; int little = (int)*(unsigned char*)&one; 3382 return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); 3383 } 3384 #else 3385 return PyInt_FromSize_t(ival); 3386 #endif 3387 } 3388 3389 static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { 3390 unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); 3391 if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) { 3392 return (size_t)-1; 3393 } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { 3394 PyErr_SetString(PyExc_OverflowError, 3395 "value too large to convert to size_t"); 3396 return (size_t)-1; 3397 } 3398 return (size_t)val; 3399 } 3400 3401 3402 #endif /* Py_PYTHON_H */ 3403