/* Generated by Cython 0.19.1 on Sun Aug 04 15:59:48 2013 */

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


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

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

#if defined(WIN32) || defined(MS_WINDOWS)
#define _USE_MATH_DEFINES
#endif
#include <math.h>
#define __PYX_HAVE__kivy__properties
#define __PYX_HAVE_API__kivy__properties
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

#ifdef PYREX_WITHOUT_ASSERTIONS
#define CYTHON_WITHOUT_ASSERTIONS
#endif

#ifndef CYTHON_UNUSED
# if defined(__GNUC__)
#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
#     define CYTHON_UNUSED __attribute__ ((__unused__))
#   else
#     define CYTHON_UNUSED
#   endif
# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
#   define CYTHON_UNUSED __attribute__ ((__unused__))
# else
#   define CYTHON_UNUSED
# endif
#endif
typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/

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


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

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


static const char *__pyx_f[] = {
  "properties.pyx",
  "properties.pxd",
  "_event.pxd",
};

/*--- Type declarations ---*/
struct __pyx_obj_4kivy_10properties_Property;
struct __pyx_obj_4kivy_6_event_ObjectWithUid;
struct __pyx_obj_4kivy_10properties_NumericProperty;
struct __pyx_obj_4kivy_10properties_ReferenceListProperty;
struct __pyx_obj_4kivy_10properties_VariableListProperty;
struct __pyx_obj_4kivy_10properties_AliasProperty;
struct __pyx_obj_4kivy_6_event_EventDispatcher;
struct __pyx_obj_4kivy_10properties_DictProperty;
struct __pyx_obj_4kivy_10properties_ObjectProperty;
struct __pyx_obj_4kivy_10properties_StringProperty;
struct __pyx_obj_4kivy_10properties_BoundedNumericProperty;
struct __pyx_obj_4kivy_10properties_OptionProperty;
struct __pyx_obj_4kivy_10properties_ListProperty;
struct __pyx_obj_4kivy_10properties_BooleanProperty;
struct __pyx_obj_4kivy_10properties_PropertyStorage;

/* "kivy\properties.pxd":20
 *     cdef int alias_initial
 * 
 * cdef class Property:             # <<<<<<<<<<<<<<
 *     cdef str _name
 *     cdef int allownone
 */
struct __pyx_obj_4kivy_10properties_Property {
  PyObject_HEAD
  struct __pyx_vtabstruct_4kivy_10properties_Property *__pyx_vtab;
  PyObject *_name;
  int allownone;
  PyObject *errorvalue;
  PyObject *errorhandler;
  int errorvalue_set;
  PyObject *defaultvalue;
};


/* "kivy\_event.pxd":1
 * cdef class ObjectWithUid(object):             # <<<<<<<<<<<<<<
 *     cdef readonly int uid
 * 
 */
struct __pyx_obj_4kivy_6_event_ObjectWithUid {
  PyObject_HEAD
  int uid;
};


/* "kivy\properties.pxd":39
 *     cpdef dispatch(self, EventDispatcher obj)
 * 
 * cdef class NumericProperty(Property):             # <<<<<<<<<<<<<<
 *     cdef float parse_str(self, EventDispatcher obj, value)
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext)
 */
struct __pyx_obj_4kivy_10properties_NumericProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
};


/* "kivy\properties.pxd":69
 *     cdef list options
 * 
 * cdef class ReferenceListProperty(Property):             # <<<<<<<<<<<<<<
 *     cdef list properties
 *     cpdef trigger_change(self, EventDispatcher obj, value)
 */
struct __pyx_obj_4kivy_10properties_ReferenceListProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
  PyObject *properties;
};


/* "kivy\properties.pyx":1125
 *             self.dispatch(obj)
 * 
 * cdef class VariableListProperty(Property):             # <<<<<<<<<<<<<<
 *     '''A ListProperty that mimics the css way of defining numeric values such
 *     as padding, margin, etc.
 */
struct __pyx_obj_4kivy_10properties_VariableListProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
  int length;
};


/* "kivy\properties.pxd":73
 *     cpdef trigger_change(self, EventDispatcher obj, value)
 * 
 * cdef class AliasProperty(Property):             # <<<<<<<<<<<<<<
 *     cdef object getter
 *     cdef object setter
 */
struct __pyx_obj_4kivy_10properties_AliasProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
  PyObject *getter;
  PyObject *setter;
  PyObject *bind_objects;
  int use_cache;
};


/* "kivy\_event.pxd":4
 *     cdef readonly int uid
 * 
 * cdef class EventDispatcher(ObjectWithUid):             # <<<<<<<<<<<<<<
 *     cdef dict __event_stack
 *     cdef dict __properties
 */
struct __pyx_obj_4kivy_6_event_EventDispatcher {
  struct __pyx_obj_4kivy_6_event_ObjectWithUid __pyx_base;
  struct __pyx_vtabstruct_4kivy_6_event_EventDispatcher *__pyx_vtab;
  PyObject *__pyx___event_stack;
  PyObject *__pyx___properties;
  PyObject *__pyx___storage;
  PyObject *__weakref__;
};


/* "kivy\properties.pxd":49
 *     pass
 * 
 * cdef class DictProperty(Property):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_4kivy_10properties_DictProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
};


/* "kivy\properties.pxd":52
 *     pass
 * 
 * cdef class ObjectProperty(Property):             # <<<<<<<<<<<<<<
 *     cdef object baseclass
 * 
 */
struct __pyx_obj_4kivy_10properties_ObjectProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
  PyObject *baseclass;
};


/* "kivy\properties.pxd":43
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext)
 * 
 * cdef class StringProperty(Property):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_4kivy_10properties_StringProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
};


/* "kivy\properties.pxd":58
 *     pass
 * 
 * cdef class BoundedNumericProperty(Property):             # <<<<<<<<<<<<<<
 *     cdef int use_min
 *     cdef int use_max
 */
struct __pyx_obj_4kivy_10properties_BoundedNumericProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
  int use_min;
  int use_max;
  long min;
  long max;
  float f_min;
  float f_max;
};


/* "kivy\properties.pxd":66
 *     cdef float f_max
 * 
 * cdef class OptionProperty(Property):             # <<<<<<<<<<<<<<
 *     cdef list options
 * 
 */
struct __pyx_obj_4kivy_10properties_OptionProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
  PyObject *options;
};


/* "kivy\properties.pxd":46
 *     pass
 * 
 * cdef class ListProperty(Property):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_4kivy_10properties_ListProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
};


/* "kivy\properties.pxd":55
 *     cdef object baseclass
 * 
 * cdef class BooleanProperty(Property):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_4kivy_10properties_BooleanProperty {
  struct __pyx_obj_4kivy_10properties_Property __pyx_base;
};


/* "kivy\properties.pxd":3
 * from kivy._event cimport EventDispatcher
 * 
 * cdef class PropertyStorage:             # <<<<<<<<<<<<<<
 *     cdef object value
 *     cdef list observers
 */
struct __pyx_obj_4kivy_10properties_PropertyStorage {
  PyObject_HEAD
  PyObject *value;
  PyObject *observers;
  PyObject *numeric_fmt;
  int bnum_min;
  int bnum_max;
  float bnum_f_min;
  float bnum_f_max;
  int bnum_use_min;
  int bnum_use_max;
  PyObject *options;
  PyObject *properties;
  int stop_event;
  PyObject *getter;
  PyObject *setter;
  int alias_initial;
};



/* "kivy\properties.pyx":206
 *         return rv * g_dpi / 25.4
 * 
 * cdef class Property:             # <<<<<<<<<<<<<<
 *     '''Base class for building more complex properties.
 * 
 */

struct __pyx_vtabstruct_4kivy_10properties_Property {
  PyObject *(*init_storage)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, struct __pyx_obj_4kivy_10properties_PropertyStorage *);
  PyObject *(*link)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*link_deps)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*bind)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*unbind)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*compare_value)(struct __pyx_obj_4kivy_10properties_Property *, PyObject *, PyObject *);
  PyObject *(*set)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*get)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, int __pyx_skip_dispatch);
  PyObject *(*check)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *);
  PyObject *(*convert)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *);
  PyObject *(*dispatch)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_4kivy_10properties_Property *__pyx_vtabptr_4kivy_10properties_Property;


/* "kivy\properties.pyx":725
 *                 self.name))
 * 
 * cdef class BooleanProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Property that represents only a boolean value.
 *     '''
 */

struct __pyx_vtabstruct_4kivy_10properties_BooleanProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
};
static struct __pyx_vtabstruct_4kivy_10properties_BooleanProperty *__pyx_vtabptr_4kivy_10properties_BooleanProperty;


/* "kivy\properties.pyx":740
 *                 self.name))
 * 
 * cdef class BoundedNumericProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Property that represents a numeric value within a minimum bound and/or
 *     maximum bound -- within a numeric range.
 */

struct __pyx_vtabstruct_4kivy_10properties_BoundedNumericProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
};
static struct __pyx_vtabstruct_4kivy_10properties_BoundedNumericProperty *__pyx_vtabptr_4kivy_10properties_BoundedNumericProperty;


/* "kivy\properties.pyx":926
 * 
 * 
 * cdef class OptionProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Property that represents a string from a predefined list of valid
 *     options.
 */

struct __pyx_vtabstruct_4kivy_10properties_OptionProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
};
static struct __pyx_vtabstruct_4kivy_10properties_OptionProperty *__pyx_vtabptr_4kivy_10properties_OptionProperty;


/* "kivy\properties.pyx":969
 * 
 * 
 * cdef class ReferenceListProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Property that allows the creaton of a tuple of other properties.
 * 
 */

struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
  PyObject *(*trigger_change)(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *__pyx_vtabptr_4kivy_10properties_ReferenceListProperty;


/* "kivy\properties.pyx":570
 * 
 * 
 * cdef class ListProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Property that represents a list.
 * 
 */

struct __pyx_vtabstruct_4kivy_10properties_ListProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
};
static struct __pyx_vtabstruct_4kivy_10properties_ListProperty *__pyx_vtabptr_4kivy_10properties_ListProperty;


/* "kivy\properties.pyx":698
 * 
 * 
 * cdef class ObjectProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Property that represents a Python object.
 * 
 */

struct __pyx_vtabstruct_4kivy_10properties_ObjectProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
};
static struct __pyx_vtabstruct_4kivy_10properties_ObjectProperty *__pyx_vtabptr_4kivy_10properties_ObjectProperty;


/* "kivy\properties.pyx":1125
 *             self.dispatch(obj)
 * 
 * cdef class VariableListProperty(Property):             # <<<<<<<<<<<<<<
 *     '''A ListProperty that mimics the css way of defining numeric values such
 *     as padding, margin, etc.
 */

struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
  PyObject *(*_convert_numeric)(struct __pyx_obj_4kivy_10properties_VariableListProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *);
  float (*parse_str)(struct __pyx_obj_4kivy_10properties_VariableListProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *);
  float (*parse_list)(struct __pyx_obj_4kivy_10properties_VariableListProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, PyObject *);
};
static struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *__pyx_vtabptr_4kivy_10properties_VariableListProperty;


/* "kivy\properties.pyx":410
 * 
 * 
 * cdef class NumericProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Property that represents a numeric value.
 * 
 */

struct __pyx_vtabstruct_4kivy_10properties_NumericProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
  float (*parse_str)(struct __pyx_obj_4kivy_10properties_NumericProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *);
  float (*parse_list)(struct __pyx_obj_4kivy_10properties_NumericProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, PyObject *);
};
static struct __pyx_vtabstruct_4kivy_10properties_NumericProperty *__pyx_vtabptr_4kivy_10properties_NumericProperty;


/* "kivy\properties.pyx":1045
 *         return ps.value
 * 
 * cdef class AliasProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Create a property with a custom getter and setter.
 * 
 */

struct __pyx_vtabstruct_4kivy_10properties_AliasProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
  PyObject *(*trigger_change)(struct __pyx_obj_4kivy_10properties_AliasProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_4kivy_10properties_AliasProperty *__pyx_vtabptr_4kivy_10properties_AliasProperty;


/* "kivy\properties.pyx":670
 * 
 * 
 * cdef class DictProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Property that represents a dict.
 * 
 */

struct __pyx_vtabstruct_4kivy_10properties_DictProperty {
  struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_base;
};
static struct __pyx_vtabstruct_4kivy_10properties_DictProperty *__pyx_vtabptr_4kivy_10properties_DictProperty;


/* "kivy\_event.pxd":4
 *     cdef readonly int uid
 * 
 * cdef class EventDispatcher(ObjectWithUid):             # <<<<<<<<<<<<<<
 *     cdef dict __event_stack
 *     cdef dict __properties
 */

struct __pyx_vtabstruct_4kivy_6_event_EventDispatcher {
  PyObject *(*properties)(struct __pyx_obj_4kivy_6_event_EventDispatcher *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_4kivy_6_event_EventDispatcher *__pyx_vtabptr_4kivy_6_event_EventDispatcher;


/* "kivy\properties.pyx":485
 * 
 * 
 * cdef class StringProperty(Property):             # <<<<<<<<<<<<<<
 *     '''Property that represents a string value.
 * 
 */

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

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

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

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

static double __Pyx__PyObject_AsDouble(PyObject* obj); /* proto */
#if CYTHON_COMPILING_IN_PYPY
#define __Pyx_PyObject_AsDouble(obj) \
(likely(PyFloat_CheckExact(obj)) ? PyFloat_AS_DOUBLE(obj) : \
 likely(PyInt_CheckExact(obj)) ? \
 PyFloat_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj))
#else
#define __Pyx_PyObject_AsDouble(obj) \
((likely(PyFloat_CheckExact(obj))) ? \
 PyFloat_AS_DOUBLE(obj) : __Pyx__PyObject_AsDouble(obj))
#endif

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

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

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

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

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

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

static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value); /*proto*/

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

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#define __Pyx_PyCallable_Check(obj)   ((obj)->ob_type->tp_call != NULL)
#else
#define __Pyx_PyCallable_Check(obj)   PyCallable_Check(obj)
#endif

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

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

#if PY_MAJOR_VERSION >= 3
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
    PyObject *value;
    value = PyDict_GetItemWithError(d, key);
    if (unlikely(!value)) {
        if (!PyErr_Occurred()) {
            PyObject* args = PyTuple_Pack(1, key);
            if (likely(args))
                PyErr_SetObject(PyExc_KeyError, args);
            Py_XDECREF(args);
        }
        return NULL;
    }
    Py_INCREF(value);
    return value;
}
#else
    #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
#endif

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

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

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

#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
#else
#define __Pyx_PyList_GetSlice(seq, start, stop)   PySequence_GetSlice(seq, start, stop)
#define __Pyx_PyTuple_GetSlice(seq, start, stop)  PySequence_GetSlice(seq, start, stop)
#endif

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

#define __Pyx_GetItemInt(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
    (((size) <= sizeof(Py_ssize_t)) ? \
    __Pyx_GetItemInt_Fast(o, i, is_list, wraparound, boundscheck) : \
    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
#define __Pyx_GetItemInt_List(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
    (((size) <= sizeof(Py_ssize_t)) ? \
    __Pyx_GetItemInt_List_Fast(o, i, wraparound, boundscheck) : \
    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck);
#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
    (((size) <= sizeof(Py_ssize_t)) ? \
    __Pyx_GetItemInt_Tuple_Fast(o, i, wraparound, boundscheck) : \
    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck);
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                     int is_list, int wraparound, int boundscheck);

static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
        PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
        PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
        int has_cstart, int has_cstop, int wraparound);

#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_setattro))
        return tp->tp_setattro(obj, attr_name, value);
#if PY_MAJOR_VERSION < 3
    if (likely(tp->tp_setattr))
        return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value);
#endif
    return PyObject_SetAttr(obj, attr_name, value);
}
#else
#define __Pyx_PyObject_DelAttrStr(o,n)   PyObject_DelAttr(o,n)
#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
#endif

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

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

static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); /*proto*/

static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);

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

static void* __Pyx_GetVtable(PyObject *dict); /*proto*/

#define __Pyx_CyFunction_USED 1
#include <structmember.h>
#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
#define __Pyx_CYFUNCTION_CCLASS        0x04
#define __Pyx_CyFunction_GetClosure(f) \
    (((__pyx_CyFunctionObject *) (f))->func_closure)
#define __Pyx_CyFunction_GetClassObj(f) \
    (((__pyx_CyFunctionObject *) (f))->func_classobj)
#define __Pyx_CyFunction_Defaults(type, f) \
    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \
    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
typedef struct {
    PyCFunctionObject func;
    int flags;
    PyObject *func_dict;
    PyObject *func_weakreflist;
    PyObject *func_name;
    PyObject *func_qualname;
    PyObject *func_doc;
    PyObject *func_code;
    PyObject *func_closure;
    PyObject *func_classobj; /* No-args super() class cell */
    void *defaults;
    int defaults_pyobjects;
    PyObject *defaults_tuple;   /* Const defaults tuple */
    PyObject *defaults_kwdict;  /* Const kwonly defaults dict */
    PyObject *(*defaults_getter)(PyObject *);
    PyObject *func_annotations; /* function annotations dict */
} __pyx_CyFunctionObject;
static PyTypeObject *__pyx_CyFunctionType = 0;
#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, code) \
    __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, code)
static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml,
                                      int flags, PyObject* qualname,
                                      PyObject *self, PyObject *module,
                                      PyObject* code);
static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
                                                         size_t size,
                                                         int pyobjects);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
                                                            PyObject *tuple);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
                                                             PyObject *dict);
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
                                                              PyObject *dict);
static int __Pyx_CyFunction_init(void);

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

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

static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases); /*proto*/

static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
                                   PyObject *qualname, PyObject *modname); /*proto*/

static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);

static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);

static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);

static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);

static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);

static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);

static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);

static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);

static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);

static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);

static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);

static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);

static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);

static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);

static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);

static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);

static int __Pyx_check_binary_version(void);

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

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

static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/

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

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

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


/* Module declarations from 'kivy._event' */
static PyTypeObject *__pyx_ptype_4kivy_6_event_ObjectWithUid = 0;
static PyTypeObject *__pyx_ptype_4kivy_6_event_EventDispatcher = 0;

/* Module declarations from 'kivy.properties' */
static PyTypeObject *__pyx_ptype_4kivy_10properties_Property = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_NumericProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_ReferenceListProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_VariableListProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_AliasProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_DictProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_ObjectProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_StringProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_BoundedNumericProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_OptionProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_ListProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_BooleanProperty = 0;
static PyTypeObject *__pyx_ptype_4kivy_10properties_PropertyStorage = 0;
static float __pyx_v_4kivy_10properties_g_dpi;
static float __pyx_v_4kivy_10properties_g_density;
static float __pyx_v_4kivy_10properties_g_fontscale;
static float __pyx_f_4kivy_10properties_dpi2px(PyObject *, PyObject *, int __pyx_skip_dispatch); /*proto*/
static CYTHON_INLINE void __pyx_f_4kivy_10properties_observable_list_dispatch(PyObject *); /*proto*/
static CYTHON_INLINE void __pyx_f_4kivy_10properties_observable_dict_dispatch(PyObject *); /*proto*/
#define __Pyx_MODULE_NAME "kivy.properties"
int __pyx_module_is_main_kivy__properties = 0;

/* Implementation of 'kivy.properties' */
static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_super;
static PyObject *__pyx_builtin_KeyError;
static PyObject *__pyx_builtin_AttributeError;
static PyObject *__pyx_builtin_object;
static PyObject *__pyx_builtin_xrange;
static PyObject *__pyx_pf_4kivy_10properties_dpi2px(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_value, PyObject *__pyx_v_ext); /* proto */
static int __pyx_pf_4kivy_10properties_8Property___cinit__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_8Property_2__init__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_4name___get__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_4link(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_6link_deps(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_8bind(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_observer); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_10unbind(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_observer); /* proto */
static int __pyx_pf_4kivy_10properties_8Property_12__set__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_val); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_14__get__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_objtype); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_16set(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_18get(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_20dispatch(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_8Property_12defaultvalue___get__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_8Property_12defaultvalue_2__set__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_4kivy_10properties_8Property_12defaultvalue_4__del__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_15NumericProperty___init__(struct __pyx_obj_4kivy_10properties_NumericProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_15NumericProperty_2get_format(struct __pyx_obj_4kivy_10properties_NumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj); /* proto */
static int __pyx_pf_4kivy_10properties_14StringProperty___init__(struct __pyx_obj_4kivy_10properties_StringProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_2__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_4__delitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_6__setslice__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_8__delslice__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_10__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_12__imul__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_14append(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_16remove(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_18insert(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_20pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_22extend(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_24sort(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_26reverse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static int __pyx_pf_4kivy_10properties_12ListProperty___init__(struct __pyx_obj_4kivy_10properties_ListProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_12ListProperty_2link(struct __pyx_obj_4kivy_10properties_ListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_12ListProperty_4set(struct __pyx_obj_4kivy_10properties_ListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_2_weak_return(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_4__getattr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_6__setattr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attr, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_8__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_10__delitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_12clear(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_14remove(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_16pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_18popitem(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_20setdefault(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_22update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs); /* proto */
static int __pyx_pf_4kivy_10properties_12DictProperty___init__(struct __pyx_obj_4kivy_10properties_DictProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_12DictProperty_2link(struct __pyx_obj_4kivy_10properties_DictProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_12DictProperty_4set(struct __pyx_obj_4kivy_10properties_DictProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_4kivy_10properties_14ObjectProperty___init__(struct __pyx_obj_4kivy_10properties_ObjectProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw); /* proto */
static int __pyx_pf_4kivy_10properties_15BooleanProperty___init__(struct __pyx_obj_4kivy_10properties_BooleanProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw); /* proto */
static int __pyx_pf_4kivy_10properties_22BoundedNumericProperty___cinit__(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_22BoundedNumericProperty_2__init__(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, PyObject *__pyx_v_largs, PyObject *__pyx_v_kw); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_4set_min(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_6get_min(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_8set_max(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_10get_max(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_6bounds___get__(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_14OptionProperty___cinit__(struct __pyx_obj_4kivy_10properties_OptionProperty *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_14OptionProperty_2__init__(struct __pyx_obj_4kivy_10properties_OptionProperty *__pyx_v_self, PyObject *__pyx_v_largs, PyObject *__pyx_v_kw); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_14OptionProperty_7options___get__(struct __pyx_obj_4kivy_10properties_OptionProperty *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_21ReferenceListProperty___cinit__(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_21ReferenceListProperty_2__init__(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, PyObject *__pyx_v_largs, PyObject *__pyx_v_kw); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_21ReferenceListProperty_4link_deps(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_21ReferenceListProperty_6trigger_change(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_21ReferenceListProperty_8set(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v__value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_21ReferenceListProperty_10get(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj); /* proto */
static int __pyx_pf_4kivy_10properties_13AliasProperty___cinit__(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_13AliasProperty_2__init__(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, PyObject *__pyx_v_getter, PyObject *__pyx_v_setter, PyObject *__pyx_v_kwargs); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_13AliasProperty_4link_deps(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_13AliasProperty_6trigger_change(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_13AliasProperty_8get(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_13AliasProperty_10set(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_4kivy_10properties_20VariableListProperty___init__(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_length, PyObject *__pyx_v_kw); /* proto */
static PyObject *__pyx_pf_4kivy_10properties_20VariableListProperty_6length___get__(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self); /* proto */
static int __pyx_pf_4kivy_10properties_20VariableListProperty_6length_2__set__(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_tp_new_4kivy_10properties_Property(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_NumericProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_ReferenceListProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_VariableListProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_AliasProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_DictProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_ObjectProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_StringProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_BoundedNumericProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_OptionProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_ListProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_BooleanProperty(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_4kivy_10properties_PropertyStorage(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static char __pyx_k_1[] = "kivy.metrics";
static char __pyx_k_2[] = "";
static char __pyx_k_3[] = "errorhandler %s not callable";
static char __pyx_k_4[] = "None is not allowed for %s.%s";
static char __pyx_k_5[] = "%s.%s accept only int/float/long (got %r)";
static char __pyx_k_6[] = "%s.%s must have 2 components (got %r)";
static char __pyx_k_7[] = "%s.%s have an invalid format (got %r)";
static char __pyx_k_10[] = "%s.%s accept only str/unicode";
static char __pyx_k_11[] = "%s.%s accept only ObservableList";
static char __pyx_k_12[] = "%s.%s accept only ObservableDict";
static char __pyx_k_13[] = "%s.%s accept only Python object";
static char __pyx_k_15[] = "%s.%s accept only bool";
static char __pyx_k_16[] = "%s.%s is below the minimum bound (%d)";
static char __pyx_k_17[] = "%s.%s is above the maximum bound (%d)";
static char __pyx_k_18[] = "%s.%s is set to an invalid option %r. Must be one of: %s";
static char __pyx_k_19[] = "%s.%s must be a list or a tuple";
static char __pyx_k_20[] = "%s.%s value length is immutable";
static char __pyx_k_21[] = "VariableListProperty requires a length of 2 or 4 (got %r)";
static char __pyx_k_22[] = "%s.%s accepts only int/float/long/list/tuple/str (got %r)";
static char __pyx_k_23[] = "%s.%s must have 1 or 2 components (got %r)";
static char __pyx_k_24[] = "%s.%s must have 1, 2 or 4 components (got %r)";
static char __pyx_k_25[] = "%s.%s has an invalid format (got %r)";
static char __pyx_k_28[] = "Return min/max of the value.\n\n        .. versionadded:: 1.0.9\n        ";
static char __pyx_k_29[] = "Return the options available.\n\n        .. versionadded:: 1.0.9\n        ";
static char __pyx_k_30[] = "\nProperties\n==========\n\nThe *Properties* classes are used when you create a\n:class:`~kivy.event.EventDispatcher`.\n\n.. warning::\n        Kivy's Properties are **not to be confused** with Python's\n        properties (i.e. the ``@property`` decorator and the <property> type).\n\nKivy's property classes support:\n\n    Value Checking / Validation\n        When you assign a new value to a property, the value is checked to\n        pass constraints implemented in the class such as validation. For\n        example, validation for :class:`OptionProperty` will make sure that\n        the value is in a predefined list of possibilities. Validation for\n        :class:`NumericProperty` will check that your value is a numeric type.\n        This prevents many errors early on.\n\n    Observer Pattern\n        You can specify what should happen when a property's value changes.\n        You can bind your own function as a callback to changes of a\n        :class:`Property`. If, for example, you want a piece of code to be\n        called when a widget's :class:`~kivy.uix.widget.Widget.pos` property\n        changes, you can :class:`~kivy.event.EventDispatcher.bind` a function\n        to it.\n\n    Better Memory Management\n        The same instance of a property is shared across multiple widget\n        instances.\n\nComparison Python / Kivy\n------------------------\n\nBasic example\n~~~~~~~~~~~~~\n\nLet's compare Python and Kivy properties by creating a Python class with 'a'\nas a float::\n\n    class MyClass(object):\n        def __init__(self, a=1.0):\n            super(MyClass, self).__init__()\n            self.a = a\n\nWith Kivy, you can do::\n\n    class MyClass(EventDispatcher):\n        a = NumericProperty(1.0)\n\n\nValue checking\n~~~~~~~~~~~~~~\n\nIf you wanted to add a check such a minimum / maximum value allowed for a\nproperty, here is a possible implementation in Python::\n\n    class MyClass(object):\n        def __init__(self, a=1):\n            super(MyC""lass, self).__init__()\n            self._a = 0\n            self.a_min = 0\n            self.a_max = 100\n            self.a = a\n\n        def _get_a(self):\n            return self._a\n        def _set_a(self, value):\n            if value < self.a_min or value > self.a_max:\n                raise ValueError('a out of bounds')\n            self._a = a\n        a = property(_get_a, _set_a)\n\nThe disadvantage is you have to do that work yourself. And it becomes\nlaborious and complex if you have many properties.\nWith Kivy, you can simplify like this::\n\n    class MyClass(EventDispatcher):\n        a = BoundedNumericProperty(1, min=0, max=100)\n\nThat's all!\n\n\nError Handling\n~~~~~~~~~~~~~~\n\nIf setting a value would otherwise raise a ValueError, you have two options to\nhandle the error gracefully within the property.  An errorvalue is a substitute\nfor the invalid value. An errorhandler is a callable (single argument function\nor lambda) which can return a valid substitute.\n\nerrorhandler parameter::\n\n    # simply returns 0 if the value exceeds the bounds\n    bnp = BoundedNumericProperty(0, min=-500, max=500, errorvalue=0)\n\nerrorvalue parameter::\n\n    # returns a the boundary value when exceeded\n    bnp = BoundedNumericProperty(0, min=-500, max=500,\n        errorhandler=lambda x: 500 if x > 500 else -500)\n\n\nConclusion\n~~~~~~~~~~\n\nKivy properties are easier to use than the standard ones. See the next chapter\nfor examples of how to use them :)\n\n\nObserve Properties changes\n--------------------------\n\nAs we said in the beginning, Kivy's Properties implement the `Observer pattern\n<http://en.wikipedia.org/wiki/Observer_pattern>`_. That means you can\n:meth:`~kivy.event.EventDispatcher.bind` to a property and have your own\nfunction called when the value changes.\n\nMultiple ways are available to observe the changes.\n\nObserve using bind()\n~~~~~~~~~~~~~~~~~~~~\n\nYou can observe a property change by using the bind() method, outside the""\nclass::\n\n    class MyClass(EventDispatcher):\n        a = NumericProperty(1)\n\n    def callback(instance, value):\n        print 'My callback is call from', instance,\n        print 'and the a value changed to', value\n\n    ins = MyClass()\n    ins.bind(a=callback)\n\n    # At this point, any change to the a property will call your callback.\n    ins.a = 5    # callback called\n    ins.a = 5    # callback not called, because the value didnt change\n    ins.a = -1   # callback called\n\nObserve using 'on_<propname>'\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf you created the class yourself, you can use the 'on_<propname>' callback::\n\n    class MyClass(EventDispatcher):\n        a = NumericProperty(1)\n\n        def on_a(self, instance, value):\n            print 'My property a changed to', value\n\n.. warning::\n\n    Be careful with 'on_<propname>'. If you are creating such a callback on a\n    property you are inherit, you must not forget to call the subclass\n    function too.\n\n\n\n\n\n\n";
static char __pyx_k_31[] = "BoundedNumericProperty";
static char __pyx_k_32[] = "ReferenceListProperty";
static char __pyx_k_33[] = "VariableListProperty";
static char __pyx_k_38[] = "c:\\Users\\tito\\Desktop\\Kivy-dev\\kivy\\Kivy-1.7.2-w32\\Kivy-1.7.2\\kivy\\properties.pyx";
static char __pyx_k_39[] = "ObservableList.__init__";
static char __pyx_k_40[] = "kivy.properties";
static char __pyx_k_43[] = "ObservableList.__setitem__";
static char __pyx_k_46[] = "ObservableList.__delitem__";
static char __pyx_k_49[] = "ObservableList.__setslice__";
static char __pyx_k_52[] = "ObservableList.__delslice__";
static char __pyx_k_55[] = "ObservableList.__iadd__";
static char __pyx_k_58[] = "ObservableList.__imul__";
static char __pyx_k_61[] = "ObservableList.append";
static char __pyx_k_64[] = "ObservableList.remove";
static char __pyx_k_67[] = "ObservableList.insert";
static char __pyx_k_70[] = "ObservableList.pop";
static char __pyx_k_73[] = "ObservableList.extend";
static char __pyx_k_76[] = "ObservableList.sort";
static char __pyx_k_79[] = "ObservableList.reverse";
static char __pyx_k_82[] = "ObservableDict.__init__";
static char __pyx_k_85[] = "ObservableDict._weak_return";
static char __pyx_k_88[] = "ObservableDict.__getattr__";
static char __pyx_k_91[] = "ObservableDict.__setattr__";
static char __pyx_k_94[] = "ObservableDict.__setitem__";
static char __pyx_k_97[] = "ObservableDict.__delitem__";
static char __pyx_k_100[] = "ObservableDict.clear";
static char __pyx_k_103[] = "ObservableDict.remove";
static char __pyx_k_106[] = "ObservableDict.pop";
static char __pyx_k_109[] = "ObservableDict.popitem";
static char __pyx_k_112[] = "ObservableDict.setdefault";
static char __pyx_k_115[] = "ObservableDict.update";
static char __pyx_k__cm[] = "cm";
static char __pyx_k__dp[] = "dp";
static char __pyx_k__in[] = "in";
static char __pyx_k__mm[] = "mm";
static char __pyx_k__pt[] = "pt";
static char __pyx_k__px[] = "px";
static char __pyx_k__sp[] = "sp";
static char __pyx_k__dpi[] = "dpi";
static char __pyx_k__ext[] = "ext";
static char __pyx_k__get[] = "get";
static char __pyx_k__key[] = "key";
static char __pyx_k__max[] = "max";
static char __pyx_k__min[] = "min";
static char __pyx_k__obj[] = "obj";
static char __pyx_k__pop[] = "pop";
static char __pyx_k__ref[] = "ref";
static char __pyx_k__set[] = "set";
static char __pyx_k__attr[] = "attr";
static char __pyx_k__bind[] = "bind";
static char __pyx_k__item[] = "item";
static char __pyx_k__link[] = "link";
static char __pyx_k__name[] = "name";
static char __pyx_k__prop[] = "prop";
static char __pyx_k__self[] = "self";
static char __pyx_k__sort[] = "sort";
static char __pyx_k__cache[] = "cache";
static char __pyx_k__clear[] = "clear";
static char __pyx_k__largs[] = "largs";
static char __pyx_k__range[] = "range";
static char __pyx_k__super[] = "super";
static char __pyx_k__value[] = "value";
static char __pyx_k___value[] = "_value";
static char __pyx_k__append[] = "append";
static char __pyx_k__extend[] = "extend";
static char __pyx_k__getter[] = "getter";
static char __pyx_k__insert[] = "insert";
static char __pyx_k__length[] = "length";
static char __pyx_k__object[] = "object";
static char __pyx_k__remove[] = "remove";
static char __pyx_k__result[] = "result";
static char __pyx_k__setter[] = "setter";
static char __pyx_k__unbind[] = "unbind";
static char __pyx_k__update[] = "update";
static char __pyx_k__xrange[] = "xrange";
static char __pyx_k__Metrics[] = "Metrics";
static char __pyx_k____all__[] = "__all__";
static char __pyx_k__density[] = "density";
static char __pyx_k__options[] = "options";
static char __pyx_k__popitem[] = "popitem";
static char __pyx_k__reverse[] = "reverse";
static char __pyx_k__weakref[] = "weakref";
static char __pyx_k__KeyError[] = "KeyError";
static char __pyx_k__Property[] = "Property";
static char __pyx_k____iadd__[] = "__iadd__";
static char __pyx_k____imul__[] = "__imul__";
static char __pyx_k____init__[] = "__init__";
static char __pyx_k____main__[] = "__main__";
static char __pyx_k____name__[] = "__name__";
static char __pyx_k____test__[] = "__test__";
static char __pyx_k__dispatch[] = "dispatch";
static char __pyx_k__observer[] = "observer";
static char __pyx_k____class__[] = "__class__";
static char __pyx_k__allownone[] = "allownone";
static char __pyx_k__baseclass[] = "baseclass";
static char __pyx_k__fontscale[] = "fontscale";
static char __pyx_k__link_deps[] = "link_deps";
static char __pyx_k__ValueError[] = "ValueError";
static char __pyx_k____import__[] = "__import__";
static char __pyx_k____module__[] = "__module__";
static char __pyx_k__errorvalue[] = "errorvalue";
static char __pyx_k__setdefault[] = "setdefault";
static char __pyx_k____delitem__[] = "__delitem__";
static char __pyx_k____getattr__[] = "__getattr__";
static char __pyx_k____getitem__[] = "__getitem__";
static char __pyx_k____setattr__[] = "__setattr__";
static char __pyx_k____setitem__[] = "__setitem__";
static char __pyx_k__DictProperty[] = "DictProperty";
static char __pyx_k__ListProperty[] = "ListProperty";
static char __pyx_k____delslice__[] = "__delslice__";
static char __pyx_k____qualname__[] = "__qualname__";
static char __pyx_k____setslice__[] = "__setslice__";
static char __pyx_k___weak_return[] = "_weak_return";
static char __pyx_k__defaultvalue[] = "defaultvalue";
static char __pyx_k__errorhandler[] = "errorhandler";
static char __pyx_k__AliasProperty[] = "AliasProperty";
static char __pyx_k____metaclass__[] = "__metaclass__";
static char __pyx_k__AttributeError[] = "AttributeError";
static char __pyx_k__ObjectProperty[] = "ObjectProperty";
static char __pyx_k__ObservableDict[] = "ObservableDict";
static char __pyx_k__ObservableList[] = "ObservableList";
static char __pyx_k__OptionProperty[] = "OptionProperty";
static char __pyx_k__StringProperty[] = "StringProperty";
static char __pyx_k____pyx_vtable__[] = "__pyx_vtable__";
static char __pyx_k__trigger_change[] = "trigger_change";
static char __pyx_k__BooleanProperty[] = "BooleanProperty";
static char __pyx_k__NUMERIC_FORMATS[] = "NUMERIC_FORMATS";
static char __pyx_k__NumericProperty[] = "NumericProperty";
static PyObject *__pyx_n_s_1;
static PyObject *__pyx_kp_s_10;
static PyObject *__pyx_n_s_100;
static PyObject *__pyx_n_s_103;
static PyObject *__pyx_n_s_106;
static PyObject *__pyx_n_s_109;
static PyObject *__pyx_kp_s_11;
static PyObject *__pyx_n_s_112;
static PyObject *__pyx_n_s_115;
static PyObject *__pyx_kp_s_12;
static PyObject *__pyx_kp_s_13;
static PyObject *__pyx_kp_s_15;
static PyObject *__pyx_kp_s_16;
static PyObject *__pyx_kp_s_17;
static PyObject *__pyx_kp_s_18;
static PyObject *__pyx_kp_s_19;
static PyObject *__pyx_kp_s_2;
static PyObject *__pyx_kp_s_20;
static PyObject *__pyx_kp_s_21;
static PyObject *__pyx_kp_s_22;
static PyObject *__pyx_kp_s_23;
static PyObject *__pyx_kp_s_24;
static PyObject *__pyx_kp_s_25;
static PyObject *__pyx_kp_s_3;
static PyObject *__pyx_n_s_31;
static PyObject *__pyx_n_s_32;
static PyObject *__pyx_n_s_33;
static PyObject *__pyx_kp_s_38;
static PyObject *__pyx_n_s_39;
static PyObject *__pyx_kp_s_4;
static PyObject *__pyx_n_s_40;
static PyObject *__pyx_n_s_43;
static PyObject *__pyx_n_s_46;
static PyObject *__pyx_n_s_49;
static PyObject *__pyx_kp_s_5;
static PyObject *__pyx_n_s_52;
static PyObject *__pyx_n_s_55;
static PyObject *__pyx_n_s_58;
static PyObject *__pyx_kp_s_6;
static PyObject *__pyx_n_s_61;
static PyObject *__pyx_n_s_64;
static PyObject *__pyx_n_s_67;
static PyObject *__pyx_kp_s_7;
static PyObject *__pyx_n_s_70;
static PyObject *__pyx_n_s_73;
static PyObject *__pyx_n_s_76;
static PyObject *__pyx_n_s_79;
static PyObject *__pyx_n_s_82;
static PyObject *__pyx_n_s_85;
static PyObject *__pyx_n_s_88;
static PyObject *__pyx_n_s_91;
static PyObject *__pyx_n_s_94;
static PyObject *__pyx_n_s_97;
static PyObject *__pyx_n_s__AliasProperty;
static PyObject *__pyx_n_s__AttributeError;
static PyObject *__pyx_n_s__BooleanProperty;
static PyObject *__pyx_n_s__DictProperty;
static PyObject *__pyx_n_s__KeyError;
static PyObject *__pyx_n_s__ListProperty;
static PyObject *__pyx_n_s__Metrics;
static PyObject *__pyx_n_s__NUMERIC_FORMATS;
static PyObject *__pyx_n_s__NumericProperty;
static PyObject *__pyx_n_s__ObjectProperty;
static PyObject *__pyx_n_s__ObservableDict;
static PyObject *__pyx_n_s__ObservableList;
static PyObject *__pyx_n_s__OptionProperty;
static PyObject *__pyx_n_s__Property;
static PyObject *__pyx_n_s__StringProperty;
static PyObject *__pyx_n_s__ValueError;
static PyObject *__pyx_n_s____all__;
static PyObject *__pyx_n_s____class__;
static PyObject *__pyx_n_s____delitem__;
static PyObject *__pyx_n_s____delslice__;
static PyObject *__pyx_n_s____getattr__;
static PyObject *__pyx_n_s____getitem__;
static PyObject *__pyx_n_s____iadd__;
static PyObject *__pyx_n_s____import__;
static PyObject *__pyx_n_s____imul__;
static PyObject *__pyx_n_s____init__;
static PyObject *__pyx_n_s____main__;
static PyObject *__pyx_n_s____metaclass__;
static PyObject *__pyx_n_s____module__;
static PyObject *__pyx_n_s____name__;
static PyObject *__pyx_n_s____pyx_vtable__;
static PyObject *__pyx_n_s____qualname__;
static PyObject *__pyx_n_s____setattr__;
static PyObject *__pyx_n_s____setitem__;
static PyObject *__pyx_n_s____setslice__;
static PyObject *__pyx_n_s____test__;
static PyObject *__pyx_n_s___value;
static PyObject *__pyx_n_s___weak_return;
static PyObject *__pyx_n_s__allownone;
static PyObject *__pyx_n_s__append;
static PyObject *__pyx_n_s__attr;
static PyObject *__pyx_n_s__baseclass;
static PyObject *__pyx_n_s__bind;
static PyObject *__pyx_n_s__cache;
static PyObject *__pyx_n_s__clear;
static PyObject *__pyx_n_s__cm;
static PyObject *__pyx_n_s__defaultvalue;
static PyObject *__pyx_n_s__density;
static PyObject *__pyx_n_s__dispatch;
static PyObject *__pyx_n_s__dp;
static PyObject *__pyx_n_s__dpi;
static PyObject *__pyx_n_s__errorhandler;
static PyObject *__pyx_n_s__errorvalue;
static PyObject *__pyx_n_s__ext;
static PyObject *__pyx_n_s__extend;
static PyObject *__pyx_n_s__fontscale;
static PyObject *__pyx_n_s__get;
static PyObject *__pyx_n_s__getter;
static PyObject *__pyx_n_s__in;
static PyObject *__pyx_n_s__insert;
static PyObject *__pyx_n_s__item;
static PyObject *__pyx_n_s__key;
static PyObject *__pyx_n_s__largs;
static PyObject *__pyx_n_s__length;
static PyObject *__pyx_n_s__link;
static PyObject *__pyx_n_s__link_deps;
static PyObject *__pyx_n_s__max;
static PyObject *__pyx_n_s__min;
static PyObject *__pyx_n_s__mm;
static PyObject *__pyx_n_s__name;
static PyObject *__pyx_n_s__obj;
static PyObject *__pyx_n_s__object;
static PyObject *__pyx_n_s__observer;
static PyObject *__pyx_n_s__options;
static PyObject *__pyx_n_s__pop;
static PyObject *__pyx_n_s__popitem;
static PyObject *__pyx_n_s__prop;
static PyObject *__pyx_n_s__pt;
static PyObject *__pyx_n_s__px;
static PyObject *__pyx_n_s__range;
static PyObject *__pyx_n_s__ref;
static PyObject *__pyx_n_s__remove;
static PyObject *__pyx_n_s__result;
static PyObject *__pyx_n_s__reverse;
static PyObject *__pyx_n_s__self;
static PyObject *__pyx_n_s__set;
static PyObject *__pyx_n_s__setdefault;
static PyObject *__pyx_n_s__setter;
static PyObject *__pyx_n_s__sort;
static PyObject *__pyx_n_s__sp;
static PyObject *__pyx_n_s__super;
static PyObject *__pyx_n_s__trigger_change;
static PyObject *__pyx_n_s__unbind;
static PyObject *__pyx_n_s__update;
static PyObject *__pyx_n_s__value;
static PyObject *__pyx_n_s__weakref;
static PyObject *__pyx_n_s__xrange;
static PyObject *__pyx_int_0;
static PyObject *__pyx_int_1;
static PyObject *__pyx_int_2;
static PyObject *__pyx_int_4;
static PyObject *__pyx_int_neg_2;
static PyObject *__pyx_k_14;
static PyObject *__pyx_k_slice_8;
static PyObject *__pyx_k_slice_9;
static PyObject *__pyx_k_slice_26;
static PyObject *__pyx_k_slice_27;
static PyObject *__pyx_k_tuple_34;
static PyObject *__pyx_k_tuple_35;
static PyObject *__pyx_k_tuple_36;
static PyObject *__pyx_k_tuple_41;
static PyObject *__pyx_k_tuple_44;
static PyObject *__pyx_k_tuple_47;
static PyObject *__pyx_k_tuple_50;
static PyObject *__pyx_k_tuple_53;
static PyObject *__pyx_k_tuple_56;
static PyObject *__pyx_k_tuple_59;
static PyObject *__pyx_k_tuple_62;
static PyObject *__pyx_k_tuple_65;
static PyObject *__pyx_k_tuple_68;
static PyObject *__pyx_k_tuple_71;
static PyObject *__pyx_k_tuple_74;
static PyObject *__pyx_k_tuple_77;
static PyObject *__pyx_k_tuple_80;
static PyObject *__pyx_k_tuple_83;
static PyObject *__pyx_k_tuple_86;
static PyObject *__pyx_k_tuple_89;
static PyObject *__pyx_k_tuple_92;
static PyObject *__pyx_k_tuple_95;
static PyObject *__pyx_k_tuple_98;
static PyObject *__pyx_k_tuple_101;
static PyObject *__pyx_k_tuple_104;
static PyObject *__pyx_k_tuple_107;
static PyObject *__pyx_k_tuple_110;
static PyObject *__pyx_k_tuple_113;
static PyObject *__pyx_k_codeobj_37;
static PyObject *__pyx_k_codeobj_42;
static PyObject *__pyx_k_codeobj_45;
static PyObject *__pyx_k_codeobj_48;
static PyObject *__pyx_k_codeobj_51;
static PyObject *__pyx_k_codeobj_54;
static PyObject *__pyx_k_codeobj_57;
static PyObject *__pyx_k_codeobj_60;
static PyObject *__pyx_k_codeobj_63;
static PyObject *__pyx_k_codeobj_66;
static PyObject *__pyx_k_codeobj_69;
static PyObject *__pyx_k_codeobj_72;
static PyObject *__pyx_k_codeobj_75;
static PyObject *__pyx_k_codeobj_78;
static PyObject *__pyx_k_codeobj_81;
static PyObject *__pyx_k_codeobj_84;
static PyObject *__pyx_k_codeobj_87;
static PyObject *__pyx_k_codeobj_90;
static PyObject *__pyx_k_codeobj_93;
static PyObject *__pyx_k_codeobj_96;
static PyObject *__pyx_k_codeobj_99;
static PyObject *__pyx_k_codeobj_102;
static PyObject *__pyx_k_codeobj_105;
static PyObject *__pyx_k_codeobj_108;
static PyObject *__pyx_k_codeobj_111;
static PyObject *__pyx_k_codeobj_114;

/* "kivy\properties.pyx":182
 * NUMERIC_FORMATS = ('in', 'px', 'dp', 'sp', 'pt', 'cm', 'mm')
 * 
 * cpdef float dpi2px(value, ext):             # <<<<<<<<<<<<<<
 *     # 1in = 2.54cm = 25.4mm = 72pt = 12pc
 *     global g_dpi, g_density, g_fontscale
 */

static PyObject *__pyx_pw_4kivy_10properties_1dpi2px(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static float __pyx_f_4kivy_10properties_dpi2px(PyObject *__pyx_v_value, PyObject *__pyx_v_ext, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_Metrics = NULL;
  float __pyx_v_rv;
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  float __pyx_t_4;
  double __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dpi2px", 0);

  /* "kivy\properties.pyx":185
 *     # 1in = 2.54cm = 25.4mm = 72pt = 12pc
 *     global g_dpi, g_density, g_fontscale
 *     if g_dpi == -1:             # <<<<<<<<<<<<<<
 *         from kivy.metrics import Metrics
 *         g_dpi = Metrics.dpi
 */
  __pyx_t_1 = ((__pyx_v_4kivy_10properties_g_dpi == -1.0) != 0);
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":186
 *     global g_dpi, g_density, g_fontscale
 *     if g_dpi == -1:
 *         from kivy.metrics import Metrics             # <<<<<<<<<<<<<<
 *         g_dpi = Metrics.dpi
 *         g_density = Metrics.density
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)__pyx_n_s__Metrics));
    PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__Metrics));
    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Metrics));
    __pyx_t_3 = __Pyx_Import(((PyObject *)__pyx_n_s_1), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s__Metrics); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v_Metrics = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "kivy\properties.pyx":187
 *     if g_dpi == -1:
 *         from kivy.metrics import Metrics
 *         g_dpi = Metrics.dpi             # <<<<<<<<<<<<<<
 *         g_density = Metrics.density
 *         g_fontscale = Metrics.fontscale
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_Metrics, __pyx_n_s__dpi); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_4kivy_10properties_g_dpi = __pyx_t_4;

    /* "kivy\properties.pyx":188
 *         from kivy.metrics import Metrics
 *         g_dpi = Metrics.dpi
 *         g_density = Metrics.density             # <<<<<<<<<<<<<<
 *         g_fontscale = Metrics.fontscale
 *     cdef float rv = float(value)
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_Metrics, __pyx_n_s__density); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_4kivy_10properties_g_density = __pyx_t_4;

    /* "kivy\properties.pyx":189
 *         g_dpi = Metrics.dpi
 *         g_density = Metrics.density
 *         g_fontscale = Metrics.fontscale             # <<<<<<<<<<<<<<
 *     cdef float rv = float(value)
 *     if ext == 'in':
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_Metrics, __pyx_n_s__fontscale); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_4kivy_10properties_g_fontscale = __pyx_t_4;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":190
 *         g_density = Metrics.density
 *         g_fontscale = Metrics.fontscale
 *     cdef float rv = float(value)             # <<<<<<<<<<<<<<
 *     if ext == 'in':
 *         return rv * g_dpi
 */
  __pyx_t_5 = __Pyx_PyObject_AsDouble(__pyx_v_value); if (unlikely(__pyx_t_5 == ((double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_rv = __pyx_t_5;

  /* "kivy\properties.pyx":191
 *         g_fontscale = Metrics.fontscale
 *     cdef float rv = float(value)
 *     if ext == 'in':             # <<<<<<<<<<<<<<
 *         return rv * g_dpi
 *     elif ext == 'px':
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_ext, ((PyObject *)__pyx_n_s__in), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":192
 *     cdef float rv = float(value)
 *     if ext == 'in':
 *         return rv * g_dpi             # <<<<<<<<<<<<<<
 *     elif ext == 'px':
 *         return rv
 */
    __pyx_r = (__pyx_v_rv * __pyx_v_4kivy_10properties_g_dpi);
    goto __pyx_L0;
    goto __pyx_L4;
  }

  /* "kivy\properties.pyx":193
 *     if ext == 'in':
 *         return rv * g_dpi
 *     elif ext == 'px':             # <<<<<<<<<<<<<<
 *         return rv
 *     elif ext == 'dp':
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_ext, ((PyObject *)__pyx_n_s__px), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":194
 *         return rv * g_dpi
 *     elif ext == 'px':
 *         return rv             # <<<<<<<<<<<<<<
 *     elif ext == 'dp':
 *         return rv * g_density
 */
    __pyx_r = __pyx_v_rv;
    goto __pyx_L0;
    goto __pyx_L4;
  }

  /* "kivy\properties.pyx":195
 *     elif ext == 'px':
 *         return rv
 *     elif ext == 'dp':             # <<<<<<<<<<<<<<
 *         return rv * g_density
 *     elif ext == 'sp':
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_ext, ((PyObject *)__pyx_n_s__dp), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":196
 *         return rv
 *     elif ext == 'dp':
 *         return rv * g_density             # <<<<<<<<<<<<<<
 *     elif ext == 'sp':
 *         return rv * g_density * g_fontscale
 */
    __pyx_r = (__pyx_v_rv * __pyx_v_4kivy_10properties_g_density);
    goto __pyx_L0;
    goto __pyx_L4;
  }

  /* "kivy\properties.pyx":197
 *     elif ext == 'dp':
 *         return rv * g_density
 *     elif ext == 'sp':             # <<<<<<<<<<<<<<
 *         return rv * g_density * g_fontscale
 *     elif ext == 'pt':
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_ext, ((PyObject *)__pyx_n_s__sp), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":198
 *         return rv * g_density
 *     elif ext == 'sp':
 *         return rv * g_density * g_fontscale             # <<<<<<<<<<<<<<
 *     elif ext == 'pt':
 *         return rv * g_dpi / 72.
 */
    __pyx_r = ((__pyx_v_rv * __pyx_v_4kivy_10properties_g_density) * __pyx_v_4kivy_10properties_g_fontscale);
    goto __pyx_L0;
    goto __pyx_L4;
  }

  /* "kivy\properties.pyx":199
 *     elif ext == 'sp':
 *         return rv * g_density * g_fontscale
 *     elif ext == 'pt':             # <<<<<<<<<<<<<<
 *         return rv * g_dpi / 72.
 *     elif ext == 'cm':
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_ext, ((PyObject *)__pyx_n_s__pt), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":200
 *         return rv * g_density * g_fontscale
 *     elif ext == 'pt':
 *         return rv * g_dpi / 72.             # <<<<<<<<<<<<<<
 *     elif ext == 'cm':
 *         return rv * g_dpi / 2.54
 */
    __pyx_r = ((__pyx_v_rv * __pyx_v_4kivy_10properties_g_dpi) / 72.);
    goto __pyx_L0;
    goto __pyx_L4;
  }

  /* "kivy\properties.pyx":201
 *     elif ext == 'pt':
 *         return rv * g_dpi / 72.
 *     elif ext == 'cm':             # <<<<<<<<<<<<<<
 *         return rv * g_dpi / 2.54
 *     elif ext == 'mm':
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_ext, ((PyObject *)__pyx_n_s__cm), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":202
 *         return rv * g_dpi / 72.
 *     elif ext == 'cm':
 *         return rv * g_dpi / 2.54             # <<<<<<<<<<<<<<
 *     elif ext == 'mm':
 *         return rv * g_dpi / 25.4
 */
    __pyx_r = ((__pyx_v_rv * __pyx_v_4kivy_10properties_g_dpi) / 2.54);
    goto __pyx_L0;
    goto __pyx_L4;
  }

  /* "kivy\properties.pyx":203
 *     elif ext == 'cm':
 *         return rv * g_dpi / 2.54
 *     elif ext == 'mm':             # <<<<<<<<<<<<<<
 *         return rv * g_dpi / 25.4
 * 
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_ext, ((PyObject *)__pyx_n_s__mm), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":204
 *         return rv * g_dpi / 2.54
 *     elif ext == 'mm':
 *         return rv * g_dpi / 25.4             # <<<<<<<<<<<<<<
 * 
 * cdef class Property:
 */
    __pyx_r = ((__pyx_v_rv * __pyx_v_4kivy_10properties_g_dpi) / 25.4);
    goto __pyx_L0;
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_WriteUnraisable("kivy.properties.dpi2px", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Metrics);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_1dpi2px(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_1dpi2px(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_ext = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dpi2px (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__value,&__pyx_n_s__ext,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ext)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("dpi2px", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dpi2px") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_value = values[0];
    __pyx_v_ext = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dpi2px", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.dpi2px", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_dpi2px(__pyx_self, __pyx_v_value, __pyx_v_ext);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":182
 * NUMERIC_FORMATS = ('in', 'px', 'dp', 'sp', 'pt', 'cm', 'mm')
 * 
 * cpdef float dpi2px(value, ext):             # <<<<<<<<<<<<<<
 *     # 1in = 2.54cm = 25.4mm = 72pt = 12pc
 *     global g_dpi, g_density, g_fontscale
 */

static PyObject *__pyx_pf_4kivy_10properties_dpi2px(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_value, PyObject *__pyx_v_ext) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dpi2px", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_f_4kivy_10properties_dpi2px(__pyx_v_value, __pyx_v_ext, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.dpi2px", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_8Property_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_8Property_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_4kivy_10properties_8Property___cinit__(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":248
 *     '''
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._name = ''
 *         self.allownone = 0
 */

static int __pyx_pf_4kivy_10properties_8Property___cinit__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "kivy\properties.pyx":249
 * 
 *     def __cinit__(self):
 *         self._name = ''             # <<<<<<<<<<<<<<
 *         self.allownone = 0
 *         self.defaultvalue = None
 */
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_2));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_2));
  __Pyx_GOTREF(__pyx_v_self->_name);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->_name));
  __pyx_v_self->_name = __pyx_kp_s_2;

  /* "kivy\properties.pyx":250
 *     def __cinit__(self):
 *         self._name = ''
 *         self.allownone = 0             # <<<<<<<<<<<<<<
 *         self.defaultvalue = None
 *         self.errorvalue = None
 */
  __pyx_v_self->allownone = 0;

  /* "kivy\properties.pyx":251
 *         self._name = ''
 *         self.allownone = 0
 *         self.defaultvalue = None             # <<<<<<<<<<<<<<
 *         self.errorvalue = None
 *         self.errorhandler = None
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->defaultvalue);
  __Pyx_DECREF(__pyx_v_self->defaultvalue);
  __pyx_v_self->defaultvalue = Py_None;

  /* "kivy\properties.pyx":252
 *         self.allownone = 0
 *         self.defaultvalue = None
 *         self.errorvalue = None             # <<<<<<<<<<<<<<
 *         self.errorhandler = None
 *         self.errorvalue_set = 0
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->errorvalue);
  __Pyx_DECREF(__pyx_v_self->errorvalue);
  __pyx_v_self->errorvalue = Py_None;

  /* "kivy\properties.pyx":253
 *         self.defaultvalue = None
 *         self.errorvalue = None
 *         self.errorhandler = None             # <<<<<<<<<<<<<<
 *         self.errorvalue_set = 0
 * 
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->errorhandler);
  __Pyx_DECREF(__pyx_v_self->errorhandler);
  __pyx_v_self->errorhandler = Py_None;

  /* "kivy\properties.pyx":254
 *         self.errorvalue = None
 *         self.errorhandler = None
 *         self.errorvalue_set = 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->errorvalue_set = 0;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_8Property_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_8Property_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_defaultvalue = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kw = PyDict_New(); if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__defaultvalue,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__defaultvalue)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_defaultvalue = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
  __Pyx_AddTraceback("kivy.properties.Property.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_2__init__(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_defaultvalue, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":257
 * 
 * 
 *     def __init__(self, defaultvalue, **kw):             # <<<<<<<<<<<<<<
 *         self.defaultvalue = defaultvalue
 *         self.allownone = <int>kw.get('allownone', 0)
 */

static int __pyx_pf_4kivy_10properties_8Property_2__init__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":258
 * 
 *     def __init__(self, defaultvalue, **kw):
 *         self.defaultvalue = defaultvalue             # <<<<<<<<<<<<<<
 *         self.allownone = <int>kw.get('allownone', 0)
 *         self.errorvalue = kw.get('errorvalue', None)
 */
  __Pyx_INCREF(__pyx_v_defaultvalue);
  __Pyx_GIVEREF(__pyx_v_defaultvalue);
  __Pyx_GOTREF(__pyx_v_self->defaultvalue);
  __Pyx_DECREF(__pyx_v_self->defaultvalue);
  __pyx_v_self->defaultvalue = __pyx_v_defaultvalue;

  /* "kivy\properties.pyx":259
 *     def __init__(self, defaultvalue, **kw):
 *         self.defaultvalue = defaultvalue
 *         self.allownone = <int>kw.get('allownone', 0)             # <<<<<<<<<<<<<<
 *         self.errorvalue = kw.get('errorvalue', None)
 *         self.errorhandler = kw.get('errorhandler', None)
 */
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_kw), ((PyObject *)__pyx_n_s__allownone), __pyx_int_0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_self->allownone = ((int)__pyx_t_2);

  /* "kivy\properties.pyx":260
 *         self.defaultvalue = defaultvalue
 *         self.allownone = <int>kw.get('allownone', 0)
 *         self.errorvalue = kw.get('errorvalue', None)             # <<<<<<<<<<<<<<
 *         self.errorhandler = kw.get('errorhandler', None)
 * 
 */
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_kw), ((PyObject *)__pyx_n_s__errorvalue), Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->errorvalue);
  __Pyx_DECREF(__pyx_v_self->errorvalue);
  __pyx_v_self->errorvalue = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":261
 *         self.allownone = <int>kw.get('allownone', 0)
 *         self.errorvalue = kw.get('errorvalue', None)
 *         self.errorhandler = kw.get('errorhandler', None)             # <<<<<<<<<<<<<<
 * 
 *         if 'errorvalue' in kw:
 */
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_kw), ((PyObject *)__pyx_n_s__errorhandler), Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->errorhandler);
  __Pyx_DECREF(__pyx_v_self->errorhandler);
  __pyx_v_self->errorhandler = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":263
 *         self.errorhandler = kw.get('errorhandler', None)
 * 
 *         if 'errorvalue' in kw:             # <<<<<<<<<<<<<<
 *             self.errorvalue_set = 1
 * 
 */
  __pyx_t_3 = (__Pyx_PyDict_Contains(((PyObject *)__pyx_n_s__errorvalue), ((PyObject *)__pyx_v_kw), Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":264
 * 
 *         if 'errorvalue' in kw:
 *             self.errorvalue_set = 1             # <<<<<<<<<<<<<<
 * 
 *         if 'errorhandler' in kw and not callable(self.errorhandler):
 */
    __pyx_v_self->errorvalue_set = 1;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":266
 *             self.errorvalue_set = 1
 * 
 *         if 'errorhandler' in kw and not callable(self.errorhandler):             # <<<<<<<<<<<<<<
 *             raise ValueError('errorhandler %s not callable' % self.errorhandler)
 * 
 */
  __pyx_t_4 = (__Pyx_PyDict_Contains(((PyObject *)__pyx_n_s__errorhandler), ((PyObject *)__pyx_v_kw), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if ((__pyx_t_4 != 0)) {
    __pyx_t_1 = __pyx_v_self->errorhandler;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyCallable_Check(__pyx_t_1); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = ((!(__pyx_t_3 != 0)) != 0);
    __pyx_t_3 = __pyx_t_5;
  } else {
    __pyx_t_3 = (__pyx_t_4 != 0);
  }
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":267
 * 
 *         if 'errorhandler' in kw and not callable(self.errorhandler):
 *             raise ValueError('errorhandler %s not callable' % self.errorhandler)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_3), __pyx_v_self->errorhandler); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.Property.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_8Property_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_4name___get__(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":271
 * 
 *     property name:
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self._name
 * 
 */

static PyObject *__pyx_pf_4kivy_10properties_8Property_4name___get__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "kivy\properties.pyx":272
 *     property name:
 *         def __get__(self):
 *             return self._name             # <<<<<<<<<<<<<<
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_name));
  __pyx_r = ((PyObject *)__pyx_v_self->_name);
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":274
 *             return self._name
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):             # <<<<<<<<<<<<<<
 *         storage.value = self.convert(obj, self.defaultvalue)
 *         storage.observers = []
 */

static PyObject *__pyx_f_4kivy_10properties_8Property_init_storage(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_storage) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init_storage", 0);

  /* "kivy\properties.pyx":275
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         storage.value = self.convert(obj, self.defaultvalue)             # <<<<<<<<<<<<<<
 *         storage.observers = []
 * 
 */
  __pyx_t_1 = __pyx_v_self->defaultvalue;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->convert(__pyx_v_self, __pyx_v_obj, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_storage->value);
  __Pyx_DECREF(__pyx_v_storage->value);
  __pyx_v_storage->value = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "kivy\properties.pyx":276
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         storage.value = self.convert(obj, self.defaultvalue)
 *         storage.observers = []             # <<<<<<<<<<<<<<
 * 
 *     cpdef link(self, EventDispatcher obj, str name):
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
  __Pyx_GOTREF(__pyx_v_storage->observers);
  __Pyx_DECREF(((PyObject *)__pyx_v_storage->observers));
  __pyx_v_storage->observers = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("kivy.properties.Property.init_storage", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":278
 *         storage.observers = []
 * 
 *     cpdef link(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         '''Link the instance with its real name.
 * 
 */

static PyObject *__pyx_pw_4kivy_10properties_8Property_5link(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_8Property_link(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_d = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__link); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_8Property_5link)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(((PyObject *)__pyx_v_name));
      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_name));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_name));
      __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 = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":297
 *         storage space of the property for this specific widget instance.
 *         '''
 *         cdef PropertyStorage d = PropertyStorage()             # <<<<<<<<<<<<<<
 *         self._name = name
 *         obj.__storage[name] = d
 */
  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_PropertyStorage)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_d = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":298
 *         '''
 *         cdef PropertyStorage d = PropertyStorage()
 *         self._name = name             # <<<<<<<<<<<<<<
 *         obj.__storage[name] = d
 *         self.init_storage(obj, d)
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_name));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_name));
  __Pyx_GOTREF(__pyx_v_self->_name);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->_name));
  __pyx_v_self->_name = __pyx_v_name;

  /* "kivy\properties.pyx":299
 *         cdef PropertyStorage d = PropertyStorage()
 *         self._name = name
 *         obj.__storage[name] = d             # <<<<<<<<<<<<<<
 *         self.init_storage(obj, d)
 * 
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  if (PyDict_SetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_name), ((PyObject *)__pyx_v_d)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":300
 *         self._name = name
 *         obj.__storage[name] = d
 *         self.init_storage(obj, d)             # <<<<<<<<<<<<<<
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->init_storage(__pyx_v_self, __pyx_v_obj, __pyx_v_d); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.Property.link", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_d);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_5link(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4kivy_10properties_8Property_4link[] = "Link the instance with its real name.\n\n        .. warning::\n\n            Internal usage only.\n\n        When a widget is defined and uses a :class:`Property` class, the\n        creation of the property object happens, but the instance doesn't know\n        anything about its name in the widget class::\n\n            class MyWidget(Widget):\n                uid = NumericProperty(0)\n\n        In this example, the uid will be a NumericProperty() instance, but the\n        property instance doesn't know its name. That's why :func:`link` is\n        used in Widget.__new__. The link function is also used to create the\n        storage space of the property for this specific widget instance.\n        ";
static PyObject *__pyx_pw_4kivy_10properties_8Property_5link(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_name = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("link (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__name,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("link", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "link") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_name = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("link", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.Property.link", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_4link(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_name);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":278
 *         storage.observers = []
 * 
 *     cpdef link(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         '''Link the instance with its real name.
 * 
 */

static PyObject *__pyx_pf_4kivy_10properties_8Property_4link(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->link(__pyx_v_self, __pyx_v_obj, __pyx_v_name, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.Property.link", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":302
 *         self.init_storage(obj, d)
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         pass
 * 
 */

static PyObject *__pyx_pw_4kivy_10properties_8Property_7link_deps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_8Property_link_deps(CYTHON_UNUSED struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, CYTHON_UNUSED struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_name, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link_deps", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__link_deps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_8Property_7link_deps)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(((PyObject *)__pyx_v_name));
      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_name));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_name));
      __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 = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":303
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):
 *         pass             # <<<<<<<<<<<<<<
 * 
 *     cpdef bind(self, EventDispatcher obj, observer):
 */

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.Property.link_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_7link_deps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_8Property_7link_deps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_name = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("link_deps (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__name,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("link_deps", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "link_deps") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_name = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("link_deps", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.Property.link_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_6link_deps(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_name);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":302
 *         self.init_storage(obj, d)
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         pass
 * 
 */

static PyObject *__pyx_pf_4kivy_10properties_8Property_6link_deps(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link_deps", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->link_deps(__pyx_v_self, __pyx_v_obj, __pyx_v_name, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.Property.link_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":305
 *         pass
 * 
 *     cpdef bind(self, EventDispatcher obj, observer):             # <<<<<<<<<<<<<<
 *         '''Add a new observer to be called only when the value is changed.
 *         '''
 */

static PyObject *__pyx_pw_4kivy_10properties_8Property_9bind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_8Property_bind(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_observer, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("bind", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__bind); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_8Property_9bind)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v_observer);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_observer);
      __Pyx_GIVEREF(__pyx_v_observer);
      __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 = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":308
 *         '''Add a new observer to be called only when the value is changed.
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if observer not in ps.observers:
 *             ps.observers.append(observer)
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->_name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":309
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if observer not in ps.observers:             # <<<<<<<<<<<<<<
 *             ps.observers.append(observer)
 * 
 */
  __pyx_t_4 = (__Pyx_PySequence_Contains(__pyx_v_observer, ((PyObject *)__pyx_v_ps->observers), Py_NE)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "kivy\properties.pyx":310
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if observer not in ps.observers:
 *             ps.observers.append(observer)             # <<<<<<<<<<<<<<
 * 
 *     cpdef unbind(self, EventDispatcher obj, observer):
 */
    if (unlikely(((PyObject *)__pyx_v_ps->observers) == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_ps->observers, __pyx_v_observer); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L3;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.Property.bind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_9bind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4kivy_10properties_8Property_8bind[] = "Add a new observer to be called only when the value is changed.\n        ";
static PyObject *__pyx_pw_4kivy_10properties_8Property_9bind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_observer = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bind (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__observer,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__observer)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bind", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bind") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_observer = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bind", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.Property.bind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_8bind(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_observer);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":305
 *         pass
 * 
 *     cpdef bind(self, EventDispatcher obj, observer):             # <<<<<<<<<<<<<<
 *         '''Add a new observer to be called only when the value is changed.
 *         '''
 */

static PyObject *__pyx_pf_4kivy_10properties_8Property_8bind(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_observer) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("bind", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->bind(__pyx_v_self, __pyx_v_obj, __pyx_v_observer, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.Property.bind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":312
 *             ps.observers.append(observer)
 * 
 *     cpdef unbind(self, EventDispatcher obj, observer):             # <<<<<<<<<<<<<<
 *         '''Remove the observer from our widget observer list.
 *         '''
 */

static PyObject *__pyx_pw_4kivy_10properties_8Property_11unbind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_8Property_unbind(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_observer, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_v_item = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("unbind", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__unbind); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_8Property_11unbind)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v_observer);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_observer);
      __Pyx_GIVEREF(__pyx_v_observer);
      __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 = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":315
 *         '''Remove the observer from our widget observer list.
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         for item in ps.observers[:]:
 *             if item == observer:
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->_name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":316
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         for item in ps.observers[:]:             # <<<<<<<<<<<<<<
 *             if item == observer:
 *                 ps.observers.remove(item)
 */
  if (unlikely(((PyObject *)__pyx_v_ps->observers) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyList_GetSlice(((PyObject *)__pyx_v_ps->observers), 0, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  if (unlikely(((PyObject *)__pyx_t_1) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_3 = ((PyObject *)__pyx_t_1); __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  for (;;) {
    if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
    #if CYTHON_COMPILING_IN_CPYTHON
    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #else
    __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #endif
    __Pyx_XDECREF(__pyx_v_item);
    __pyx_v_item = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "kivy\properties.pyx":317
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         for item in ps.observers[:]:
 *             if item == observer:             # <<<<<<<<<<<<<<
 *                 ps.observers.remove(item)
 * 
 */
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_item, __pyx_v_observer, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_5) {

      /* "kivy\properties.pyx":318
 *         for item in ps.observers[:]:
 *             if item == observer:
 *                 ps.observers.remove(item)             # <<<<<<<<<<<<<<
 * 
 *     def __set__(self, EventDispatcher obj, val):
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ps->observers), __pyx_n_s__remove); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_v_item);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_item);
      __Pyx_GIVEREF(__pyx_v_item);
      __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L5;
    }
    __pyx_L5:;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.Property.unbind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_11unbind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4kivy_10properties_8Property_10unbind[] = "Remove the observer from our widget observer list.\n        ";
static PyObject *__pyx_pw_4kivy_10properties_8Property_11unbind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_observer = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("unbind (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__observer,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__observer)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("unbind", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "unbind") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_observer = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("unbind", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.Property.unbind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_10unbind(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_observer);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":312
 *             ps.observers.append(observer)
 * 
 *     cpdef unbind(self, EventDispatcher obj, observer):             # <<<<<<<<<<<<<<
 *         '''Remove the observer from our widget observer list.
 *         '''
 */

static PyObject *__pyx_pf_4kivy_10properties_8Property_10unbind(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_observer) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("unbind", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->unbind(__pyx_v_self, __pyx_v_obj, __pyx_v_observer, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.Property.unbind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_8Property_13__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_obj, PyObject *__pyx_v_val); /*proto*/
static int __pyx_pw_4kivy_10properties_8Property_13__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_obj, PyObject *__pyx_v_val) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_12__set__(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj), ((PyObject *)__pyx_v_val));
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":320
 *                 ps.observers.remove(item)
 * 
 *     def __set__(self, EventDispatcher obj, val):             # <<<<<<<<<<<<<<
 *         self.set(obj, val)
 * 
 */

static int __pyx_pf_4kivy_10properties_8Property_12__set__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_val) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "kivy\properties.pyx":321
 * 
 *     def __set__(self, EventDispatcher obj, val):
 *         self.set(obj, val)             # <<<<<<<<<<<<<<
 * 
 *     def __get__(self, EventDispatcher obj, objtype):
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->set(__pyx_v_self, __pyx_v_obj, __pyx_v_val, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.Property.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_15__get__(PyObject *__pyx_v_self, PyObject *__pyx_v_obj, PyObject *__pyx_v_objtype); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_8Property_15__get__(PyObject *__pyx_v_self, PyObject *__pyx_v_obj, PyObject *__pyx_v_objtype) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_14__get__(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj), ((PyObject *)__pyx_v_objtype));
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":323
 *         self.set(obj, val)
 * 
 *     def __get__(self, EventDispatcher obj, objtype):             # <<<<<<<<<<<<<<
 *         if obj is None:
 *             return self
 */

static PyObject *__pyx_pf_4kivy_10properties_8Property_14__get__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_objtype) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "kivy\properties.pyx":324
 * 
 *     def __get__(self, EventDispatcher obj, objtype):
 *         if obj is None:             # <<<<<<<<<<<<<<
 *             return self
 *         return self.get(obj)
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_obj) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":325
 *     def __get__(self, EventDispatcher obj, objtype):
 *         if obj is None:
 *             return self             # <<<<<<<<<<<<<<
 *         return self.get(obj)
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject *)__pyx_v_self));
    __pyx_r = ((PyObject *)__pyx_v_self);
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":326
 *         if obj is None:
 *             return self
 *         return self.get(obj)             # <<<<<<<<<<<<<<
 * 
 *     cdef compare_value(self, a, b):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->get(__pyx_v_self, __pyx_v_obj, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.Property.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":328
 *         return self.get(obj)
 * 
 *     cdef compare_value(self, a, b):             # <<<<<<<<<<<<<<
 *         return a == b
 * 
 */

static PyObject *__pyx_f_4kivy_10properties_8Property_compare_value(CYTHON_UNUSED struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("compare_value", 0);

  /* "kivy\properties.pyx":329
 * 
 *     cdef compare_value(self, a, b):
 *         return a == b             # <<<<<<<<<<<<<<
 * 
 *     cpdef set(self, EventDispatcher obj, value):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_a, __pyx_v_b, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.Property.compare_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":331
 *         return a == b
 * 
 *     cpdef set(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         '''Set a new value for the property.
 *         '''
 */

static PyObject *__pyx_pw_4kivy_10properties_8Property_17set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_8Property_set(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_v_realvalue = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  __Pyx_INCREF(__pyx_v_value);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__set); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_8Property_17set)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      __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 = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":334
 *         '''Set a new value for the property.
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         value = self.convert(obj, value)
 *         realvalue = ps.value
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->_name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":335
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         value = self.convert(obj, value)             # <<<<<<<<<<<<<<
 *         realvalue = ps.value
 *         if self.compare_value(realvalue, value):
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->convert(__pyx_v_self, __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_v_value);
  __pyx_v_value = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":336
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         value = self.convert(obj, value)
 *         realvalue = ps.value             # <<<<<<<<<<<<<<
 *         if self.compare_value(realvalue, value):
 *             return False
 */
  __pyx_t_1 = __pyx_v_ps->value;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_realvalue = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":337
 *         value = self.convert(obj, value)
 *         realvalue = ps.value
 *         if self.compare_value(realvalue, value):             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->compare_value(__pyx_v_self, __pyx_v_realvalue, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":338
 *         realvalue = ps.value
 *         if self.compare_value(realvalue, value):
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         try:
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":340
 *             return False
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             self.check(obj, value)
 *         except ValueError as e:
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_7);
    /*try:*/ {

      /* "kivy\properties.pyx":341
 * 
 *         try:
 *             self.check(obj, value)             # <<<<<<<<<<<<<<
 *         except ValueError as e:
 *             if self.errorvalue_set == 1:
 */
      __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->check(__pyx_v_self, __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L11_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":342
 *         try:
 *             self.check(obj, value)
 *         except ValueError as e:             # <<<<<<<<<<<<<<
 *             if self.errorvalue_set == 1:
 *                 value = self.errorvalue
 */
    __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_8) {
      __Pyx_AddTraceback("kivy.properties.Property.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_e = __pyx_t_3;

      /* "kivy\properties.pyx":343
 *             self.check(obj, value)
 *         except ValueError as e:
 *             if self.errorvalue_set == 1:             # <<<<<<<<<<<<<<
 *                 value = self.errorvalue
 *                 self.check(obj, value)
 */
      __pyx_t_4 = ((__pyx_v_self->errorvalue_set == 1) != 0);
      if (__pyx_t_4) {

        /* "kivy\properties.pyx":344
 *         except ValueError as e:
 *             if self.errorvalue_set == 1:
 *                 value = self.errorvalue             # <<<<<<<<<<<<<<
 *                 self.check(obj, value)
 *             elif self.errorhandler is not None:
 */
        __pyx_t_9 = __pyx_v_self->errorvalue;
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_v_value);
        __pyx_v_value = __pyx_t_9;
        __pyx_t_9 = 0;

        /* "kivy\properties.pyx":345
 *             if self.errorvalue_set == 1:
 *                 value = self.errorvalue
 *                 self.check(obj, value)             # <<<<<<<<<<<<<<
 *             elif self.errorhandler is not None:
 *                 value = self.errorhandler(value)
 */
        __pyx_t_9 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->check(__pyx_v_self, __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L14;
      }

      /* "kivy\properties.pyx":346
 *                 value = self.errorvalue
 *                 self.check(obj, value)
 *             elif self.errorhandler is not None:             # <<<<<<<<<<<<<<
 *                 value = self.errorhandler(value)
 *                 self.check(obj, value)
 */
      __pyx_t_4 = (__pyx_v_self->errorhandler != Py_None);
      __pyx_t_10 = (__pyx_t_4 != 0);
      if (__pyx_t_10) {

        /* "kivy\properties.pyx":347
 *                 self.check(obj, value)
 *             elif self.errorhandler is not None:
 *                 value = self.errorhandler(value)             # <<<<<<<<<<<<<<
 *                 self.check(obj, value)
 *             else:
 */
        __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_v_value);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_value);
        __Pyx_GIVEREF(__pyx_v_value);
        __pyx_t_11 = PyObject_Call(__pyx_v_self->errorhandler, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_v_value);
        __pyx_v_value = __pyx_t_11;
        __pyx_t_11 = 0;

        /* "kivy\properties.pyx":348
 *             elif self.errorhandler is not None:
 *                 value = self.errorhandler(value)
 *                 self.check(obj, value)             # <<<<<<<<<<<<<<
 *             else:
 *                 raise e
 */
        __pyx_t_11 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->check(__pyx_v_self, __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L14;
      }
      /*else*/ {

        /* "kivy\properties.pyx":350
 *                 self.check(obj, value)
 *             else:
 *                 raise e             # <<<<<<<<<<<<<<
 * 
 *         ps.value = value
 */
        __Pyx_Raise(__pyx_v_e, 0, 0, 0);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
      }
      __pyx_L14:;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L5_exception_handled;
    }
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L5_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    __pyx_L11_try_end:;
  }

  /* "kivy\properties.pyx":352
 *                 raise e
 * 
 *         ps.value = value             # <<<<<<<<<<<<<<
 *         self.dispatch(obj)
 *         return True
 */
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_ps->value);
  __Pyx_DECREF(__pyx_v_ps->value);
  __pyx_v_ps->value = __pyx_v_value;

  /* "kivy\properties.pyx":353
 * 
 *         ps.value = value
 *         self.dispatch(obj)             # <<<<<<<<<<<<<<
 *         return True
 * 
 */
  __pyx_t_2 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->dispatch(__pyx_v_self, __pyx_v_obj, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "kivy\properties.pyx":354
 *         ps.value = value
 *         self.dispatch(obj)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     cpdef get(self, EventDispatcher obj):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("kivy.properties.Property.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XDECREF(__pyx_v_realvalue);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_17set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4kivy_10properties_8Property_16set[] = "Set a new value for the property.\n        ";
static PyObject *__pyx_pw_4kivy_10properties_8Property_17set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.Property.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_16set(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":331
 *         return a == b
 * 
 *     cpdef set(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         '''Set a new value for the property.
 *         '''
 */

static PyObject *__pyx_pf_4kivy_10properties_8Property_16set(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->set(__pyx_v_self, __pyx_v_obj, __pyx_v_value, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.Property.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":356
 *         return True
 * 
 *     cpdef get(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         '''Return the value of the property.
 *         '''
 */

static PyObject *__pyx_pw_4kivy_10properties_8Property_19get(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_8Property_get(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__get); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_8Property_19get)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __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 = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":359
 *         '''Return the value of the property.
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         return ps.value
 * 
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->_name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":360
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         return ps.value             # <<<<<<<<<<<<<<
 * 
 *     #
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ps->value);
  __pyx_r = __pyx_v_ps->value;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.Property.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_19get(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static char __pyx_doc_4kivy_10properties_8Property_18get[] = "Return the value of the property.\n        ";
static PyObject *__pyx_pw_4kivy_10properties_8Property_19get(PyObject *__pyx_v_self, PyObject *__pyx_v_obj) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_18get(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj));
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":356
 *         return True
 * 
 *     cpdef get(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         '''Return the value of the property.
 *         '''
 */

static PyObject *__pyx_pf_4kivy_10properties_8Property_18get(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->get(__pyx_v_self, __pyx_v_obj, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.Property.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":366
 *     #
 * 
 *     cdef check(self, EventDispatcher obj, x):             # <<<<<<<<<<<<<<
 *         '''Check if the value is correct or not, depending on the settings of
 *         the property class.
 */

static PyObject *__pyx_f_4kivy_10properties_8Property_check(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":373
 *             bool, True if the value correctly validates.
 *         '''
 *         if x is None:             # <<<<<<<<<<<<<<
 *             if not self.allownone:
 *                 raise ValueError('None is not allowed for %s.%s' % (
 */
  __pyx_t_1 = (__pyx_v_x == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":374
 *         '''
 *         if x is None:
 *             if not self.allownone:             # <<<<<<<<<<<<<<
 *                 raise ValueError('None is not allowed for %s.%s' % (
 *                     obj.__class__.__name__,
 */
    __pyx_t_2 = ((!(__pyx_v_self->allownone != 0)) != 0);
    if (__pyx_t_2) {

      /* "kivy\properties.pyx":376
 *             if not self.allownone:
 *                 raise ValueError('None is not allowed for %s.%s' % (
 *                     obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                     self.name))
 *             else:
 */
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s____name__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

      /* "kivy\properties.pyx":377
 *                 raise ValueError('None is not allowed for %s.%s' % (
 *                     obj.__class__.__name__,
 *                     self.name))             # <<<<<<<<<<<<<<
 *             else:
 *                 return True
 */
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_4 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_4), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
      __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_3));
      __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
      __pyx_t_3 = 0;
      __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L4;
    }
    /*else*/ {

      /* "kivy\properties.pyx":379
 *                     self.name))
 *             else:
 *                 return True             # <<<<<<<<<<<<<<
 * 
 *     cdef convert(self, EventDispatcher obj, x):
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.Property.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":381
 *                 return True
 * 
 *     cdef convert(self, EventDispatcher obj, x):             # <<<<<<<<<<<<<<
 *         '''Convert the initial value to a correctly validating value.
 *         Can be used for multiple types of arguments, simplifying to only one.
 */

static PyObject *__pyx_f_4kivy_10properties_8Property_convert(CYTHON_UNUSED struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, CYTHON_UNUSED struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convert", 0);

  /* "kivy\properties.pyx":385
 *         Can be used for multiple types of arguments, simplifying to only one.
 *         '''
 *         return x             # <<<<<<<<<<<<<<
 * 
 *     cpdef dispatch(self, EventDispatcher obj):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_x);
  __pyx_r = __pyx_v_x;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":387
 *         return x
 * 
 *     cpdef dispatch(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         '''Dispatch the value change to all observers.
 * 
 */

static PyObject *__pyx_pw_4kivy_10properties_8Property_21dispatch(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_8Property_dispatch(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_v_value = NULL;
  PyObject *__pyx_v_observer = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dispatch", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__dispatch); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_8Property_21dispatch)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __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 = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":403
 * 
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if len(ps.observers):
 *             value = ps.value
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->_name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":404
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if len(ps.observers):             # <<<<<<<<<<<<<<
 *             value = ps.value
 *             for observer in ps.observers:
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_ps->observers);
  __Pyx_INCREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_4 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "kivy\properties.pyx":405
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if len(ps.observers):
 *             value = ps.value             # <<<<<<<<<<<<<<
 *             for observer in ps.observers:
 *                 observer(obj, value)
 */
    __pyx_t_1 = __pyx_v_ps->value;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_value = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "kivy\properties.pyx":406
 *         if len(ps.observers):
 *             value = ps.value
 *             for observer in ps.observers:             # <<<<<<<<<<<<<<
 *                 observer(obj, value)
 * 
 */
    if (unlikely(((PyObject *)__pyx_v_ps->observers) == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_1 = ((PyObject *)__pyx_v_ps->observers); __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
    for (;;) {
      if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
      __Pyx_XDECREF(__pyx_v_observer);
      __pyx_v_observer = __pyx_t_3;
      __pyx_t_3 = 0;

      /* "kivy\properties.pyx":407
 *             value = ps.value
 *             for observer in ps.observers:
 *                 observer(obj, value)             # <<<<<<<<<<<<<<
 * 
 * 
 */
      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      __pyx_t_2 = PyObject_Call(__pyx_v_observer, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.Property.dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_observer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_21dispatch(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static char __pyx_doc_4kivy_10properties_8Property_20dispatch[] = "Dispatch the value change to all observers.\n\n        .. versionchanged:: 1.1.0\n            The method is now accessible from Python.\n\n        This can be used to force the dispatch of the property, even if the\n        value didn't change::\n\n            button = Button()\n            # get the Property class instance\n            prop = button.property('text')\n            # dispatch this property on the button instance\n            prop.dispatch(button)\n\n        ";
static PyObject *__pyx_pw_4kivy_10properties_8Property_21dispatch(PyObject *__pyx_v_self, PyObject *__pyx_v_obj) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dispatch (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_20dispatch(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj));
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":387
 *         return x
 * 
 *     cpdef dispatch(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         '''Dispatch the value change to all observers.
 * 
 */

static PyObject *__pyx_pf_4kivy_10properties_8Property_20dispatch(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dispatch", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_self->__pyx_vtab)->dispatch(__pyx_v_self, __pyx_v_obj, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.Property.dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_8Property_12defaultvalue_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_8Property_12defaultvalue_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_12defaultvalue___get__(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pxd":26
 *     cdef object errorhandler
 *     cdef int errorvalue_set
 *     cdef public object defaultvalue             # <<<<<<<<<<<<<<
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage)
 *     cpdef link(self, EventDispatcher obj, str name)
 */

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

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_8Property_12defaultvalue_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_4kivy_10properties_8Property_12defaultvalue_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_12defaultvalue_2__set__(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), ((PyObject *)__pyx_v_value));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_4kivy_10properties_8Property_12defaultvalue_2__set__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->defaultvalue);
  __Pyx_DECREF(__pyx_v_self->defaultvalue);
  __pyx_v_self->defaultvalue = __pyx_v_value;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_8Property_12defaultvalue_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_4kivy_10properties_8Property_12defaultvalue_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_4kivy_10properties_8Property_12defaultvalue_4__del__(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_4kivy_10properties_8Property_12defaultvalue_4__del__(struct __pyx_obj_4kivy_10properties_Property *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->defaultvalue);
  __Pyx_DECREF(__pyx_v_self->defaultvalue);
  __pyx_v_self->defaultvalue = Py_None;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_15NumericProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_15NumericProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_defaultvalue = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kw = PyDict_New(); if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__defaultvalue,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__defaultvalue);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_defaultvalue = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
  __Pyx_AddTraceback("kivy.properties.NumericProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_15NumericProperty___init__(((struct __pyx_obj_4kivy_10properties_NumericProperty *)__pyx_v_self), __pyx_v_defaultvalue, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":433
 * 
 *     '''
 *     def __init__(self, defaultvalue=0, **kw):             # <<<<<<<<<<<<<<
 *         super(NumericProperty, self).__init__(defaultvalue, **kw)
 * 
 */

static int __pyx_pf_4kivy_10properties_15NumericProperty___init__(struct __pyx_obj_4kivy_10properties_NumericProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":434
 *     '''
 *     def __init__(self, defaultvalue=0, **kw):
 *         super(NumericProperty, self).__init__(defaultvalue, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_NumericProperty)));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_NumericProperty)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_NumericProperty)));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s____init__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_defaultvalue);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_defaultvalue);
  __Pyx_GIVEREF(__pyx_v_defaultvalue);
  __pyx_t_3 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.NumericProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":436
 *         super(NumericProperty, self).__init__(defaultvalue, **kw)
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):             # <<<<<<<<<<<<<<
 *         storage.numeric_fmt = 'px'
 *         Property.init_storage(self, obj, storage)
 */

static PyObject *__pyx_f_4kivy_10properties_15NumericProperty_init_storage(struct __pyx_obj_4kivy_10properties_NumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_storage) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init_storage", 0);

  /* "kivy\properties.pyx":437
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         storage.numeric_fmt = 'px'             # <<<<<<<<<<<<<<
 *         Property.init_storage(self, obj, storage)
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_n_s__px));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__px));
  __Pyx_GOTREF(__pyx_v_storage->numeric_fmt);
  __Pyx_DECREF(((PyObject *)__pyx_v_storage->numeric_fmt));
  __pyx_v_storage->numeric_fmt = __pyx_n_s__px;

  /* "kivy\properties.pyx":438
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         storage.numeric_fmt = 'px'
 *         Property.init_storage(self, obj, storage)             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->init_storage(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_storage); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.NumericProperty.init_storage", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":440
 *         Property.init_storage(self, obj, storage)
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if Property.check(self, obj, value):
 *             return True
 */

static PyObject *__pyx_f_4kivy_10properties_15NumericProperty_check(struct __pyx_obj_4kivy_10properties_NumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":441
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):             # <<<<<<<<<<<<<<
 *             return True
 *         if type(value) not in (int, float, long):
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":442
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):
 *             return True             # <<<<<<<<<<<<<<
 *         if type(value) not in (int, float, long):
 *             raise ValueError('%s.%s accept only int/float/long (got %r)' % (
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":443
 *         if Property.check(self, obj, value):
 *             return True
 *         if type(value) not in (int, float, long):             # <<<<<<<<<<<<<<
 *             raise ValueError('%s.%s accept only int/float/long (got %r)' % (
 *                 obj.__class__.__name__,
 */
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_value)));
  __pyx_t_1 = ((PyObject *)Py_TYPE(__pyx_v_value));
  __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_t_1), ((PyObject *)((PyObject*)(&PyInt_Type))), Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (((int)__pyx_t_2)) {
    __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_t_1), ((PyObject *)((PyObject*)(&PyFloat_Type))), Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = ((int)__pyx_t_4);
  } else {
    __pyx_t_5 = ((int)__pyx_t_2);
  }
  if (__pyx_t_5) {
    __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_t_1), ((PyObject *)((PyObject*)(&PyLong_Type))), Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = ((int)__pyx_t_2);
  } else {
    __pyx_t_4 = __pyx_t_5;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "kivy\properties.pyx":445
 *         if type(value) not in (int, float, long):
 *             raise ValueError('%s.%s accept only int/float/long (got %r)' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name, value))
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":446
 *             raise ValueError('%s.%s accept only int/float/long (got %r)' % (
 *                 obj.__class__.__name__,
 *                 self.name, value))             # <<<<<<<<<<<<<<
 * 
 *     cdef convert(self, EventDispatcher obj, x):
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_value);
    __Pyx_GIVEREF(__pyx_v_value);
    __pyx_t_3 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_5), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.NumericProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":448
 *                 self.name, value))
 * 
 *     cdef convert(self, EventDispatcher obj, x):             # <<<<<<<<<<<<<<
 *         if x is None:
 *             return x
 */

static PyObject *__pyx_f_4kivy_10properties_15NumericProperty_convert(struct __pyx_obj_4kivy_10properties_NumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_x) {
  PyObject *__pyx_v_tp = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("convert", 0);

  /* "kivy\properties.pyx":449
 * 
 *     cdef convert(self, EventDispatcher obj, x):
 *         if x is None:             # <<<<<<<<<<<<<<
 *             return x
 *         tp = type(x)
 */
  __pyx_t_1 = (__pyx_v_x == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":450
 *     cdef convert(self, EventDispatcher obj, x):
 *         if x is None:
 *             return x             # <<<<<<<<<<<<<<
 *         tp = type(x)
 *         if tp is int or tp is float or tp is long:
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_x);
    __pyx_r = __pyx_v_x;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":451
 *         if x is None:
 *             return x
 *         tp = type(x)             # <<<<<<<<<<<<<<
 *         if tp is int or tp is float or tp is long:
 *             return x
 */
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_x)));
  __pyx_v_tp = ((PyObject*)((PyObject *)Py_TYPE(__pyx_v_x)));

  /* "kivy\properties.pyx":452
 *             return x
 *         tp = type(x)
 *         if tp is int or tp is float or tp is long:             # <<<<<<<<<<<<<<
 *             return x
 *         if tp is tuple or tp is list:
 */
  __pyx_t_2 = (__pyx_v_tp == ((PyObject*)(&PyInt_Type)));
  if (!(__pyx_t_2 != 0)) {
    __pyx_t_1 = (__pyx_v_tp == ((PyObject*)(&PyFloat_Type)));
    if (!(__pyx_t_1 != 0)) {
      __pyx_t_3 = (__pyx_v_tp == ((PyObject*)(&PyLong_Type)));
      __pyx_t_4 = (__pyx_t_3 != 0);
    } else {
      __pyx_t_4 = (__pyx_t_1 != 0);
    }
    __pyx_t_1 = __pyx_t_4;
  } else {
    __pyx_t_1 = (__pyx_t_2 != 0);
  }
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":453
 *         tp = type(x)
 *         if tp is int or tp is float or tp is long:
 *             return x             # <<<<<<<<<<<<<<
 *         if tp is tuple or tp is list:
 *             if len(x) != 2:
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_x);
    __pyx_r = __pyx_v_x;
    goto __pyx_L0;
    goto __pyx_L4;
  }
  __pyx_L4:;

  /* "kivy\properties.pyx":454
 *         if tp is int or tp is float or tp is long:
 *             return x
 *         if tp is tuple or tp is list:             # <<<<<<<<<<<<<<
 *             if len(x) != 2:
 *                 raise ValueError('%s.%s must have 2 components (got %r)' % (
 */
  __pyx_t_1 = (__pyx_v_tp == ((PyObject*)(&PyTuple_Type)));
  if (!(__pyx_t_1 != 0)) {
    __pyx_t_2 = (__pyx_v_tp == ((PyObject*)(&PyList_Type)));
    __pyx_t_4 = (__pyx_t_2 != 0);
  } else {
    __pyx_t_4 = (__pyx_t_1 != 0);
  }
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":455
 *             return x
 *         if tp is tuple or tp is list:
 *             if len(x) != 2:             # <<<<<<<<<<<<<<
 *                 raise ValueError('%s.%s must have 2 components (got %r)' % (
 *                     obj.__class__.__name__,
 */
    __pyx_t_5 = PyObject_Length(__pyx_v_x); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_4 = ((__pyx_t_5 != 2) != 0);
    if (__pyx_t_4) {

      /* "kivy\properties.pyx":457
 *             if len(x) != 2:
 *                 raise ValueError('%s.%s must have 2 components (got %r)' % (
 *                     obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                     self.name, x))
 *             return self.parse_list(obj, x[0], <str>x[1])
 */
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s____name__); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

      /* "kivy\properties.pyx":458
 *                 raise ValueError('%s.%s must have 2 components (got %r)' % (
 *                     obj.__class__.__name__,
 *                     self.name, x))             # <<<<<<<<<<<<<<
 *             return self.parse_list(obj, x[0], <str>x[1])
 *         elif tp is str:
 */
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_x);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_x);
      __Pyx_GIVEREF(__pyx_v_x);
      __pyx_t_7 = 0;
      __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_6), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_6));
      __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_6));
      __Pyx_GIVEREF(((PyObject *)__pyx_t_6));
      __pyx_t_6 = 0;
      __pyx_t_6 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L6;
    }
    __pyx_L6:;

    /* "kivy\properties.pyx":459
 *                     obj.__class__.__name__,
 *                     self.name, x))
 *             return self.parse_list(obj, x[0], <str>x[1])             # <<<<<<<<<<<<<<
 *         elif tp is str:
 *             return self.parse_str(obj, x)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_x, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_x, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = PyFloat_FromDouble(((struct __pyx_vtabstruct_4kivy_10properties_NumericProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->parse_list(__pyx_v_self, __pyx_v_obj, __pyx_t_6, ((PyObject*)__pyx_t_8))); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
    goto __pyx_L5;
  }

  /* "kivy\properties.pyx":460
 *                     self.name, x))
 *             return self.parse_list(obj, x[0], <str>x[1])
 *         elif tp is str:             # <<<<<<<<<<<<<<
 *             return self.parse_str(obj, x)
 *         else:
 */
  __pyx_t_4 = (__pyx_v_tp == ((PyObject*)(&PyString_Type)));
  __pyx_t_1 = (__pyx_t_4 != 0);
  if (__pyx_t_1) {

    /* "kivy\properties.pyx":461
 *             return self.parse_list(obj, x[0], <str>x[1])
 *         elif tp is str:
 *             return self.parse_str(obj, x)             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError('%s.%s have an invalid format (got %r)' % (
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = PyFloat_FromDouble(((struct __pyx_vtabstruct_4kivy_10properties_NumericProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->parse_str(__pyx_v_self, __pyx_v_obj, __pyx_v_x)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
    goto __pyx_L5;
  }
  /*else*/ {

    /* "kivy\properties.pyx":464
 *         else:
 *             raise ValueError('%s.%s have an invalid format (got %r)' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name, x))
 * 
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s____name__); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

    /* "kivy\properties.pyx":465
 *             raise ValueError('%s.%s have an invalid format (got %r)' % (
 *                 obj.__class__.__name__,
 *                 self.name, x))             # <<<<<<<<<<<<<<
 * 
 *     cdef float parse_str(self, EventDispatcher obj, value):
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    __pyx_t_8 = 0;
    __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_7));
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
    __pyx_t_7 = 0;
    __pyx_t_7 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_7, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L5:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("kivy.properties.NumericProperty.convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":467
 *                 self.name, x))
 * 
 *     cdef float parse_str(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         return self.parse_list(obj, value[:-2], <str>value[-2:])
 * 
 */

static float __pyx_f_4kivy_10properties_15NumericProperty_parse_str(struct __pyx_obj_4kivy_10properties_NumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_str", 0);

  /* "kivy\properties.pyx":468
 * 
 *     cdef float parse_str(self, EventDispatcher obj, value):
 *         return self.parse_list(obj, value[:-2], <str>value[-2:])             # <<<<<<<<<<<<<<
 * 
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext):
 */
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_value, 0, -2, NULL, NULL, &__pyx_k_slice_8, 0, 1, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_value, -2, 0, NULL, NULL, &__pyx_k_slice_9, 1, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected str, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = ((struct __pyx_vtabstruct_4kivy_10properties_NumericProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->parse_list(__pyx_v_self, __pyx_v_obj, __pyx_t_1, ((PyObject*)__pyx_t_2));
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("kivy.properties.NumericProperty.parse_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":470
 *         return self.parse_list(obj, value[:-2], <str>value[-2:])
 * 
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.numeric_fmt = ext
 */

static float __pyx_f_4kivy_10properties_15NumericProperty_parse_list(struct __pyx_obj_4kivy_10properties_NumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value, PyObject *__pyx_v_ext) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_list", 0);

  /* "kivy\properties.pyx":471
 * 
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext):
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         ps.numeric_fmt = ext
 *         return dpi2px(value, ext)
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":472
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext):
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.numeric_fmt = ext             # <<<<<<<<<<<<<<
 *         return dpi2px(value, ext)
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_ext));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_ext));
  __Pyx_GOTREF(__pyx_v_ps->numeric_fmt);
  __Pyx_DECREF(((PyObject *)__pyx_v_ps->numeric_fmt));
  __pyx_v_ps->numeric_fmt = __pyx_v_ext;

  /* "kivy\properties.pyx":473
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.numeric_fmt = ext
 *         return dpi2px(value, ext)             # <<<<<<<<<<<<<<
 * 
 *     def get_format(self, EventDispatcher obj):
 */
  __pyx_r = __pyx_f_4kivy_10properties_dpi2px(__pyx_v_value, ((PyObject *)__pyx_v_ext), 0);
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_WriteUnraisable("kivy.properties.NumericProperty.parse_list", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_15NumericProperty_3get_format(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static char __pyx_doc_4kivy_10properties_15NumericProperty_2get_format[] = "\n        Return the format used for Numeric calculation. Default is px (mean\n        the value have not been changed at all). Otherwise, it can be one of\n        'in', 'pt', 'cm', 'mm'.\n        ";
static PyObject *__pyx_pw_4kivy_10properties_15NumericProperty_3get_format(PyObject *__pyx_v_self, PyObject *__pyx_v_obj) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_format (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_15NumericProperty_2get_format(((struct __pyx_obj_4kivy_10properties_NumericProperty *)__pyx_v_self), ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj));
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":475
 *         return dpi2px(value, ext)
 * 
 *     def get_format(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         '''
 *         Return the format used for Numeric calculation. Default is px (mean
 */

static PyObject *__pyx_pf_4kivy_10properties_15NumericProperty_2get_format(struct __pyx_obj_4kivy_10properties_NumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_format", 0);

  /* "kivy\properties.pyx":481
 *         'in', 'pt', 'cm', 'mm'.
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         return ps.numeric_fmt
 * 
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":482
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         return ps.numeric_fmt             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_ps->numeric_fmt));
  __pyx_r = ((PyObject *)__pyx_v_ps->numeric_fmt);
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.NumericProperty.get_format", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_14StringProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_14StringProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_defaultvalue = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kw = PyDict_New(); if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__defaultvalue,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)__pyx_kp_s_2);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__defaultvalue);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_defaultvalue = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
  __Pyx_AddTraceback("kivy.properties.StringProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14StringProperty___init__(((struct __pyx_obj_4kivy_10properties_StringProperty *)__pyx_v_self), __pyx_v_defaultvalue, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":491
 *     '''
 * 
 *     def __init__(self, defaultvalue='', **kw):             # <<<<<<<<<<<<<<
 *         super(StringProperty, self).__init__(defaultvalue, **kw)
 * 
 */

static int __pyx_pf_4kivy_10properties_14StringProperty___init__(struct __pyx_obj_4kivy_10properties_StringProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":492
 * 
 *     def __init__(self, defaultvalue='', **kw):
 *         super(StringProperty, self).__init__(defaultvalue, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_StringProperty)));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_StringProperty)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_StringProperty)));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s____init__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_defaultvalue);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_defaultvalue);
  __Pyx_GIVEREF(__pyx_v_defaultvalue);
  __pyx_t_3 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.StringProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":494
 *         super(StringProperty, self).__init__(defaultvalue, **kw)
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if Property.check(self, obj, value):
 *             return True
 */

static PyObject *__pyx_f_4kivy_10properties_14StringProperty_check(struct __pyx_obj_4kivy_10properties_StringProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":495
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):             # <<<<<<<<<<<<<<
 *             return True
 *         if not isinstance(value, basestring):
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":496
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):
 *             return True             # <<<<<<<<<<<<<<
 *         if not isinstance(value, basestring):
 *             raise ValueError('%s.%s accept only str/unicode' % (
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":497
 *         if Property.check(self, obj, value):
 *             return True
 *         if not isinstance(value, basestring):             # <<<<<<<<<<<<<<
 *             raise ValueError('%s.%s accept only str/unicode' % (
 *                 obj.__class__.__name__,
 */
  __pyx_t_2 = __Pyx_PyBaseString_Check(__pyx_v_value); 
  __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":499
 *         if not isinstance(value, basestring):
 *             raise ValueError('%s.%s accept only str/unicode' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name))
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":500
 *             raise ValueError('%s.%s accept only str/unicode' % (
 *                 obj.__class__.__name__,
 *                 self.name))             # <<<<<<<<<<<<<<
 * 
 * cdef inline void observable_list_dispatch(object self):
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_10), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.StringProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":502
 *                 self.name))
 * 
 * cdef inline void observable_list_dispatch(object self):             # <<<<<<<<<<<<<<
 *     cdef Property prop = self.prop
 *     obj = self.obj()
 */

static CYTHON_INLINE void __pyx_f_4kivy_10properties_observable_list_dispatch(PyObject *__pyx_v_self) {
  struct __pyx_obj_4kivy_10properties_Property *__pyx_v_prop = 0;
  PyObject *__pyx_v_obj = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("observable_list_dispatch", 0);

  /* "kivy\properties.pyx":503
 * 
 * cdef inline void observable_list_dispatch(object self):
 *     cdef Property prop = self.prop             # <<<<<<<<<<<<<<
 *     obj = self.obj()
 *     if obj is not None:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__prop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_Property))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_prop = ((struct __pyx_obj_4kivy_10properties_Property *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":504
 * cdef inline void observable_list_dispatch(object self):
 *     cdef Property prop = self.prop
 *     obj = self.obj()             # <<<<<<<<<<<<<<
 *     if obj is not None:
 *         prop.dispatch(obj)
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__obj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __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 = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_obj = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "kivy\properties.pyx":505
 *     cdef Property prop = self.prop
 *     obj = self.obj()
 *     if obj is not None:             # <<<<<<<<<<<<<<
 *         prop.dispatch(obj)
 * 
 */
  __pyx_t_3 = (__pyx_v_obj != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":506
 *     obj = self.obj()
 *     if obj is not None:
 *         prop.dispatch(obj)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    if (!(likely(((__pyx_v_obj) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_4kivy_6_event_EventDispatcher))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_2 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_prop->__pyx_vtab)->dispatch(__pyx_v_prop, ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj), 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("kivy.properties.observable_list_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prop);
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList___init__(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":511
 * class ObservableList(list):
 *     # Internal class to observe changes inside a native python list.
 *     def __init__(self, *largs):             # <<<<<<<<<<<<<<
 *         self.prop = largs[0]
 *         self.obj = ref(largs[1])
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":512
 *     # Internal class to observe changes inside a native python list.
 *     def __init__(self, *largs):
 *         self.prop = largs[0]             # <<<<<<<<<<<<<<
 *         self.obj = ref(largs[1])
 *         super(ObservableList, self).__init__(*largs[2:])
 */
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_largs), 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__prop, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":513
 *     def __init__(self, *largs):
 *         self.prop = largs[0]
 *         self.obj = ref(largs[1])             # <<<<<<<<<<<<<<
 *         super(ObservableList, self).__init__(*largs[2:])
 * 
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ref); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_largs), 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__obj, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "kivy\properties.pyx":514
 *         self.prop = largs[0]
 *         self.obj = ref(largs[1])
 *         super(ObservableList, self).__init__(*largs[2:])             # <<<<<<<<<<<<<<
 * 
 *     def __setitem__(self, key, value):
 */
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableList); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s____init__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyTuple_GetSlice(((PyObject *)__pyx_v_largs), 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_1 = PySequence_Tuple(((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.ObservableList.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_3__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_3__setitem__ = {__Pyx_NAMESTR("__setitem__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_3__setitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_3__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,&__pyx_n_s__value,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__setitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_value = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ObservableList.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_2__setitem__(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_value);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":516
 *         super(ObservableList, self).__init__(*largs[2:])
 * 
 *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
 *         list.__setitem__(self, key, value)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_2__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setitem__", 0);

  /* "kivy\properties.pyx":517
 * 
 *     def __setitem__(self, key, value):
 *         list.__setitem__(self, key, value)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s____setitem__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __Pyx_INCREF(__pyx_v_key);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_key);
  __Pyx_GIVEREF(__pyx_v_key);
  __Pyx_INCREF(__pyx_v_value);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __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 = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":518
 *     def __setitem__(self, key, value):
 *         list.__setitem__(self, key, value)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def __delitem__(self, key):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.ObservableList.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_5__delitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_5__delitem__ = {__Pyx_NAMESTR("__delitem__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_5__delitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_5__delitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__delitem__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__delitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__delitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__delitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ObservableList.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_4__delitem__(__pyx_self, __pyx_v_self, __pyx_v_key);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":520
 *         observable_list_dispatch(self)
 * 
 *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
 *         list.__delitem__(self, key)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_4__delitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__delitem__", 0);

  /* "kivy\properties.pyx":521
 * 
 *     def __delitem__(self, key):
 *         list.__delitem__(self, key)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s____delitem__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __Pyx_INCREF(__pyx_v_key);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_key);
  __Pyx_GIVEREF(__pyx_v_key);
  __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 = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":522
 *     def __delitem__(self, key):
 *         list.__delitem__(self, key)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def __setslice__(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.ObservableList.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_7__setslice__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_7__setslice__ = {__Pyx_NAMESTR("__setslice__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_7__setslice__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_7__setslice__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setslice__ (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__setslice__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setslice__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.__setslice__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_6__setslice__(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":524
 *         observable_list_dispatch(self)
 * 
 *     def __setslice__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__setslice__(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_6__setslice__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setslice__", 0);

  /* "kivy\properties.pyx":525
 * 
 *     def __setslice__(self, *largs):
 *         list.__setslice__(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s____setslice__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":526
 *     def __setslice__(self, *largs):
 *         list.__setslice__(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def __delslice__(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.__setslice__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_9__delslice__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_9__delslice__ = {__Pyx_NAMESTR("__delslice__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_9__delslice__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_9__delslice__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__delslice__ (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__delslice__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__delslice__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.__delslice__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_8__delslice__(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":528
 *         observable_list_dispatch(self)
 * 
 *     def __delslice__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__delslice__(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_8__delslice__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__delslice__", 0);

  /* "kivy\properties.pyx":529
 * 
 *     def __delslice__(self, *largs):
 *         list.__delslice__(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s____delslice__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":530
 *     def __delslice__(self, *largs):
 *         list.__delslice__(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def __iadd__(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.__delslice__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_11__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_11__iadd__ = {__Pyx_NAMESTR("__iadd__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_11__iadd__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_11__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iadd__ (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__iadd__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__iadd__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_10__iadd__(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":532
 *         observable_list_dispatch(self)
 * 
 *     def __iadd__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__iadd__(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_10__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iadd__", 0);

  /* "kivy\properties.pyx":533
 * 
 *     def __iadd__(self, *largs):
 *         list.__iadd__(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s____iadd__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":534
 *     def __iadd__(self, *largs):
 *         list.__iadd__(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def __imul__(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_13__imul__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_13__imul__ = {__Pyx_NAMESTR("__imul__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_13__imul__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_13__imul__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__imul__ (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__imul__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__imul__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.__imul__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_12__imul__(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":536
 *         observable_list_dispatch(self)
 * 
 *     def __imul__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__imul__(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_12__imul__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__imul__", 0);

  /* "kivy\properties.pyx":537
 * 
 *     def __imul__(self, *largs):
 *         list.__imul__(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s____imul__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":538
 *     def __imul__(self, *largs):
 *         list.__imul__(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def append(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.__imul__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_15append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_15append = {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_15append, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_15append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("append (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "append") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("append", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_14append(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":540
 *         observable_list_dispatch(self)
 * 
 *     def append(self, *largs):             # <<<<<<<<<<<<<<
 *         list.append(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_14append(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("append", 0);

  /* "kivy\properties.pyx":541
 * 
 *     def append(self, *largs):
 *         list.append(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s__append); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":542
 *     def append(self, *largs):
 *         list.append(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def remove(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_17remove(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_17remove = {__Pyx_NAMESTR("remove"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_17remove, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_17remove(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "remove") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.remove", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_16remove(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":544
 *         observable_list_dispatch(self)
 * 
 *     def remove(self, *largs):             # <<<<<<<<<<<<<<
 *         list.remove(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_16remove(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove", 0);

  /* "kivy\properties.pyx":545
 * 
 *     def remove(self, *largs):
 *         list.remove(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s__remove); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":546
 *     def remove(self, *largs):
 *         list.remove(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def insert(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.remove", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_19insert(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_19insert = {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_19insert, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_19insert(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("insert (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "insert") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("insert", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_18insert(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":548
 *         observable_list_dispatch(self)
 * 
 *     def insert(self, *largs):             # <<<<<<<<<<<<<<
 *         list.insert(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_18insert(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("insert", 0);

  /* "kivy\properties.pyx":549
 * 
 *     def insert(self, *largs):
 *         list.insert(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s__insert); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":550
 *     def insert(self, *largs):
 *         list.insert(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def pop(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_21pop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_21pop = {__Pyx_NAMESTR("pop"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_21pop, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_21pop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pop (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "pop") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("pop", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_20pop(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":552
 *         observable_list_dispatch(self)
 * 
 *     def pop(self, *largs):             # <<<<<<<<<<<<<<
 *         cdef object result = list.pop(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_20pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("pop", 0);

  /* "kivy\properties.pyx":553
 * 
 *     def pop(self, *largs):
 *         cdef object result = list.pop(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 *         return result
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s__pop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __pyx_v_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "kivy\properties.pyx":554
 *     def pop(self, *largs):
 *         cdef object result = list.pop(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  /* "kivy\properties.pyx":555
 *         cdef object result = list.pop(self, *largs)
 *         observable_list_dispatch(self)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def extend(self, *largs):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_23extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_23extend = {__Pyx_NAMESTR("extend"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_23extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_23extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("extend (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("extend", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_22extend(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":557
 *         return result
 * 
 *     def extend(self, *largs):             # <<<<<<<<<<<<<<
 *         list.extend(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_22extend(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("extend", 0);

  /* "kivy\properties.pyx":558
 * 
 *     def extend(self, *largs):
 *         list.extend(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s__extend); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":559
 *     def extend(self, *largs):
 *         list.extend(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def sort(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_25sort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_25sort = {__Pyx_NAMESTR("sort"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_25sort, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_25sort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sort (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "sort") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sort", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.sort", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_24sort(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":561
 *         observable_list_dispatch(self)
 * 
 *     def sort(self, *largs):             # <<<<<<<<<<<<<<
 *         list.sort(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_24sort(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("sort", 0);

  /* "kivy\properties.pyx":562
 * 
 *     def sort(self, *largs):
 *         list.sort(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s__sort); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":563
 *     def sort(self, *largs):
 *         list.sort(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def reverse(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.sort", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_27reverse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableList_27reverse = {__Pyx_NAMESTR("reverse"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableList_27reverse, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableList_27reverse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reverse (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "reverse") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reverse", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableList.reverse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableList_26reverse(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":565
 *         observable_list_dispatch(self)
 * 
 *     def reverse(self, *largs):             # <<<<<<<<<<<<<<
 *         list.reverse(self, *largs)
 *         observable_list_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableList_26reverse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("reverse", 0);

  /* "kivy\properties.pyx":566
 * 
 *     def reverse(self, *largs):
 *         list.reverse(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_list_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s__reverse); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":567
 *     def reverse(self, *largs):
 *         list.reverse(self, *largs)
 *         observable_list_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_f_4kivy_10properties_observable_list_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableList.reverse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_12ListProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_12ListProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_defaultvalue = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kw = PyDict_New(); if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__defaultvalue,0};
    PyObject* values[1] = {0};

    /* "kivy\properties.pyx":575
 *     Only lists are allowed. Tuple or any other classes are forbidden.
 *     '''
 *     def __init__(self, defaultvalue=None, **kw):             # <<<<<<<<<<<<<<
 *         defaultvalue = defaultvalue or []
 * 
 */
    values[0] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__defaultvalue);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_defaultvalue = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
  __Pyx_AddTraceback("kivy.properties.ListProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_12ListProperty___init__(((struct __pyx_obj_4kivy_10properties_ListProperty *)__pyx_v_self), __pyx_v_defaultvalue, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_4kivy_10properties_12ListProperty___init__(struct __pyx_obj_4kivy_10properties_ListProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF(__pyx_v_defaultvalue);

  /* "kivy\properties.pyx":576
 *     '''
 *     def __init__(self, defaultvalue=None, **kw):
 *         defaultvalue = defaultvalue or []             # <<<<<<<<<<<<<<
 * 
 *         super(ListProperty, self).__init__(defaultvalue, **kw)
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_defaultvalue); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (!__pyx_t_1) {
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_v_defaultvalue);
    __pyx_t_3 = __pyx_v_defaultvalue;
  }
  __Pyx_DECREF(__pyx_v_defaultvalue);
  __pyx_v_defaultvalue = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "kivy\properties.pyx":578
 *         defaultvalue = defaultvalue or []
 * 
 *         super(ListProperty, self).__init__(defaultvalue, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cpdef link(self, EventDispatcher obj, str name):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_ListProperty)));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_ListProperty)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_ListProperty)));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s____init__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_defaultvalue);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_defaultvalue);
  __Pyx_GIVEREF(__pyx_v_defaultvalue);
  __pyx_t_4 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.ListProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_defaultvalue);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":580
 *         super(ListProperty, self).__init__(defaultvalue, **kw)
 * 
 *     cpdef link(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         Property.link(self, obj, name)
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 */

static PyObject *__pyx_pw_4kivy_10properties_12ListProperty_3link(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_12ListProperty_link(struct __pyx_obj_4kivy_10properties_ListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__link); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_12ListProperty_3link)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(((PyObject *)__pyx_v_name));
      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_name));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_name));
      __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 = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":581
 * 
 *     cpdef link(self, EventDispatcher obj, str name):
 *         Property.link(self, obj, name)             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.value = ObservableList(self, obj, ps.value)
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->link(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_name, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":582
 *     cpdef link(self, EventDispatcher obj, str name):
 *         Property.link(self, obj, name)
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         ps.value = ObservableList(self, obj, ps.value)
 * 
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":583
 *         Property.link(self, obj, name)
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.value = ObservableList(self, obj, ps.value)             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableList); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_obj));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
  __Pyx_INCREF(__pyx_v_ps->value);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_ps->value);
  __Pyx_GIVEREF(__pyx_v_ps->value);
  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_ps->value);
  __Pyx_DECREF(__pyx_v_ps->value);
  __pyx_v_ps->value = __pyx_t_2;
  __pyx_t_2 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.ListProperty.link", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_12ListProperty_3link(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_12ListProperty_3link(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_name = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("link (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__name,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("link", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "link") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_name = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("link", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ListProperty.link", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_12ListProperty_2link(((struct __pyx_obj_4kivy_10properties_ListProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_name);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":580
 *         super(ListProperty, self).__init__(defaultvalue, **kw)
 * 
 *     cpdef link(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         Property.link(self, obj, name)
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 */

static PyObject *__pyx_pf_4kivy_10properties_12ListProperty_2link(struct __pyx_obj_4kivy_10properties_ListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_ListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.link(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_name, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.ListProperty.link", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":585
 *         ps.value = ObservableList(self, obj, ps.value)
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if Property.check(self, obj, value):
 *             return True
 */

static PyObject *__pyx_f_4kivy_10properties_12ListProperty_check(struct __pyx_obj_4kivy_10properties_ListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":586
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):             # <<<<<<<<<<<<<<
 *             return True
 *         if type(value) is not ObservableList:
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":587
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):
 *             return True             # <<<<<<<<<<<<<<
 *         if type(value) is not ObservableList:
 *             raise ValueError('%s.%s accept only ObservableList' % (
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":588
 *         if Property.check(self, obj, value):
 *             return True
 *         if type(value) is not ObservableList:             # <<<<<<<<<<<<<<
 *             raise ValueError('%s.%s accept only ObservableList' % (
 *                 obj.__class__.__name__,
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableList); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_value)) != __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":590
 *         if type(value) is not ObservableList:
 *             raise ValueError('%s.%s accept only ObservableList' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name))
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":591
 *             raise ValueError('%s.%s accept only ObservableList' % (
 *                 obj.__class__.__name__,
 *                 self.name))             # <<<<<<<<<<<<<<
 * 
 *     cpdef set(self, EventDispatcher obj, value):
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_11), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.ListProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":593
 *                 self.name))
 * 
 *     cpdef set(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         value = ObservableList(self, obj, value)
 *         Property.set(self, obj, value)
 */

static PyObject *__pyx_pw_4kivy_10properties_12ListProperty_5set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_12ListProperty_set(struct __pyx_obj_4kivy_10properties_ListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  __Pyx_INCREF(__pyx_v_value);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__set); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_12ListProperty_5set)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      __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 = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":594
 * 
 *     cpdef set(self, EventDispatcher obj, value):
 *         value = ObservableList(self, obj, value)             # <<<<<<<<<<<<<<
 *         Property.set(self, obj, value)
 * 
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableList); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_obj));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
  __Pyx_INCREF(__pyx_v_value);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_v_value);
  __pyx_v_value = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "kivy\properties.pyx":595
 *     cpdef set(self, EventDispatcher obj, value):
 *         value = ObservableList(self, obj, value)
 *         Property.set(self, obj, value)             # <<<<<<<<<<<<<<
 * 
 * cdef inline void observable_dict_dispatch(object self):
 */
  __pyx_t_2 = __pyx_vtabptr_4kivy_10properties_Property->set(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.ListProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_12ListProperty_5set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_12ListProperty_5set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ListProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_12ListProperty_4set(((struct __pyx_obj_4kivy_10properties_ListProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_value);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":593
 *                 self.name))
 * 
 *     cpdef set(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         value = ObservableList(self, obj, value)
 *         Property.set(self, obj, value)
 */

static PyObject *__pyx_pf_4kivy_10properties_12ListProperty_4set(struct __pyx_obj_4kivy_10properties_ListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_ListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.ListProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":597
 *         Property.set(self, obj, value)
 * 
 * cdef inline void observable_dict_dispatch(object self):             # <<<<<<<<<<<<<<
 *     cdef Property prop = self.prop
 *     prop.dispatch(self.obj)
 */

static CYTHON_INLINE void __pyx_f_4kivy_10properties_observable_dict_dispatch(PyObject *__pyx_v_self) {
  struct __pyx_obj_4kivy_10properties_Property *__pyx_v_prop = 0;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("observable_dict_dispatch", 0);

  /* "kivy\properties.pyx":598
 * 
 * cdef inline void observable_dict_dispatch(object self):
 *     cdef Property prop = self.prop             # <<<<<<<<<<<<<<
 *     prop.dispatch(self.obj)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__prop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_Property))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_prop = ((struct __pyx_obj_4kivy_10properties_Property *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":599
 * cdef inline void observable_dict_dispatch(object self):
 *     cdef Property prop = self.prop
 *     prop.dispatch(self.obj)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__obj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_6_event_EventDispatcher))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_prop->__pyx_vtab)->dispatch(__pyx_v_prop, ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_t_1), 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("kivy.properties.observable_dict_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prop);
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict___init__(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":604
 * class ObservableDict(dict):
 *     # Internal class to observe changes inside a native python dict.
 *     def __init__(self, *largs):             # <<<<<<<<<<<<<<
 *         self.prop = largs[0]
 *         self.obj = largs[1]
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":605
 *     # Internal class to observe changes inside a native python dict.
 *     def __init__(self, *largs):
 *         self.prop = largs[0]             # <<<<<<<<<<<<<<
 *         self.obj = largs[1]
 *         super(ObservableDict, self).__init__(*largs[2:])
 */
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_largs), 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__prop, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":606
 *     def __init__(self, *largs):
 *         self.prop = largs[0]
 *         self.obj = largs[1]             # <<<<<<<<<<<<<<
 *         super(ObservableDict, self).__init__(*largs[2:])
 * 
 */
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_largs), 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__obj, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":607
 *         self.prop = largs[0]
 *         self.obj = largs[1]
 *         super(ObservableDict, self).__init__(*largs[2:])             # <<<<<<<<<<<<<<
 * 
 *     def _weak_return(self, item):
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____init__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GetSlice(((PyObject *)__pyx_v_largs), 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_3_weak_return(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_3_weak_return = {__Pyx_NAMESTR("_weak_return"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_3_weak_return, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_3_weak_return(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_item = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_weak_return (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__item,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__item)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_weak_return", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_weak_return") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_item = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_weak_return", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ObservableDict._weak_return", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_2_weak_return(__pyx_self, __pyx_v_self, __pyx_v_item);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":609
 *         super(ObservableDict, self).__init__(*largs[2:])
 * 
 *     def _weak_return(self, item):             # <<<<<<<<<<<<<<
 *         if isinstance(item, ref):
 *             return item()
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_2_weak_return(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_weak_return", 0);

  /* "kivy\properties.pyx":610
 * 
 *     def _weak_return(self, item):
 *         if isinstance(item, ref):             # <<<<<<<<<<<<<<
 *             return item()
 *         return item
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ref); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_item, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":611
 *     def _weak_return(self, item):
 *         if isinstance(item, ref):
 *             return item()             # <<<<<<<<<<<<<<
 *         return item
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyObject_Call(__pyx_v_item, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":612
 *         if isinstance(item, ref):
 *             return item()
 *         return item             # <<<<<<<<<<<<<<
 * 
 *     def __getattr__(self, attr):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_item);
  __pyx_r = __pyx_v_item;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.ObservableDict._weak_return", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_5__getattr__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_5__getattr__ = {__Pyx_NAMESTR("__getattr__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_5__getattr__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_5__getattr__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_attr = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__attr,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__attr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__getattr__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getattr__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_attr = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__getattr__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_4__getattr__(__pyx_self, __pyx_v_self, __pyx_v_attr);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":614
 *         return item
 * 
 *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
 *         try:
 *             return self._weak_return(self.__getitem__(attr))
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_4__getattr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attr) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getattr__", 0);

  /* "kivy\properties.pyx":615
 * 
 *     def __getattr__(self, attr):
 *         try:             # <<<<<<<<<<<<<<
 *             return self._weak_return(self.__getitem__(attr))
 *         except KeyError:
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "kivy\properties.pyx":616
 *     def __getattr__(self, attr):
 *         try:
 *             return self._weak_return(self.__getitem__(attr))             # <<<<<<<<<<<<<<
 *         except KeyError:
 *             try:
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___weak_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s____getitem__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_attr);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_attr);
      __Pyx_GIVEREF(__pyx_v_attr);
      __pyx_t_7 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      __Pyx_GOTREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_7 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
      __pyx_r = __pyx_t_7;
      __pyx_t_7 = 0;
      goto __pyx_L7_try_return;
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L10_try_end;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;

    /* "kivy\properties.pyx":617
 *         try:
 *             return self._weak_return(self.__getitem__(attr))
 *         except KeyError:             # <<<<<<<<<<<<<<
 *             try:
 *                 return self._weak_return(
 */
    __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_8) {
      __Pyx_AddTraceback("kivy.properties.ObservableDict.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_4);

      /* "kivy\properties.pyx":618
 *             return self._weak_return(self.__getitem__(attr))
 *         except KeyError:
 *             try:             # <<<<<<<<<<<<<<
 *                 return self._weak_return(
 *                                 super(ObservableDict, self).__getattr__(attr))
 */
      {
        __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        /*try:*/ {

          /* "kivy\properties.pyx":619
 *         except KeyError:
 *             try:
 *                 return self._weak_return(             # <<<<<<<<<<<<<<
 *                                 super(ObservableDict, self).__getattr__(attr))
 *             except AttributeError:
 */
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___weak_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
          __Pyx_GOTREF(__pyx_t_5);

          /* "kivy\properties.pyx":620
 *             try:
 *                 return self._weak_return(
 *                                 super(ObservableDict, self).__getattr__(attr))             # <<<<<<<<<<<<<<
 *             except AttributeError:
 *                 raise KeyError(attr)
 */
          __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableDict); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
          __Pyx_GOTREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_12);
          __Pyx_INCREF(__pyx_v_self);
          PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_self);
          __Pyx_GIVEREF(__pyx_v_self);
          __pyx_t_12 = 0;
          __pyx_t_12 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_13), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s____getattr__); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_INCREF(__pyx_v_attr);
          PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_attr);
          __Pyx_GIVEREF(__pyx_v_attr);
          __pyx_t_14 = PyObject_Call(__pyx_t_13, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
          __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
          __Pyx_GOTREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_14);
          __Pyx_GIVEREF(__pyx_t_14);
          __pyx_t_14 = 0;
          __pyx_t_14 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
          __pyx_r = __pyx_t_14;
          __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L17_try_return;
        }
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L20_try_end;
        __pyx_L17_try_return:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        goto __pyx_L6_except_return;
        __pyx_L13_error:;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;

        /* "kivy\properties.pyx":621
 *                 return self._weak_return(
 *                                 super(ObservableDict, self).__getattr__(attr))
 *             except AttributeError:             # <<<<<<<<<<<<<<
 *                 raise KeyError(attr)
 * 
 */
        __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
        if (__pyx_t_8) {
          __Pyx_AddTraceback("kivy.properties.ObservableDict.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_12, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GOTREF(__pyx_t_5);

          /* "kivy\properties.pyx":622
 *                                 super(ObservableDict, self).__getattr__(attr))
 *             except AttributeError:
 *                 raise KeyError(attr)             # <<<<<<<<<<<<<<
 * 
 *     def __setattr__(self, attr, value):
 */
          __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_INCREF(__pyx_v_attr);
          PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_attr);
          __Pyx_GIVEREF(__pyx_v_attr);
          __pyx_t_15 = PyObject_Call(__pyx_builtin_KeyError, ((PyObject *)__pyx_t_13), NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
          __Pyx_Raise(__pyx_t_15, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L14_exception_handled;
        }
        __pyx_L15_except_error:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        goto __pyx_L5_except_error;
        __pyx_L14_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __pyx_L20_try_end:;
      }
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L10_try_end:;
  }

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_7__setattr__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_7__setattr__ = {__Pyx_NAMESTR("__setattr__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_7__setattr__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_7__setattr__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_attr = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setattr__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__attr,&__pyx_n_s__value,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__attr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__setattr__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__setattr__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__setattr__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_attr = values[1];
    __pyx_v_value = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setattr__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__setattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_6__setattr__(__pyx_self, __pyx_v_self, __pyx_v_attr, __pyx_v_value);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":624
 *                 raise KeyError(attr)
 * 
 *     def __setattr__(self, attr, value):             # <<<<<<<<<<<<<<
 *         if attr in ('prop', 'obj'):
 *             super(ObservableDict, self).__setattr__(attr, value)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_6__setattr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attr, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setattr__", 0);

  /* "kivy\properties.pyx":625
 * 
 *     def __setattr__(self, attr, value):
 *         if attr in ('prop', 'obj'):             # <<<<<<<<<<<<<<
 *             super(ObservableDict, self).__setattr__(attr, value)
 *             return
 */
  __Pyx_INCREF(__pyx_v_attr);
  __pyx_t_1 = __pyx_v_attr;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)__pyx_n_s__prop), Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!((int)__pyx_t_3)) {
    __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)__pyx_n_s__obj), Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = ((int)__pyx_t_4);
  } else {
    __pyx_t_5 = ((int)__pyx_t_3);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_5 != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":626
 *     def __setattr__(self, attr, value):
 *         if attr in ('prop', 'obj'):
 *             super(ObservableDict, self).__setattr__(attr, value)             # <<<<<<<<<<<<<<
 *             return
 *         self.__setitem__(attr, value)
 */
    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self);
    __Pyx_GIVEREF(__pyx_v_self);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____setattr__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_attr);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_attr);
    __Pyx_GIVEREF(__pyx_v_attr);
    __Pyx_INCREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_value);
    __Pyx_GIVEREF(__pyx_v_value);
    __pyx_t_6 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "kivy\properties.pyx":627
 *         if attr in ('prop', 'obj'):
 *             super(ObservableDict, self).__setattr__(attr, value)
 *             return             # <<<<<<<<<<<<<<
 *         self.__setitem__(attr, value)
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":628
 *             super(ObservableDict, self).__setattr__(attr, value)
 *             return
 *         self.__setitem__(attr, value)             # <<<<<<<<<<<<<<
 * 
 *     def __setitem__(self, key, value):
 */
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s____setitem__); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_attr);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_attr);
  __Pyx_GIVEREF(__pyx_v_attr);
  __Pyx_INCREF(__pyx_v_value);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __pyx_t_2 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__setattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_9__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_9__setitem__ = {__Pyx_NAMESTR("__setitem__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_9__setitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_9__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,&__pyx_n_s__value,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__setitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
    __pyx_v_value = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_8__setitem__(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_value);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":630
 *         self.__setitem__(attr, value)
 * 
 *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
 *         if value is None:
 *             # remove attribute if value is None
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_8__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setitem__", 0);

  /* "kivy\properties.pyx":631
 * 
 *     def __setitem__(self, key, value):
 *         if value is None:             # <<<<<<<<<<<<<<
 *             # remove attribute if value is None
 *             # is this really needed?
 */
  __pyx_t_1 = (__pyx_v_value == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":634
 *             # remove attribute if value is None
 *             # is this really needed?
 *             self.__delitem__(key)             # <<<<<<<<<<<<<<
 *         else:
 *             dict.__setitem__(self, key, value)
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s____delitem__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "kivy\properties.pyx":636
 *             self.__delitem__(key)
 *         else:
 *             dict.__setitem__(self, key, value)             # <<<<<<<<<<<<<<
 *         observable_dict_dispatch(self)
 * 
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_n_s____setitem__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_self);
    __Pyx_GIVEREF(__pyx_v_self);
    __Pyx_INCREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    __Pyx_INCREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_value);
    __Pyx_GIVEREF(__pyx_v_value);
    __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":637
 *         else:
 *             dict.__setitem__(self, key, value)
 *         observable_dict_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def __delitem__(self, key):
 */
  __pyx_f_4kivy_10properties_observable_dict_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_11__delitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_11__delitem__ = {__Pyx_NAMESTR("__delitem__"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_11__delitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_11__delitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_key = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__delitem__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__delitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__delitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_key = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__delitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_10__delitem__(__pyx_self, __pyx_v_self, __pyx_v_key);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":639
 *         observable_dict_dispatch(self)
 * 
 *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
 *         dict.__delitem__(self, key)
 *         observable_dict_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_10__delitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__delitem__", 0);

  /* "kivy\properties.pyx":640
 * 
 *     def __delitem__(self, key):
 *         dict.__delitem__(self, key)             # <<<<<<<<<<<<<<
 *         observable_dict_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_n_s____delitem__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __Pyx_INCREF(__pyx_v_key);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_key);
  __Pyx_GIVEREF(__pyx_v_key);
  __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 = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":641
 *     def __delitem__(self, key):
 *         dict.__delitem__(self, key)
 *         observable_dict_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def clear(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_dict_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_13clear(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_13clear = {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_13clear, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_13clear(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "clear") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("clear", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_12clear(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":643
 *         observable_dict_dispatch(self)
 * 
 *     def clear(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.clear(self, *largs)
 *         observable_dict_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_12clear(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("clear", 0);

  /* "kivy\properties.pyx":644
 * 
 *     def clear(self, *largs):
 *         dict.clear(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_dict_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_n_s__clear); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":645
 *     def clear(self, *largs):
 *         dict.clear(self, *largs)
 *         observable_dict_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def remove(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_dict_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_15remove(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_15remove = {__Pyx_NAMESTR("remove"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_15remove, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_15remove(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "remove") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.remove", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_14remove(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":647
 *         observable_dict_dispatch(self)
 * 
 *     def remove(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.remove(self, *largs)
 *         observable_dict_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_14remove(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove", 0);

  /* "kivy\properties.pyx":648
 * 
 *     def remove(self, *largs):
 *         dict.remove(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_dict_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_n_s__remove); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":649
 *     def remove(self, *largs):
 *         dict.remove(self, *largs)
 *         observable_dict_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def pop(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_dict_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.remove", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_17pop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_17pop = {__Pyx_NAMESTR("pop"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_17pop, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_17pop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pop (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "pop") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("pop", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_16pop(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":651
 *         observable_dict_dispatch(self)
 * 
 *     def pop(self, *largs):             # <<<<<<<<<<<<<<
 *         cdef object result = dict.pop(self, *largs)
 *         observable_dict_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_16pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("pop", 0);

  /* "kivy\properties.pyx":652
 * 
 *     def pop(self, *largs):
 *         cdef object result = dict.pop(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_dict_dispatch(self)
 *         return result
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_n_s__pop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __pyx_v_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "kivy\properties.pyx":653
 *     def pop(self, *largs):
 *         cdef object result = dict.pop(self, *largs)
 *         observable_dict_dispatch(self)             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_f_4kivy_10properties_observable_dict_dispatch(__pyx_v_self);

  /* "kivy\properties.pyx":654
 *         cdef object result = dict.pop(self, *largs)
 *         observable_dict_dispatch(self)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def popitem(self, *largs):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_19popitem(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_19popitem = {__Pyx_NAMESTR("popitem"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_19popitem, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_19popitem(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("popitem (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "popitem") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("popitem", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.popitem", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_18popitem(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":656
 *         return result
 * 
 *     def popitem(self, *largs):             # <<<<<<<<<<<<<<
 *         cdef object result = dict.popitem(self, *largs)
 *         observable_dict_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_18popitem(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("popitem", 0);

  /* "kivy\properties.pyx":657
 * 
 *     def popitem(self, *largs):
 *         cdef object result = dict.popitem(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_dict_dispatch(self)
 *         return result
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_n_s__popitem); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __pyx_v_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "kivy\properties.pyx":658
 *     def popitem(self, *largs):
 *         cdef object result = dict.popitem(self, *largs)
 *         observable_dict_dispatch(self)             # <<<<<<<<<<<<<<
 *         return result
 * 
 */
  __pyx_f_4kivy_10properties_observable_dict_dispatch(__pyx_v_self);

  /* "kivy\properties.pyx":659
 *         cdef object result = dict.popitem(self, *largs)
 *         observable_dict_dispatch(self)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def setdefault(self, *largs):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.popitem", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_21setdefault(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_21setdefault = {__Pyx_NAMESTR("setdefault"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_21setdefault, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_21setdefault(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setdefault (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "setdefault") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setdefault", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.setdefault", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_20setdefault(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":661
 *         return result
 * 
 *     def setdefault(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.setdefault(self, *largs)
 *         observable_dict_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_20setdefault(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setdefault", 0);

  /* "kivy\properties.pyx":662
 * 
 *     def setdefault(self, *largs):
 *         dict.setdefault(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_dict_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_n_s__setdefault); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":663
 *     def setdefault(self, *largs):
 *         dict.setdefault(self, *largs)
 *         observable_dict_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 *     def update(self, *largs):
 */
  __pyx_f_4kivy_10properties_observable_dict_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.setdefault", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_23update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4kivy_10properties_14ObservableDict_23update = {__Pyx_NAMESTR("update"), (PyCFunction)__pyx_pw_4kivy_10properties_14ObservableDict_23update, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_4kivy_10properties_14ObservableDict_23update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_largs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
    __pyx_v_largs = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_largs)) {
      __Pyx_RefNannyFinishContext();
      return NULL;
    }
    __Pyx_GOTREF(__pyx_v_largs);
  } else {
    __pyx_v_largs = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        default:
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_largs); __pyx_v_largs = 0;
  __Pyx_AddTraceback("kivy.properties.ObservableDict.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObservableDict_22update(__pyx_self, __pyx_v_self, __pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":665
 *         observable_dict_dispatch(self)
 * 
 *     def update(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.update(self, *largs)
 *         observable_dict_dispatch(self)
 */

static PyObject *__pyx_pf_4kivy_10properties_14ObservableDict_22update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_largs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("update", 0);

  /* "kivy\properties.pyx":666
 * 
 *     def update(self, *largs):
 *         dict.update(self, *largs)             # <<<<<<<<<<<<<<
 *         observable_dict_dispatch(self)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_n_s__update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":667
 *     def update(self, *largs):
 *         dict.update(self, *largs)
 *         observable_dict_dispatch(self)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_f_4kivy_10properties_observable_dict_dispatch(__pyx_v_self);

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObservableDict.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_12DictProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_12DictProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_defaultvalue = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kw = PyDict_New(); if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__defaultvalue,0};
    PyObject* values[1] = {0};

    /* "kivy\properties.pyx":675
 *     Only dict are allowed. Any other classes are forbidden.
 *     '''
 *     def __init__(self, defaultvalue=None, **kw):             # <<<<<<<<<<<<<<
 *         defaultvalue = defaultvalue or {}
 * 
 */
    values[0] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__defaultvalue);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_defaultvalue = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
  __Pyx_AddTraceback("kivy.properties.DictProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_12DictProperty___init__(((struct __pyx_obj_4kivy_10properties_DictProperty *)__pyx_v_self), __pyx_v_defaultvalue, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_4kivy_10properties_12DictProperty___init__(struct __pyx_obj_4kivy_10properties_DictProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF(__pyx_v_defaultvalue);

  /* "kivy\properties.pyx":676
 *     '''
 *     def __init__(self, defaultvalue=None, **kw):
 *         defaultvalue = defaultvalue or {}             # <<<<<<<<<<<<<<
 * 
 *         super(DictProperty, self).__init__(defaultvalue, **kw)
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_defaultvalue); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (!__pyx_t_1) {
    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_v_defaultvalue);
    __pyx_t_3 = __pyx_v_defaultvalue;
  }
  __Pyx_DECREF(__pyx_v_defaultvalue);
  __pyx_v_defaultvalue = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "kivy\properties.pyx":678
 *         defaultvalue = defaultvalue or {}
 * 
 *         super(DictProperty, self).__init__(defaultvalue, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cpdef link(self, EventDispatcher obj, str name):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_DictProperty)));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_DictProperty)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_DictProperty)));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s____init__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_defaultvalue);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_defaultvalue);
  __Pyx_GIVEREF(__pyx_v_defaultvalue);
  __pyx_t_4 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.DictProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_defaultvalue);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":680
 *         super(DictProperty, self).__init__(defaultvalue, **kw)
 * 
 *     cpdef link(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         Property.link(self, obj, name)
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 */

static PyObject *__pyx_pw_4kivy_10properties_12DictProperty_3link(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_12DictProperty_link(struct __pyx_obj_4kivy_10properties_DictProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__link); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_12DictProperty_3link)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(((PyObject *)__pyx_v_name));
      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_name));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_name));
      __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 = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":681
 * 
 *     cpdef link(self, EventDispatcher obj, str name):
 *         Property.link(self, obj, name)             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.value = ObservableDict(self, obj, ps.value)
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->link(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_name, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":682
 *     cpdef link(self, EventDispatcher obj, str name):
 *         Property.link(self, obj, name)
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         ps.value = ObservableDict(self, obj, ps.value)
 * 
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":683
 *         Property.link(self, obj, name)
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.value = ObservableDict(self, obj, ps.value)             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_obj));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
  __Pyx_INCREF(__pyx_v_ps->value);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_ps->value);
  __Pyx_GIVEREF(__pyx_v_ps->value);
  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_ps->value);
  __Pyx_DECREF(__pyx_v_ps->value);
  __pyx_v_ps->value = __pyx_t_2;
  __pyx_t_2 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.DictProperty.link", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_12DictProperty_3link(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_12DictProperty_3link(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_name = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("link (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__name,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("link", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "link") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_name = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("link", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.DictProperty.link", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_12DictProperty_2link(((struct __pyx_obj_4kivy_10properties_DictProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_name);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":680
 *         super(DictProperty, self).__init__(defaultvalue, **kw)
 * 
 *     cpdef link(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         Property.link(self, obj, name)
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 */

static PyObject *__pyx_pf_4kivy_10properties_12DictProperty_2link(struct __pyx_obj_4kivy_10properties_DictProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_DictProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.link(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_name, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.DictProperty.link", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":685
 *         ps.value = ObservableDict(self, obj, ps.value)
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if Property.check(self, obj, value):
 *             return True
 */

static PyObject *__pyx_f_4kivy_10properties_12DictProperty_check(struct __pyx_obj_4kivy_10properties_DictProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":686
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):             # <<<<<<<<<<<<<<
 *             return True
 *         if type(value) is not ObservableDict:
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":687
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):
 *             return True             # <<<<<<<<<<<<<<
 *         if type(value) is not ObservableDict:
 *             raise ValueError('%s.%s accept only ObservableDict' % (
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":688
 *         if Property.check(self, obj, value):
 *             return True
 *         if type(value) is not ObservableDict:             # <<<<<<<<<<<<<<
 *             raise ValueError('%s.%s accept only ObservableDict' % (
 *                 obj.__class__.__name__,
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_value)) != __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":690
 *         if type(value) is not ObservableDict:
 *             raise ValueError('%s.%s accept only ObservableDict' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name))
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":691
 *             raise ValueError('%s.%s accept only ObservableDict' % (
 *                 obj.__class__.__name__,
 *                 self.name))             # <<<<<<<<<<<<<<
 * 
 *     cpdef set(self, EventDispatcher obj, value):
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_12), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.DictProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":693
 *                 self.name))
 * 
 *     cpdef set(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         value = ObservableDict(self, obj, value)
 *         Property.set(self, obj, value)
 */

static PyObject *__pyx_pw_4kivy_10properties_12DictProperty_5set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_12DictProperty_set(struct __pyx_obj_4kivy_10properties_DictProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  __Pyx_INCREF(__pyx_v_value);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__set); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_12DictProperty_5set)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      __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 = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":694
 * 
 *     cpdef set(self, EventDispatcher obj, value):
 *         value = ObservableDict(self, obj, value)             # <<<<<<<<<<<<<<
 *         Property.set(self, obj, value)
 * 
 */
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ObservableDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_obj));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
  __Pyx_INCREF(__pyx_v_value);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_v_value);
  __pyx_v_value = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "kivy\properties.pyx":695
 *     cpdef set(self, EventDispatcher obj, value):
 *         value = ObservableDict(self, obj, value)
 *         Property.set(self, obj, value)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __pyx_vtabptr_4kivy_10properties_Property->set(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.DictProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_12DictProperty_5set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_12DictProperty_5set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.DictProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_12DictProperty_4set(((struct __pyx_obj_4kivy_10properties_DictProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_value);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":693
 *                 self.name))
 * 
 *     cpdef set(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         value = ObservableDict(self, obj, value)
 *         Property.set(self, obj, value)
 */

static PyObject *__pyx_pf_4kivy_10properties_12DictProperty_4set(struct __pyx_obj_4kivy_10properties_DictProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_DictProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.DictProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_14ObjectProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_14ObjectProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_defaultvalue = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kw = PyDict_New(); if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__defaultvalue,0};
    PyObject* values[1] = {0};

    /* "kivy\properties.pyx":713
 *         `baseclass` parameter added.
 *     '''
 *     def __init__(self, defaultvalue=None, **kw):             # <<<<<<<<<<<<<<
 *         self.baseclass = kw.get('baseclass', object)
 *         super(ObjectProperty, self).__init__(defaultvalue, **kw)
 */
    values[0] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__defaultvalue);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_defaultvalue = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
  __Pyx_AddTraceback("kivy.properties.ObjectProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_14ObjectProperty___init__(((struct __pyx_obj_4kivy_10properties_ObjectProperty *)__pyx_v_self), __pyx_v_defaultvalue, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_4kivy_10properties_14ObjectProperty___init__(struct __pyx_obj_4kivy_10properties_ObjectProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":714
 *     '''
 *     def __init__(self, defaultvalue=None, **kw):
 *         self.baseclass = kw.get('baseclass', object)             # <<<<<<<<<<<<<<
 *         super(ObjectProperty, self).__init__(defaultvalue, **kw)
 * 
 */
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_kw), ((PyObject *)__pyx_n_s__baseclass), __pyx_builtin_object); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->baseclass);
  __Pyx_DECREF(__pyx_v_self->baseclass);
  __pyx_v_self->baseclass = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":715
 *     def __init__(self, defaultvalue=None, **kw):
 *         self.baseclass = kw.get('baseclass', object)
 *         super(ObjectProperty, self).__init__(defaultvalue, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_ObjectProperty)));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_ObjectProperty)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_ObjectProperty)));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s____init__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_defaultvalue);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_defaultvalue);
  __Pyx_GIVEREF(__pyx_v_defaultvalue);
  __pyx_t_3 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.ObjectProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":717
 *         super(ObjectProperty, self).__init__(defaultvalue, **kw)
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if Property.check(self, obj, value):
 *             return True
 */

static PyObject *__pyx_f_4kivy_10properties_14ObjectProperty_check(struct __pyx_obj_4kivy_10properties_ObjectProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":718
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):             # <<<<<<<<<<<<<<
 *             return True
 *         if not isinstance(value, self.baseclass):
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":719
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):
 *             return True             # <<<<<<<<<<<<<<
 *         if not isinstance(value, self.baseclass):
 *             raise ValueError('%s.%s accept only Python object' % (
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":720
 *         if Property.check(self, obj, value):
 *             return True
 *         if not isinstance(value, self.baseclass):             # <<<<<<<<<<<<<<
 *             raise ValueError('%s.%s accept only Python object' % (
 *                 obj.__class__.__name__,
 */
  __pyx_t_1 = __pyx_v_self->baseclass;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":722
 *         if not isinstance(value, self.baseclass):
 *             raise ValueError('%s.%s accept only Python object' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name))
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":723
 *             raise ValueError('%s.%s accept only Python object' % (
 *                 obj.__class__.__name__,
 *                 self.name))             # <<<<<<<<<<<<<<
 * 
 * cdef class BooleanProperty(Property):
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_13), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.ObjectProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_15BooleanProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_15BooleanProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_defaultvalue = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kw = PyDict_New(); if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__defaultvalue,0};
    PyObject* values[1] = {0};
    values[0] = __pyx_k_14;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__defaultvalue);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_defaultvalue = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
  __Pyx_AddTraceback("kivy.properties.BooleanProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_15BooleanProperty___init__(((struct __pyx_obj_4kivy_10properties_BooleanProperty *)__pyx_v_self), __pyx_v_defaultvalue, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":729
 *     '''
 * 
 *     def __init__(self, defaultvalue=True, **kw):             # <<<<<<<<<<<<<<
 *         super(BooleanProperty, self).__init__(defaultvalue, **kw)
 * 
 */

static int __pyx_pf_4kivy_10properties_15BooleanProperty___init__(struct __pyx_obj_4kivy_10properties_BooleanProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_kw) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":730
 * 
 *     def __init__(self, defaultvalue=True, **kw):
 *         super(BooleanProperty, self).__init__(defaultvalue, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_BooleanProperty)));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_BooleanProperty)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_BooleanProperty)));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_2 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s____init__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_defaultvalue);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_defaultvalue);
  __Pyx_GIVEREF(__pyx_v_defaultvalue);
  __pyx_t_3 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.BooleanProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":732
 *         super(BooleanProperty, self).__init__(defaultvalue, **kw)
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if Property.check(self, obj, value):
 *             return True
 */

static PyObject *__pyx_f_4kivy_10properties_15BooleanProperty_check(struct __pyx_obj_4kivy_10properties_BooleanProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":733
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):             # <<<<<<<<<<<<<<
 *             return True
 *         if not isinstance(value, object):
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":734
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):
 *             return True             # <<<<<<<<<<<<<<
 *         if not isinstance(value, object):
 *             raise ValueError('%s.%s accept only bool' % (
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":735
 *         if Property.check(self, obj, value):
 *             return True
 *         if not isinstance(value, object):             # <<<<<<<<<<<<<<
 *             raise ValueError('%s.%s accept only bool' % (
 *                 obj.__class__.__name__,
 */
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_builtin_object); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":737
 *         if not isinstance(value, object):
 *             raise ValueError('%s.%s accept only bool' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name))
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":738
 *             raise ValueError('%s.%s accept only bool' % (
 *                 obj.__class__.__name__,
 *                 self.name))             # <<<<<<<<<<<<<<
 * 
 * cdef class BoundedNumericProperty(Property):
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_15), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.BooleanProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_22BoundedNumericProperty_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_22BoundedNumericProperty_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_4kivy_10properties_22BoundedNumericProperty___cinit__(((struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":750
 *             If set, maximum bound will be used, with the value of max
 *     '''
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.use_min = 0
 *         self.use_max = 0
 */

static int __pyx_pf_4kivy_10properties_22BoundedNumericProperty___cinit__(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "kivy\properties.pyx":751
 *     '''
 *     def __cinit__(self):
 *         self.use_min = 0             # <<<<<<<<<<<<<<
 *         self.use_max = 0
 *         self.min = 0
 */
  __pyx_v_self->use_min = 0;

  /* "kivy\properties.pyx":752
 *     def __cinit__(self):
 *         self.use_min = 0
 *         self.use_max = 0             # <<<<<<<<<<<<<<
 *         self.min = 0
 *         self.max = 0
 */
  __pyx_v_self->use_max = 0;

  /* "kivy\properties.pyx":753
 *         self.use_min = 0
 *         self.use_max = 0
 *         self.min = 0             # <<<<<<<<<<<<<<
 *         self.max = 0
 *         self.f_min = 0.0
 */
  __pyx_v_self->min = 0;

  /* "kivy\properties.pyx":754
 *         self.use_max = 0
 *         self.min = 0
 *         self.max = 0             # <<<<<<<<<<<<<<
 *         self.f_min = 0.0
 *         self.f_max = 0.0
 */
  __pyx_v_self->max = 0;

  /* "kivy\properties.pyx":755
 *         self.min = 0
 *         self.max = 0
 *         self.f_min = 0.0             # <<<<<<<<<<<<<<
 *         self.f_max = 0.0
 * 
 */
  __pyx_v_self->f_min = 0.0;

  /* "kivy\properties.pyx":756
 *         self.max = 0
 *         self.f_min = 0.0
 *         self.f_max = 0.0             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, *largs, **kw):
 */
  __pyx_v_self->f_max = 0.0;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_22BoundedNumericProperty_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_22BoundedNumericProperty_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_largs = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 1))) return -1;
  __pyx_v_kw = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New();
  if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  __Pyx_INCREF(__pyx_args);
  __pyx_v_largs = __pyx_args;
  __pyx_r = __pyx_pf_4kivy_10properties_22BoundedNumericProperty_2__init__(((struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *)__pyx_v_self), __pyx_v_largs, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":758
 *         self.f_max = 0.0
 * 
 *     def __init__(self, *largs, **kw):             # <<<<<<<<<<<<<<
 *         value = kw.get('min', None)
 *         if value is None:
 */

static int __pyx_pf_4kivy_10properties_22BoundedNumericProperty_2__init__(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, PyObject *__pyx_v_largs, PyObject *__pyx_v_kw) {
  PyObject *__pyx_v_value = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  float __pyx_t_4;
  long __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":759
 * 
 *     def __init__(self, *largs, **kw):
 *         value = kw.get('min', None)             # <<<<<<<<<<<<<<
 *         if value is None:
 *             self.use_min = 0
 */
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_kw), ((PyObject *)__pyx_n_s__min), Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_value = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":760
 *     def __init__(self, *largs, **kw):
 *         value = kw.get('min', None)
 *         if value is None:             # <<<<<<<<<<<<<<
 *             self.use_min = 0
 *         elif type(value) is float:
 */
  __pyx_t_2 = (__pyx_v_value == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":761
 *         value = kw.get('min', None)
 *         if value is None:
 *             self.use_min = 0             # <<<<<<<<<<<<<<
 *         elif type(value) is float:
 *                 self.use_min = 2
 */
    __pyx_v_self->use_min = 0;
    goto __pyx_L3;
  }

  /* "kivy\properties.pyx":762
 *         if value is None:
 *             self.use_min = 0
 *         elif type(value) is float:             # <<<<<<<<<<<<<<
 *                 self.use_min = 2
 *                 self.f_min = value
 */
  __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_value)) == ((PyObject *)((PyObject*)(&PyFloat_Type))));
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":763
 *             self.use_min = 0
 *         elif type(value) is float:
 *                 self.use_min = 2             # <<<<<<<<<<<<<<
 *                 self.f_min = value
 *         else:
 */
    __pyx_v_self->use_min = 2;

    /* "kivy\properties.pyx":764
 *         elif type(value) is float:
 *                 self.use_min = 2
 *                 self.f_min = value             # <<<<<<<<<<<<<<
 *         else:
 *             self.use_min = 1
 */
    __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_self->f_min = __pyx_t_4;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "kivy\properties.pyx":766
 *                 self.f_min = value
 *         else:
 *             self.use_min = 1             # <<<<<<<<<<<<<<
 *             self.min = value
 * 
 */
    __pyx_v_self->use_min = 1;

    /* "kivy\properties.pyx":767
 *         else:
 *             self.use_min = 1
 *             self.min = value             # <<<<<<<<<<<<<<
 * 
 *         value = kw.get('max', None)
 */
    __pyx_t_5 = __Pyx_PyInt_AsLong(__pyx_v_value); if (unlikely((__pyx_t_5 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_self->min = __pyx_t_5;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":769
 *             self.min = value
 * 
 *         value = kw.get('max', None)             # <<<<<<<<<<<<<<
 *         if value is None:
 *             self.use_max = 0
 */
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_kw), ((PyObject *)__pyx_n_s__max), Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_v_value);
  __pyx_v_value = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":770
 * 
 *         value = kw.get('max', None)
 *         if value is None:             # <<<<<<<<<<<<<<
 *             self.use_max = 0
 *         elif type(value) is float:
 */
  __pyx_t_2 = (__pyx_v_value == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":771
 *         value = kw.get('max', None)
 *         if value is None:
 *             self.use_max = 0             # <<<<<<<<<<<<<<
 *         elif type(value) is float:
 *             self.use_max = 2
 */
    __pyx_v_self->use_max = 0;
    goto __pyx_L4;
  }

  /* "kivy\properties.pyx":772
 *         if value is None:
 *             self.use_max = 0
 *         elif type(value) is float:             # <<<<<<<<<<<<<<
 *             self.use_max = 2
 *             self.f_max = value
 */
  __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_value)) == ((PyObject *)((PyObject*)(&PyFloat_Type))));
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":773
 *             self.use_max = 0
 *         elif type(value) is float:
 *             self.use_max = 2             # <<<<<<<<<<<<<<
 *             self.f_max = value
 *         else:
 */
    __pyx_v_self->use_max = 2;

    /* "kivy\properties.pyx":774
 *         elif type(value) is float:
 *             self.use_max = 2
 *             self.f_max = value             # <<<<<<<<<<<<<<
 *         else:
 *             self.use_max = 1
 */
    __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_self->f_max = __pyx_t_4;
    goto __pyx_L4;
  }
  /*else*/ {

    /* "kivy\properties.pyx":776
 *             self.f_max = value
 *         else:
 *             self.use_max = 1             # <<<<<<<<<<<<<<
 *             self.max = value
 * 
 */
    __pyx_v_self->use_max = 1;

    /* "kivy\properties.pyx":777
 *         else:
 *             self.use_max = 1
 *             self.max = value             # <<<<<<<<<<<<<<
 * 
 *         Property.__init__(self, *largs, **kw)
 */
    __pyx_t_5 = __Pyx_PyInt_AsLong(__pyx_v_value); if (unlikely((__pyx_t_5 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_self->max = __pyx_t_5;
  }
  __pyx_L4:;

  /* "kivy\properties.pyx":779
 *             self.max = value
 * 
 *         Property.__init__(self, *largs, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_Property)), __pyx_n_s____init__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_7 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
  __pyx_t_8 = PyNumber_Add(((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_8));
  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
  __pyx_t_7 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":781
 *         Property.__init__(self, *largs, **kw)
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):             # <<<<<<<<<<<<<<
 *         Property.init_storage(self, obj, storage)
 *         storage.bnum_min = self.min
 */

static PyObject *__pyx_f_4kivy_10properties_22BoundedNumericProperty_init_storage(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_storage) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  long __pyx_t_2;
  float __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init_storage", 0);

  /* "kivy\properties.pyx":782
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         Property.init_storage(self, obj, storage)             # <<<<<<<<<<<<<<
 *         storage.bnum_min = self.min
 *         storage.bnum_max = self.max
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->init_storage(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_storage); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":783
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         Property.init_storage(self, obj, storage)
 *         storage.bnum_min = self.min             # <<<<<<<<<<<<<<
 *         storage.bnum_max = self.max
 *         storage.bnum_f_min = self.f_min
 */
  __pyx_t_2 = __pyx_v_self->min;
  __pyx_v_storage->bnum_min = __pyx_t_2;

  /* "kivy\properties.pyx":784
 *         Property.init_storage(self, obj, storage)
 *         storage.bnum_min = self.min
 *         storage.bnum_max = self.max             # <<<<<<<<<<<<<<
 *         storage.bnum_f_min = self.f_min
 *         storage.bnum_f_max = self.f_max
 */
  __pyx_t_2 = __pyx_v_self->max;
  __pyx_v_storage->bnum_max = __pyx_t_2;

  /* "kivy\properties.pyx":785
 *         storage.bnum_min = self.min
 *         storage.bnum_max = self.max
 *         storage.bnum_f_min = self.f_min             # <<<<<<<<<<<<<<
 *         storage.bnum_f_max = self.f_max
 *         storage.bnum_use_min = self.use_min
 */
  __pyx_t_3 = __pyx_v_self->f_min;
  __pyx_v_storage->bnum_f_min = __pyx_t_3;

  /* "kivy\properties.pyx":786
 *         storage.bnum_max = self.max
 *         storage.bnum_f_min = self.f_min
 *         storage.bnum_f_max = self.f_max             # <<<<<<<<<<<<<<
 *         storage.bnum_use_min = self.use_min
 *         storage.bnum_use_max = self.use_max
 */
  __pyx_t_3 = __pyx_v_self->f_max;
  __pyx_v_storage->bnum_f_max = __pyx_t_3;

  /* "kivy\properties.pyx":787
 *         storage.bnum_f_min = self.f_min
 *         storage.bnum_f_max = self.f_max
 *         storage.bnum_use_min = self.use_min             # <<<<<<<<<<<<<<
 *         storage.bnum_use_max = self.use_max
 * 
 */
  __pyx_t_4 = __pyx_v_self->use_min;
  __pyx_v_storage->bnum_use_min = __pyx_t_4;

  /* "kivy\properties.pyx":788
 *         storage.bnum_f_max = self.f_max
 *         storage.bnum_use_min = self.use_min
 *         storage.bnum_use_max = self.use_max             # <<<<<<<<<<<<<<
 * 
 *     def set_min(self, EventDispatcher obj, value):
 */
  __pyx_t_4 = __pyx_v_self->use_max;
  __pyx_v_storage->bnum_use_max = __pyx_t_4;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.init_storage", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_5set_min(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4kivy_10properties_22BoundedNumericProperty_4set_min[] = "Change the minimum value acceptable for the BoundedNumericProperty,\n        only for the `obj` instance. Set to None if you want to disable it::\n\n            class MyWidget(Widget):\n                number = BoundedNumericProperty(0, min=-5, max=5)\n\n            widget = MyWidget()\n            # change the minmium to -10\n            widget.property('number').set_min(widget, -10)\n            # or disable the minimum check\n            widget.property('number').set_min(widget, None)\n\n        .. warning::\n\n            Changing the bounds doesn't revalidate the current value.\n\n        .. versionadded:: 1.1.0\n        ";
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_5set_min(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_min (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("set_min", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_min") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_min", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.set_min", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_22BoundedNumericProperty_4set_min(((struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_value);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":790
 *         storage.bnum_use_max = self.use_max
 * 
 *     def set_min(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         '''Change the minimum value acceptable for the BoundedNumericProperty,
 *         only for the `obj` instance. Set to None if you want to disable it::
 */

static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_4set_min(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  float __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_min", 0);

  /* "kivy\properties.pyx":809
 *         .. versionadded:: 1.1.0
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if value is None:
 *             ps.bnum_use_min = 0
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":810
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if value is None:             # <<<<<<<<<<<<<<
 *             ps.bnum_use_min = 0
 *         elif type(value) is float:
 */
  __pyx_t_2 = (__pyx_v_value == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":811
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if value is None:
 *             ps.bnum_use_min = 0             # <<<<<<<<<<<<<<
 *         elif type(value) is float:
 *             ps.bnum_f_min = value
 */
    __pyx_v_ps->bnum_use_min = 0;
    goto __pyx_L3;
  }

  /* "kivy\properties.pyx":812
 *         if value is None:
 *             ps.bnum_use_min = 0
 *         elif type(value) is float:             # <<<<<<<<<<<<<<
 *             ps.bnum_f_min = value
 *             ps.bnum_use_min = 2
 */
  __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_value)) == ((PyObject *)((PyObject*)(&PyFloat_Type))));
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":813
 *             ps.bnum_use_min = 0
 *         elif type(value) is float:
 *             ps.bnum_f_min = value             # <<<<<<<<<<<<<<
 *             ps.bnum_use_min = 2
 *         else:
 */
    __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_ps->bnum_f_min = __pyx_t_4;

    /* "kivy\properties.pyx":814
 *         elif type(value) is float:
 *             ps.bnum_f_min = value
 *             ps.bnum_use_min = 2             # <<<<<<<<<<<<<<
 *         else:
 *             ps.bnum_min = value
 */
    __pyx_v_ps->bnum_use_min = 2;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "kivy\properties.pyx":816
 *             ps.bnum_use_min = 2
 *         else:
 *             ps.bnum_min = value             # <<<<<<<<<<<<<<
 *             ps.bnum_use_min = 1
 * 
 */
    __pyx_t_5 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_ps->bnum_min = __pyx_t_5;

    /* "kivy\properties.pyx":817
 *         else:
 *             ps.bnum_min = value
 *             ps.bnum_use_min = 1             # <<<<<<<<<<<<<<
 * 
 *     def get_min(self, EventDispatcher obj):
 */
    __pyx_v_ps->bnum_use_min = 1;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.set_min", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_7get_min(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static char __pyx_doc_4kivy_10properties_22BoundedNumericProperty_6get_min[] = "Return the minimum value acceptable for the BoundedNumericProperty\n        in `obj`. Return None if no minimum value is set::\n\n            class MyWidget(Widget):\n                number = BoundedNumericProperty(0, min=-5, max=5)\n\n            widget = MyWidget()\n            print widget.property('number').get_min(widget)\n            # will output -5\n\n        .. versionadded:: 1.1.0\n        ";
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_7get_min(PyObject *__pyx_v_self, PyObject *__pyx_v_obj) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_min (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_22BoundedNumericProperty_6get_min(((struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *)__pyx_v_self), ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj));
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":819
 *             ps.bnum_use_min = 1
 * 
 *     def get_min(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         '''Return the minimum value acceptable for the BoundedNumericProperty
 *         in `obj`. Return None if no minimum value is set::
 */

static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_6get_min(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_min", 0);

  /* "kivy\properties.pyx":832
 *         .. versionadded:: 1.1.0
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if ps.bnum_use_min == 1:
 *             return ps.bnum_min
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":835
 *         if ps.bnum_use_min == 1:
 *             return ps.bnum_min
 *         elif ps.bnum_use_min == 2:             # <<<<<<<<<<<<<<
 *             return ps.bnum_f_min
 * 
 */
  switch (__pyx_v_ps->bnum_use_min) {

    /* "kivy\properties.pyx":833
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.bnum_use_min == 1:             # <<<<<<<<<<<<<<
 *             return ps.bnum_min
 *         elif ps.bnum_use_min == 2:
 */
    case 1:

    /* "kivy\properties.pyx":834
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.bnum_use_min == 1:
 *             return ps.bnum_min             # <<<<<<<<<<<<<<
 *         elif ps.bnum_use_min == 2:
 *             return ps.bnum_f_min
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyInt_FromLong(__pyx_v_ps->bnum_min); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    break;

    /* "kivy\properties.pyx":835
 *         if ps.bnum_use_min == 1:
 *             return ps.bnum_min
 *         elif ps.bnum_use_min == 2:             # <<<<<<<<<<<<<<
 *             return ps.bnum_f_min
 * 
 */
    case 2:

    /* "kivy\properties.pyx":836
 *             return ps.bnum_min
 *         elif ps.bnum_use_min == 2:
 *             return ps.bnum_f_min             # <<<<<<<<<<<<<<
 * 
 *     def set_max(self, EventDispatcher obj, value):
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_ps->bnum_f_min); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    break;
  }

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.get_min", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_9set_max(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4kivy_10properties_22BoundedNumericProperty_8set_max[] = "Change the maximum value acceptable for the BoundedNumericProperty,\n        only for the `obj` instance. Set to None if you want to disable it.\n        Check :data:`set_min` for a usage example.\n\n        .. warning::\n\n            Changing the bounds doesn't revalidate the current value.\n\n        .. versionadded:: 1.1.0\n        ";
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_9set_max(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_max (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("set_max", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_max") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_max", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.set_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_22BoundedNumericProperty_8set_max(((struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_value);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":838
 *             return ps.bnum_f_min
 * 
 *     def set_max(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         '''Change the maximum value acceptable for the BoundedNumericProperty,
 *         only for the `obj` instance. Set to None if you want to disable it.
 */

static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_8set_max(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  float __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_max", 0);

  /* "kivy\properties.pyx":849
 *         .. versionadded:: 1.1.0
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if value is None:
 *             ps.bnum_use_max = 0
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":850
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if value is None:             # <<<<<<<<<<<<<<
 *             ps.bnum_use_max = 0
 *         elif type(value) is float:
 */
  __pyx_t_2 = (__pyx_v_value == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":851
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if value is None:
 *             ps.bnum_use_max = 0             # <<<<<<<<<<<<<<
 *         elif type(value) is float:
 *             ps.bnum_f_max = value
 */
    __pyx_v_ps->bnum_use_max = 0;
    goto __pyx_L3;
  }

  /* "kivy\properties.pyx":852
 *         if value is None:
 *             ps.bnum_use_max = 0
 *         elif type(value) is float:             # <<<<<<<<<<<<<<
 *             ps.bnum_f_max = value
 *             ps.bnum_use_max = 2
 */
  __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_value)) == ((PyObject *)((PyObject*)(&PyFloat_Type))));
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":853
 *             ps.bnum_use_max = 0
 *         elif type(value) is float:
 *             ps.bnum_f_max = value             # <<<<<<<<<<<<<<
 *             ps.bnum_use_max = 2
 *         else:
 */
    __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_ps->bnum_f_max = __pyx_t_4;

    /* "kivy\properties.pyx":854
 *         elif type(value) is float:
 *             ps.bnum_f_max = value
 *             ps.bnum_use_max = 2             # <<<<<<<<<<<<<<
 *         else:
 *             ps.bnum_max = value
 */
    __pyx_v_ps->bnum_use_max = 2;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "kivy\properties.pyx":856
 *             ps.bnum_use_max = 2
 *         else:
 *             ps.bnum_max = value             # <<<<<<<<<<<<<<
 *             ps.bnum_use_max = 1
 * 
 */
    __pyx_t_5 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_v_ps->bnum_max = __pyx_t_5;

    /* "kivy\properties.pyx":857
 *         else:
 *             ps.bnum_max = value
 *             ps.bnum_use_max = 1             # <<<<<<<<<<<<<<
 * 
 *     def get_max(self, EventDispatcher obj):
 */
    __pyx_v_ps->bnum_use_max = 1;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.set_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_11get_max(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static char __pyx_doc_4kivy_10properties_22BoundedNumericProperty_10get_max[] = "Return the maximum value acceptable for the BoundedNumericProperty\n        in `obj`. Return None if no maximum value is set. Check\n        :data:`get_min` for a usage example.\n\n        .. versionadded:: 1.1.0\n        ";
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_11get_max(PyObject *__pyx_v_self, PyObject *__pyx_v_obj) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_max (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 859; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_22BoundedNumericProperty_10get_max(((struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *)__pyx_v_self), ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj));
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":859
 *             ps.bnum_use_max = 1
 * 
 *     def get_max(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         '''Return the maximum value acceptable for the BoundedNumericProperty
 *         in `obj`. Return None if no maximum value is set. Check
 */

static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_10get_max(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_max", 0);

  /* "kivy\properties.pyx":866
 *         .. versionadded:: 1.1.0
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if ps.bnum_use_max == 1:
 *             return ps.bnum_max
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 866; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 866; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 866; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":867
 *         '''
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.bnum_use_max == 1:             # <<<<<<<<<<<<<<
 *             return ps.bnum_max
 *         if ps.bnum_use_max == 2:
 */
  __pyx_t_2 = ((__pyx_v_ps->bnum_use_max == 1) != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":868
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.bnum_use_max == 1:
 *             return ps.bnum_max             # <<<<<<<<<<<<<<
 *         if ps.bnum_use_max == 2:
 *             return ps.bnum_f_max
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyInt_FromLong(__pyx_v_ps->bnum_max); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":869
 *         if ps.bnum_use_max == 1:
 *             return ps.bnum_max
 *         if ps.bnum_use_max == 2:             # <<<<<<<<<<<<<<
 *             return ps.bnum_f_max
 * 
 */
  __pyx_t_2 = ((__pyx_v_ps->bnum_use_max == 2) != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":870
 *             return ps.bnum_max
 *         if ps.bnum_use_max == 2:
 *             return ps.bnum_f_max             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_ps->bnum_f_max); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.get_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":872
 *             return ps.bnum_f_max
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if Property.check(self, obj, value):
 *             return True
 */

static PyObject *__pyx_f_4kivy_10properties_22BoundedNumericProperty_check(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  double __pyx_v__min;
  double __pyx_v__max;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  float __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":873
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):             # <<<<<<<<<<<<<<
 *             return True
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":874
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):
 *             return True             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.bnum_use_min == 1:
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":875
 *         if Property.check(self, obj, value):
 *             return True
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if ps.bnum_use_min == 1:
 *             _min = ps.bnum_min
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":882
 *                     obj.__class__.__name__,
 *                     self.name, _min))
 *         elif ps.bnum_use_min == 2:             # <<<<<<<<<<<<<<
 *             _min = ps.bnum_f_min
 *             if value < _min:
 */
  switch (__pyx_v_ps->bnum_use_min) {

    /* "kivy\properties.pyx":876
 *             return True
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.bnum_use_min == 1:             # <<<<<<<<<<<<<<
 *             _min = ps.bnum_min
 *             if value < _min:
 */
    case 1:

    /* "kivy\properties.pyx":877
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.bnum_use_min == 1:
 *             _min = ps.bnum_min             # <<<<<<<<<<<<<<
 *             if value < _min:
 *                 raise ValueError('%s.%s is below the minimum bound (%d)' % (
 */
    __pyx_t_3 = __pyx_v_ps->bnum_min;
    __pyx_v__min = __pyx_t_3;

    /* "kivy\properties.pyx":878
 *         if ps.bnum_use_min == 1:
 *             _min = ps.bnum_min
 *             if value < _min:             # <<<<<<<<<<<<<<
 *                 raise ValueError('%s.%s is below the minimum bound (%d)' % (
 *                     obj.__class__.__name__,
 */
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v__min); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_value, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_2) {

      /* "kivy\properties.pyx":880
 *             if value < _min:
 *                 raise ValueError('%s.%s is below the minimum bound (%d)' % (
 *                     obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                     self.name, _min))
 *         elif ps.bnum_use_min == 2:
 */
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s____name__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "kivy\properties.pyx":881
 *                 raise ValueError('%s.%s is below the minimum bound (%d)' % (
 *                     obj.__class__.__name__,
 *                     self.name, _min))             # <<<<<<<<<<<<<<
 *         elif ps.bnum_use_min == 2:
 *             _min = ps.bnum_f_min
 */
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyFloat_FromDouble(__pyx_v__min); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      __pyx_t_1 = 0;
      __pyx_t_4 = 0;
      __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_16), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_5));
      __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
      __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
      __pyx_t_5 = 0;
      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L4;
    }
    __pyx_L4:;
    break;

    /* "kivy\properties.pyx":882
 *                     obj.__class__.__name__,
 *                     self.name, _min))
 *         elif ps.bnum_use_min == 2:             # <<<<<<<<<<<<<<
 *             _min = ps.bnum_f_min
 *             if value < _min:
 */
    case 2:

    /* "kivy\properties.pyx":883
 *                     self.name, _min))
 *         elif ps.bnum_use_min == 2:
 *             _min = ps.bnum_f_min             # <<<<<<<<<<<<<<
 *             if value < _min:
 *                 raise ValueError('%s.%s is below the minimum bound (%d)' % (
 */
    __pyx_t_7 = __pyx_v_ps->bnum_f_min;
    __pyx_v__min = __pyx_t_7;

    /* "kivy\properties.pyx":884
 *         elif ps.bnum_use_min == 2:
 *             _min = ps.bnum_f_min
 *             if value < _min:             # <<<<<<<<<<<<<<
 *                 raise ValueError('%s.%s is below the minimum bound (%d)' % (
 *                     obj.__class__.__name__,
 */
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v__min); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_value, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_2) {

      /* "kivy\properties.pyx":886
 *             if value < _min:
 *                 raise ValueError('%s.%s is below the minimum bound (%d)' % (
 *                     obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                     self.name, _min))
 *         if ps.bnum_use_max == 1:
 */
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s____name__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

      /* "kivy\properties.pyx":887
 *                 raise ValueError('%s.%s is below the minimum bound (%d)' % (
 *                     obj.__class__.__name__,
 *                     self.name, _min))             # <<<<<<<<<<<<<<
 *         if ps.bnum_use_max == 1:
 *             _max = ps.bnum_max
 */
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v__min); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      __pyx_t_5 = 0;
      __pyx_t_6 = 0;
      __pyx_t_4 = 0;
      __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_16), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
      __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_4));
      __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
      __pyx_t_4 = 0;
      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L5;
    }
    __pyx_L5:;
    break;
  }

  /* "kivy\properties.pyx":894
 *                     obj.__class__.__name__,
 *                     self.name, _max))
 *         elif ps.bnum_use_max == 2:             # <<<<<<<<<<<<<<
 *             _max = ps.bnum_f_max
 *             if value > _max:
 */
  switch (__pyx_v_ps->bnum_use_max) {

    /* "kivy\properties.pyx":888
 *                     obj.__class__.__name__,
 *                     self.name, _min))
 *         if ps.bnum_use_max == 1:             # <<<<<<<<<<<<<<
 *             _max = ps.bnum_max
 *             if value > _max:
 */
    case 1:

    /* "kivy\properties.pyx":889
 *                     self.name, _min))
 *         if ps.bnum_use_max == 1:
 *             _max = ps.bnum_max             # <<<<<<<<<<<<<<
 *             if value > _max:
 *                 raise ValueError('%s.%s is above the maximum bound (%d)' % (
 */
    __pyx_t_3 = __pyx_v_ps->bnum_max;
    __pyx_v__max = __pyx_t_3;

    /* "kivy\properties.pyx":890
 *         if ps.bnum_use_max == 1:
 *             _max = ps.bnum_max
 *             if value > _max:             # <<<<<<<<<<<<<<
 *                 raise ValueError('%s.%s is above the maximum bound (%d)' % (
 *                     obj.__class__.__name__,
 */
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v__max); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_value, __pyx_t_4, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_2) {

      /* "kivy\properties.pyx":892
 *             if value > _max:
 *                 raise ValueError('%s.%s is above the maximum bound (%d)' % (
 *                     obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                     self.name, _max))
 *         elif ps.bnum_use_max == 2:
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "kivy\properties.pyx":893
 *                 raise ValueError('%s.%s is above the maximum bound (%d)' % (
 *                     obj.__class__.__name__,
 *                     self.name, _max))             # <<<<<<<<<<<<<<
 *         elif ps.bnum_use_max == 2:
 *             _max = ps.bnum_f_max
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = PyFloat_FromDouble(__pyx_v__max); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      __pyx_t_4 = 0;
      __pyx_t_1 = 0;
      __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_17), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_6));
      __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_6));
      __Pyx_GIVEREF(((PyObject *)__pyx_t_6));
      __pyx_t_6 = 0;
      __pyx_t_6 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L6;
    }
    __pyx_L6:;
    break;

    /* "kivy\properties.pyx":894
 *                     obj.__class__.__name__,
 *                     self.name, _max))
 *         elif ps.bnum_use_max == 2:             # <<<<<<<<<<<<<<
 *             _max = ps.bnum_f_max
 *             if value > _max:
 */
    case 2:

    /* "kivy\properties.pyx":895
 *                     self.name, _max))
 *         elif ps.bnum_use_max == 2:
 *             _max = ps.bnum_f_max             # <<<<<<<<<<<<<<
 *             if value > _max:
 *                 raise ValueError('%s.%s is above the maximum bound (%d)' % (
 */
    __pyx_t_7 = __pyx_v_ps->bnum_f_max;
    __pyx_v__max = __pyx_t_7;

    /* "kivy\properties.pyx":896
 *         elif ps.bnum_use_max == 2:
 *             _max = ps.bnum_f_max
 *             if value > _max:             # <<<<<<<<<<<<<<
 *                 raise ValueError('%s.%s is above the maximum bound (%d)' % (
 *                     obj.__class__.__name__,
 */
    __pyx_t_6 = PyFloat_FromDouble(__pyx_v__max); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = PyObject_RichCompare(__pyx_v_value, __pyx_t_6, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_2) {

      /* "kivy\properties.pyx":898
 *             if value > _max:
 *                 raise ValueError('%s.%s is above the maximum bound (%d)' % (
 *                     obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                     self.name, _max))
 *         return True
 */
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s____name__); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

      /* "kivy\properties.pyx":899
 *                 raise ValueError('%s.%s is above the maximum bound (%d)' % (
 *                     obj.__class__.__name__,
 *                     self.name, _max))             # <<<<<<<<<<<<<<
 *         return True
 * 
 */
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = PyFloat_FromDouble(__pyx_v__max); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_6 = 0;
      __pyx_t_5 = 0;
      __pyx_t_1 = 0;
      __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_17), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_1));
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1));
      __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
      __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L7;
    }
    __pyx_L7:;
    break;
  }

  /* "kivy\properties.pyx":900
 *                     obj.__class__.__name__,
 *                     self.name, _max))
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     property bounds:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_6bounds_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_22BoundedNumericProperty_6bounds_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_4kivy_10properties_22BoundedNumericProperty_6bounds___get__(((struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":908
 *         '''
 * 
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             if self.use_min == 1:
 *                 _min = self.min
 */

static PyObject *__pyx_pf_4kivy_10properties_22BoundedNumericProperty_6bounds___get__(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *__pyx_v_self) {
  PyObject *__pyx_v__min = NULL;
  PyObject *__pyx_v__max = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "kivy\properties.pyx":911
 *             if self.use_min == 1:
 *                 _min = self.min
 *             elif self.use_min == 2:             # <<<<<<<<<<<<<<
 *                 _min = self.f_min
 *             else:
 */
  switch (__pyx_v_self->use_min) {

    /* "kivy\properties.pyx":909
 * 
 *         def __get__(self):
 *             if self.use_min == 1:             # <<<<<<<<<<<<<<
 *                 _min = self.min
 *             elif self.use_min == 2:
 */
    case 1:

    /* "kivy\properties.pyx":910
 *         def __get__(self):
 *             if self.use_min == 1:
 *                 _min = self.min             # <<<<<<<<<<<<<<
 *             elif self.use_min == 2:
 *                 _min = self.f_min
 */
    __pyx_t_1 = PyInt_FromLong(__pyx_v_self->min); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v__min = __pyx_t_1;
    __pyx_t_1 = 0;
    break;

    /* "kivy\properties.pyx":911
 *             if self.use_min == 1:
 *                 _min = self.min
 *             elif self.use_min == 2:             # <<<<<<<<<<<<<<
 *                 _min = self.f_min
 *             else:
 */
    case 2:

    /* "kivy\properties.pyx":912
 *                 _min = self.min
 *             elif self.use_min == 2:
 *                 _min = self.f_min             # <<<<<<<<<<<<<<
 *             else:
 *                 _min = None
 */
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->f_min); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 912; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v__min = __pyx_t_1;
    __pyx_t_1 = 0;
    break;
    default:

    /* "kivy\properties.pyx":914
 *                 _min = self.f_min
 *             else:
 *                 _min = None             # <<<<<<<<<<<<<<
 * 
 *             if self.use_max == 1:
 */
    __Pyx_INCREF(Py_None);
    __pyx_v__min = Py_None;
    break;
  }

  /* "kivy\properties.pyx":918
 *             if self.use_max == 1:
 *                 _max = self.max
 *             elif self.use_max == 2:             # <<<<<<<<<<<<<<
 *                 _max = self.f_max
 *             else:
 */
  switch (__pyx_v_self->use_max) {

    /* "kivy\properties.pyx":916
 *                 _min = None
 * 
 *             if self.use_max == 1:             # <<<<<<<<<<<<<<
 *                 _max = self.max
 *             elif self.use_max == 2:
 */
    case 1:

    /* "kivy\properties.pyx":917
 * 
 *             if self.use_max == 1:
 *                 _max = self.max             # <<<<<<<<<<<<<<
 *             elif self.use_max == 2:
 *                 _max = self.f_max
 */
    __pyx_t_1 = PyInt_FromLong(__pyx_v_self->max); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 917; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v__max = __pyx_t_1;
    __pyx_t_1 = 0;
    break;

    /* "kivy\properties.pyx":918
 *             if self.use_max == 1:
 *                 _max = self.max
 *             elif self.use_max == 2:             # <<<<<<<<<<<<<<
 *                 _max = self.f_max
 *             else:
 */
    case 2:

    /* "kivy\properties.pyx":919
 *                 _max = self.max
 *             elif self.use_max == 2:
 *                 _max = self.f_max             # <<<<<<<<<<<<<<
 *             else:
 *                 _max = None
 */
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->f_max); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v__max = __pyx_t_1;
    __pyx_t_1 = 0;
    break;
    default:

    /* "kivy\properties.pyx":921
 *                 _max = self.f_max
 *             else:
 *                 _max = None             # <<<<<<<<<<<<<<
 * 
 *             return _min, _max
 */
    __Pyx_INCREF(Py_None);
    __pyx_v__max = Py_None;
    break;
  }

  /* "kivy\properties.pyx":923
 *                 _max = None
 * 
 *             return _min, _max             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v__min);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__min);
  __Pyx_GIVEREF(__pyx_v__min);
  __Pyx_INCREF(__pyx_v__max);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v__max);
  __Pyx_GIVEREF(__pyx_v__max);
  __pyx_r = ((PyObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.BoundedNumericProperty.bounds.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v__min);
  __Pyx_XDECREF(__pyx_v__max);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_14OptionProperty_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_14OptionProperty_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_4kivy_10properties_14OptionProperty___cinit__(((struct __pyx_obj_4kivy_10properties_OptionProperty *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":937
 *             List of valid options
 *     '''
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.options = []
 * 
 */

static int __pyx_pf_4kivy_10properties_14OptionProperty___cinit__(struct __pyx_obj_4kivy_10properties_OptionProperty *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "kivy\properties.pyx":938
 *     '''
 *     def __cinit__(self):
 *         self.options = []             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, *largs, **kw):
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(__pyx_v_self->options);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->options));
  __pyx_v_self->options = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.OptionProperty.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_14OptionProperty_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_14OptionProperty_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_largs = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 1))) return -1;
  __pyx_v_kw = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New();
  if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  __Pyx_INCREF(__pyx_args);
  __pyx_v_largs = __pyx_args;
  __pyx_r = __pyx_pf_4kivy_10properties_14OptionProperty_2__init__(((struct __pyx_obj_4kivy_10properties_OptionProperty *)__pyx_v_self), __pyx_v_largs, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":940
 *         self.options = []
 * 
 *     def __init__(self, *largs, **kw):             # <<<<<<<<<<<<<<
 *         self.options = list(kw.get('options', []))
 *         super(OptionProperty, self).__init__(*largs, **kw)
 */

static int __pyx_pf_4kivy_10properties_14OptionProperty_2__init__(struct __pyx_obj_4kivy_10properties_OptionProperty *__pyx_v_self, PyObject *__pyx_v_largs, PyObject *__pyx_v_kw) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":941
 * 
 *     def __init__(self, *largs, **kw):
 *         self.options = list(kw.get('options', []))             # <<<<<<<<<<<<<<
 *         super(OptionProperty, self).__init__(*largs, **kw)
 * 
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 941; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_kw), ((PyObject *)__pyx_n_s__options), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 941; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 941; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 941; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->options);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->options));
  __pyx_v_self->options = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "kivy\properties.pyx":942
 *     def __init__(self, *largs, **kw):
 *         self.options = list(kw.get('options', []))
 *         super(OptionProperty, self).__init__(*largs, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 */
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_OptionProperty)));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_OptionProperty)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_OptionProperty)));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_1 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____init__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PySequence_Tuple(((PyObject *)__pyx_v_largs)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.OptionProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":944
 *         super(OptionProperty, self).__init__(*largs, **kw)
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):             # <<<<<<<<<<<<<<
 *         Property.init_storage(self, obj, storage)
 *         storage.options = self.options[:]
 */

static PyObject *__pyx_f_4kivy_10properties_14OptionProperty_init_storage(struct __pyx_obj_4kivy_10properties_OptionProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_storage) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init_storage", 0);

  /* "kivy\properties.pyx":945
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         Property.init_storage(self, obj, storage)             # <<<<<<<<<<<<<<
 *         storage.options = self.options[:]
 * 
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->init_storage(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_storage); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":946
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         Property.init_storage(self, obj, storage)
 *         storage.options = self.options[:]             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
  if (unlikely(((PyObject *)__pyx_v_self->options) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyList_GetSlice(((PyObject *)__pyx_v_self->options), 0, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(__pyx_v_storage->options);
  __Pyx_DECREF(((PyObject *)__pyx_v_storage->options));
  __pyx_v_storage->options = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.OptionProperty.init_storage", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":948
 *         storage.options = self.options[:]
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if Property.check(self, obj, value):
 *             return True
 */

static PyObject *__pyx_f_4kivy_10properties_14OptionProperty_check(struct __pyx_obj_4kivy_10properties_OptionProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":949
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):             # <<<<<<<<<<<<<<
 *             return True
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 949; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 949; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":950
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):
 *             return True             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if value not in ps.options:
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":951
 *         if Property.check(self, obj, value):
 *             return True
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if value not in ps.options:
 *             raise ValueError('%s.%s is set to an invalid option %r. '
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":952
 *             return True
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if value not in ps.options:             # <<<<<<<<<<<<<<
 *             raise ValueError('%s.%s is set to an invalid option %r. '
 *                              'Must be one of: %s' % (
 */
  __pyx_t_2 = (__Pyx_PySequence_Contains(__pyx_v_value, ((PyObject *)__pyx_v_ps->options), Py_NE)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":955
 *             raise ValueError('%s.%s is set to an invalid option %r. '
 *                              'Must be one of: %s' % (
 *                              obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                              self.name,
 *                              value, ps.options))
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":956
 *                              'Must be one of: %s' % (
 *                              obj.__class__.__name__,
 *                              self.name,             # <<<<<<<<<<<<<<
 *                              value, ps.options))
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);

    /* "kivy\properties.pyx":957
 *                              obj.__class__.__name__,
 *                              self.name,
 *                              value, ps.options))             # <<<<<<<<<<<<<<
 * 
 *     property options:
 */
    __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_value);
    __Pyx_GIVEREF(__pyx_v_value);
    __Pyx_INCREF(((PyObject *)__pyx_v_ps->options));
    PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)__pyx_v_ps->options));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_ps->options));
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_18), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("kivy.properties.OptionProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_14OptionProperty_7options_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_14OptionProperty_7options_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_4kivy_10properties_14OptionProperty_7options___get__(((struct __pyx_obj_4kivy_10properties_OptionProperty *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":965
 *         '''
 * 
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.options
 * 
 */

static PyObject *__pyx_pf_4kivy_10properties_14OptionProperty_7options___get__(struct __pyx_obj_4kivy_10properties_OptionProperty *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "kivy\properties.pyx":966
 * 
 *         def __get__(self):
 *             return self.options             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->options));
  __pyx_r = ((PyObject *)__pyx_v_self->options);
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_21ReferenceListProperty_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_21ReferenceListProperty_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_4kivy_10properties_21ReferenceListProperty___cinit__(((struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":978
 *     `x` and `y`.
 *     '''
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.properties = list()
 * 
 */

static int __pyx_pf_4kivy_10properties_21ReferenceListProperty___cinit__(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "kivy\properties.pyx":979
 *     '''
 *     def __cinit__(self):
 *         self.properties = list()             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, *largs, **kw):
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 979; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(__pyx_v_self->properties);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->properties));
  __pyx_v_self->properties = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_21ReferenceListProperty_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_21ReferenceListProperty_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_largs = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 1))) return -1;
  __pyx_v_kw = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New();
  if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  __Pyx_INCREF(__pyx_args);
  __pyx_v_largs = __pyx_args;
  __pyx_r = __pyx_pf_4kivy_10properties_21ReferenceListProperty_2__init__(((struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)__pyx_v_self), __pyx_v_largs, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_largs);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":981
 *         self.properties = list()
 * 
 *     def __init__(self, *largs, **kw):             # <<<<<<<<<<<<<<
 *         for prop in largs:
 *             self.properties.append(prop)
 */

static int __pyx_pf_4kivy_10properties_21ReferenceListProperty_2__init__(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, PyObject *__pyx_v_largs, PyObject *__pyx_v_kw) {
  PyObject *__pyx_v_prop = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":982
 * 
 *     def __init__(self, *largs, **kw):
 *         for prop in largs:             # <<<<<<<<<<<<<<
 *             self.properties.append(prop)
 *         Property.__init__(self, largs, **kw)
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_largs); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_COMPILING_IN_CPYTHON
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 982; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 982; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #endif
    __Pyx_XDECREF(__pyx_v_prop);
    __pyx_v_prop = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "kivy\properties.pyx":983
 *     def __init__(self, *largs, **kw):
 *         for prop in largs:
 *             self.properties.append(prop)             # <<<<<<<<<<<<<<
 *         Property.__init__(self, largs, **kw)
 * 
 */
    if (unlikely(((PyObject *)__pyx_v_self->properties) == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_self->properties, __pyx_v_prop); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":984
 *         for prop in largs:
 *             self.properties.append(prop)
 *         Property.__init__(self, largs, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_Property)), __pyx_n_s____init__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __Pyx_INCREF(((PyObject *)__pyx_v_largs));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_largs));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_largs));
  __pyx_t_5 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_prop);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":986
 *         Property.__init__(self, largs, **kw)
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):             # <<<<<<<<<<<<<<
 *         Property.init_storage(self, obj, storage)
 *         storage.properties = tuple(self.properties)
 */

static PyObject *__pyx_f_4kivy_10properties_21ReferenceListProperty_init_storage(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_storage) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init_storage", 0);

  /* "kivy\properties.pyx":987
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         Property.init_storage(self, obj, storage)             # <<<<<<<<<<<<<<
 *         storage.properties = tuple(self.properties)
 *         storage.stop_event = 0
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->init_storage(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_storage); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":988
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         Property.init_storage(self, obj, storage)
 *         storage.properties = tuple(self.properties)             # <<<<<<<<<<<<<<
 *         storage.stop_event = 0
 * 
 */
  if (unlikely(((PyObject *)__pyx_v_self->properties) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = ((PyObject *)PyList_AsTuple(__pyx_v_self->properties)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(__pyx_v_storage->properties);
  __Pyx_DECREF(((PyObject *)__pyx_v_storage->properties));
  __pyx_v_storage->properties = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":989
 *         Property.init_storage(self, obj, storage)
 *         storage.properties = tuple(self.properties)
 *         storage.stop_event = 0             # <<<<<<<<<<<<<<
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):
 */
  __pyx_v_storage->stop_event = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.init_storage", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":991
 *         storage.stop_event = 0
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         cdef Property prop
 *         Property.link_deps(self, obj, name)
 */

static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_5link_deps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_21ReferenceListProperty_link_deps(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_Property *__pyx_v_prop = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link_deps", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__link_deps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_21ReferenceListProperty_5link_deps)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(((PyObject *)__pyx_v_name));
      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_name));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_name));
      __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 = 991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":993
 *     cpdef link_deps(self, EventDispatcher obj, str name):
 *         cdef Property prop
 *         Property.link_deps(self, obj, name)             # <<<<<<<<<<<<<<
 *         for prop in self.properties:
 *             prop.bind(obj, self.trigger_change)
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->link_deps(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_name, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":994
 *         cdef Property prop
 *         Property.link_deps(self, obj, name)
 *         for prop in self.properties:             # <<<<<<<<<<<<<<
 *             prop.bind(obj, self.trigger_change)
 * 
 */
  if (unlikely(((PyObject *)__pyx_v_self->properties) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 994; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = ((PyObject *)__pyx_v_self->properties); __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
  for (;;) {
    if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_COMPILING_IN_CPYTHON
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 994; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 994; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #endif
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_4kivy_10properties_Property))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 994; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_XDECREF(((PyObject *)__pyx_v_prop));
    __pyx_v_prop = ((struct __pyx_obj_4kivy_10properties_Property *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "kivy\properties.pyx":995
 *         Property.link_deps(self, obj, name)
 *         for prop in self.properties:
 *             prop.bind(obj, self.trigger_change)             # <<<<<<<<<<<<<<
 * 
 *     cpdef trigger_change(self, EventDispatcher obj, value):
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__trigger_change); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_prop->__pyx_vtab)->bind(__pyx_v_prop, __pyx_v_obj, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.link_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prop);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_5link_deps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_5link_deps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_name = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("link_deps (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__name,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("link_deps", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "link_deps") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_name = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("link_deps", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.link_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_21ReferenceListProperty_4link_deps(((struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_name);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":991
 *         storage.stop_event = 0
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         cdef Property prop
 *         Property.link_deps(self, obj, name)
 */

static PyObject *__pyx_pf_4kivy_10properties_21ReferenceListProperty_4link_deps(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link_deps", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.link_deps(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_name, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.link_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":997
 *             prop.bind(obj, self.trigger_change)
 * 
 *     cpdef trigger_change(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.stop_event:
 */

static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_7trigger_change(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_21ReferenceListProperty_trigger_change(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_value, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_v_p = NULL;
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("trigger_change", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__trigger_change); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_21ReferenceListProperty_7trigger_change)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      __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 = 997; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":998
 * 
 *     cpdef trigger_change(self, EventDispatcher obj, value):
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if ps.stop_event:
 *             return
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 998; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 998; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 998; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":999
 *     cpdef trigger_change(self, EventDispatcher obj, value):
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.stop_event:             # <<<<<<<<<<<<<<
 *             return
 *         p = ps.properties
 */
  __pyx_t_4 = (__pyx_v_ps->stop_event != 0);
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":1000
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.stop_event:
 *             return             # <<<<<<<<<<<<<<
 *         p = ps.properties
 *         ps.value = [p[x].get(obj) for x in xrange(len(p))]
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":1001
 *         if ps.stop_event:
 *             return
 *         p = ps.properties             # <<<<<<<<<<<<<<
 *         ps.value = [p[x].get(obj) for x in xrange(len(p))]
 *         self.dispatch(obj)
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_ps->properties);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_p = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1002
 *             return
 *         p = ps.properties
 *         ps.value = [p[x].get(obj) for x in xrange(len(p))]             # <<<<<<<<<<<<<<
 *         self.dispatch(obj)
 * 
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(((PyObject *)__pyx_v_p) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_p)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_builtin_xrange, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = Py_TYPE(__pyx_t_2)->tp_iternext;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_2)) {
      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_2)) {
      if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_3 = __pyx_t_6(__pyx_t_2);
      if (unlikely(!__pyx_t_3)) {
        if (PyErr_Occurred()) {
          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF(__pyx_v_x);
    __pyx_v_x = __pyx_t_3;
    __pyx_t_3 = 0;
    if (unlikely(((PyObject *)__pyx_v_p) == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_p), __pyx_v_x); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__get); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_v_obj));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_obj));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
    __pyx_t_8 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_8))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(__pyx_v_ps->value);
  __Pyx_DECREF(__pyx_v_ps->value);
  __pyx_v_ps->value = ((PyObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1003
 *         p = ps.properties
 *         ps.value = [p[x].get(obj) for x in xrange(len(p))]
 *         self.dispatch(obj)             # <<<<<<<<<<<<<<
 * 
 *     cdef convert(self, EventDispatcher obj, value):
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.dispatch(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1003; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.trigger_change", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XDECREF(__pyx_v_p);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_7trigger_change(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_7trigger_change(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("trigger_change (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("trigger_change", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trigger_change") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("trigger_change", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.trigger_change", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_21ReferenceListProperty_6trigger_change(((struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_value);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":997
 *             prop.bind(obj, self.trigger_change)
 * 
 *     cpdef trigger_change(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.stop_event:
 */

static PyObject *__pyx_pf_4kivy_10properties_21ReferenceListProperty_6trigger_change(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("trigger_change", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->trigger_change(__pyx_v_self, __pyx_v_obj, __pyx_v_value, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.trigger_change", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1005
 *         self.dispatch(obj)
 * 
 *     cdef convert(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if not isinstance(value, (list, tuple)):
 *             raise ValueError('%s.%s must be a list or a tuple' % (
 */

static PyObject *__pyx_f_4kivy_10properties_21ReferenceListProperty_convert(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("convert", 0);

  /* "kivy\properties.pyx":1006
 * 
 *     cdef convert(self, EventDispatcher obj, value):
 *         if not isinstance(value, (list, tuple)):             # <<<<<<<<<<<<<<
 *             raise ValueError('%s.%s must be a list or a tuple' % (
 *                 obj.__class__.__name__,
 */
  __Pyx_INCREF(__pyx_v_value);
  __pyx_t_1 = __pyx_v_value;
  __pyx_t_2 = PyList_Check(__pyx_t_1); 
  if (!__pyx_t_2) {
    __pyx_t_3 = PyTuple_Check(__pyx_t_1); 
    __pyx_t_4 = __pyx_t_3;
  } else {
    __pyx_t_4 = __pyx_t_2;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = ((!(__pyx_t_4 != 0)) != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":1008
 *         if not isinstance(value, (list, tuple)):
 *             raise ValueError('%s.%s must be a list or a tuple' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name))
 *         return list(value)
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1008; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1008; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":1009
 *             raise ValueError('%s.%s must be a list or a tuple' % (
 *                 obj.__class__.__name__,
 *                 self.name))             # <<<<<<<<<<<<<<
 *         return list(value)
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1009; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1008; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_5 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_19), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":1010
 *                 obj.__class__.__name__,
 *                 self.name))
 *         return list(value)             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1010; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_value);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1010; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1012
 *         return list(value)
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if len(value) != len(ps.properties):
 */

static PyObject *__pyx_f_4kivy_10properties_21ReferenceListProperty_check(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":1013
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if len(value) != len(ps.properties):
 *             raise ValueError('%s.%s value length is immutable' % (
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1013; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1013; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1013; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1014
 *     cdef check(self, EventDispatcher obj, value):
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if len(value) != len(ps.properties):             # <<<<<<<<<<<<<<
 *             raise ValueError('%s.%s value length is immutable' % (
 *                 obj.__class__.__name__,
 */
  __pyx_t_2 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1014; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_1 = ((PyObject *)__pyx_v_ps->properties);
  __Pyx_INCREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1014; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_3 = PyTuple_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1014; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = ((__pyx_t_2 != __pyx_t_3) != 0);
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":1016
 *         if len(value) != len(ps.properties):
 *             raise ValueError('%s.%s value length is immutable' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name))
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "kivy\properties.pyx":1017
 *             raise ValueError('%s.%s value length is immutable' % (
 *                 obj.__class__.__name__,
 *                 self.name))             # <<<<<<<<<<<<<<
 * 
 *     cpdef set(self, EventDispatcher obj, _value):
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_5 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_20), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1015; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1015; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1015; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1015; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L3;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1019
 *                 self.name))
 * 
 *     cpdef set(self, EventDispatcher obj, _value):             # <<<<<<<<<<<<<<
 *         cdef int idx
 *         cdef list value
 */

static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_9set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_21ReferenceListProperty_set(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v__value, int __pyx_skip_dispatch) {
  int __pyx_v_idx;
  PyObject *__pyx_v_value = 0;
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_v_props = NULL;
  PyObject *__pyx_v_prop = NULL;
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__set); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_21ReferenceListProperty_9set)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v__value);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v__value);
      __Pyx_GIVEREF(__pyx_v__value);
      __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 = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":1022
 *         cdef int idx
 *         cdef list value
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         value = self.convert(obj, _value)
 *         if self.compare_value(ps.value, value):
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1023
 *         cdef list value
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         value = self.convert(obj, _value)             # <<<<<<<<<<<<<<
 *         if self.compare_value(ps.value, value):
 *             return False
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.convert(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected list, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_value = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1024
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         value = self.convert(obj, _value)
 *         if self.compare_value(ps.value, value):             # <<<<<<<<<<<<<<
 *             return False
 *         self.check(obj, value)
 */
  __pyx_t_1 = __pyx_v_ps->value;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.compare_value(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_t_1, ((PyObject *)__pyx_v_value)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":1025
 *         value = self.convert(obj, _value)
 *         if self.compare_value(ps.value, value):
 *             return False             # <<<<<<<<<<<<<<
 *         self.check(obj, value)
 *         # prevent dependency loop
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1025; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":1026
 *         if self.compare_value(ps.value, value):
 *             return False
 *         self.check(obj, value)             # <<<<<<<<<<<<<<
 *         # prevent dependency loop
 *         ps.stop_event = 1
 */
  __pyx_t_3 = ((struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, ((PyObject *)__pyx_v_value)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":1028
 *         self.check(obj, value)
 *         # prevent dependency loop
 *         ps.stop_event = 1             # <<<<<<<<<<<<<<
 *         props = ps.properties
 *         for idx in xrange(len(props)):
 */
  __pyx_v_ps->stop_event = 1;

  /* "kivy\properties.pyx":1029
 *         # prevent dependency loop
 *         ps.stop_event = 1
 *         props = ps.properties             # <<<<<<<<<<<<<<
 *         for idx in xrange(len(props)):
 *             prop = props[idx]
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_ps->properties);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_props = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "kivy\properties.pyx":1030
 *         ps.stop_event = 1
 *         props = ps.properties
 *         for idx in xrange(len(props)):             # <<<<<<<<<<<<<<
 *             prop = props[idx]
 *             x = value[idx]
 */
  if (unlikely(((PyObject *)__pyx_v_props) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_props)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_idx = __pyx_t_6;

    /* "kivy\properties.pyx":1031
 *         props = ps.properties
 *         for idx in xrange(len(props)):
 *             prop = props[idx]             # <<<<<<<<<<<<<<
 *             x = value[idx]
 *             prop.set(obj, x)
 */
    if (unlikely(((PyObject *)__pyx_v_props) == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_3 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_props), __pyx_v_idx, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF(__pyx_v_prop);
    __pyx_v_prop = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "kivy\properties.pyx":1032
 *         for idx in xrange(len(props)):
 *             prop = props[idx]
 *             x = value[idx]             # <<<<<<<<<<<<<<
 *             prop.set(obj, x)
 *         ps.stop_event = 0
 */
    if (unlikely(((PyObject *)__pyx_v_value) == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_3 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_value), __pyx_v_idx, sizeof(int), PyInt_FromLong, 1, 1, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF(__pyx_v_x);
    __pyx_v_x = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "kivy\properties.pyx":1033
 *             prop = props[idx]
 *             x = value[idx]
 *             prop.set(obj, x)             # <<<<<<<<<<<<<<
 *         ps.stop_event = 0
 *         ps.value = value
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_prop, __pyx_n_s__set); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)__pyx_v_obj));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_obj));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
    __Pyx_INCREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }

  /* "kivy\properties.pyx":1034
 *             x = value[idx]
 *             prop.set(obj, x)
 *         ps.stop_event = 0             # <<<<<<<<<<<<<<
 *         ps.value = value
 *         self.dispatch(obj)
 */
  __pyx_v_ps->stop_event = 0;

  /* "kivy\properties.pyx":1035
 *             prop.set(obj, x)
 *         ps.stop_event = 0
 *         ps.value = value             # <<<<<<<<<<<<<<
 *         self.dispatch(obj)
 *         return True
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_value));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_value));
  __Pyx_GOTREF(__pyx_v_ps->value);
  __Pyx_DECREF(__pyx_v_ps->value);
  __pyx_v_ps->value = ((PyObject *)__pyx_v_value);

  /* "kivy\properties.pyx":1036
 *         ps.stop_event = 0
 *         ps.value = value
 *         self.dispatch(obj)             # <<<<<<<<<<<<<<
 *         return True
 * 
 */
  __pyx_t_2 = ((struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.dispatch(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "kivy\properties.pyx":1037
 *         ps.value = value
 *         self.dispatch(obj)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     cpdef get(self, EventDispatcher obj):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XDECREF(__pyx_v_props);
  __Pyx_XDECREF(__pyx_v_prop);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_9set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_9set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v__value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s___value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s___value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v__value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_21ReferenceListProperty_8set(((struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v__value);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1019
 *                 self.name))
 * 
 *     cpdef set(self, EventDispatcher obj, _value):             # <<<<<<<<<<<<<<
 *         cdef int idx
 *         cdef list value
 */

static PyObject *__pyx_pf_4kivy_10properties_21ReferenceListProperty_8set(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v__value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v__value, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1039
 *         return True
 * 
 *     cpdef get(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         cdef tuple p = ps.properties
 */

static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_11get(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_21ReferenceListProperty_get(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_v_p = 0;
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__get); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_21ReferenceListProperty_11get)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __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 = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":1040
 * 
 *     cpdef get(self, EventDispatcher obj):
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         cdef tuple p = ps.properties
 *         ps.value = [p[x].get(obj) for x in xrange(len(p))]
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1041
 *     cpdef get(self, EventDispatcher obj):
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         cdef tuple p = ps.properties             # <<<<<<<<<<<<<<
 *         ps.value = [p[x].get(obj) for x in xrange(len(p))]
 *         return ps.value
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_ps->properties);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_p = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1042
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         cdef tuple p = ps.properties
 *         ps.value = [p[x].get(obj) for x in xrange(len(p))]             # <<<<<<<<<<<<<<
 *         return ps.value
 * 
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(((PyObject *)__pyx_v_p) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_4 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_p)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_builtin_xrange, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_2)) {
      if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_2)) {
      if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_3 = __pyx_t_5(__pyx_t_2);
      if (unlikely(!__pyx_t_3)) {
        if (PyErr_Occurred()) {
          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF(__pyx_v_x);
    __pyx_v_x = __pyx_t_3;
    __pyx_t_3 = 0;
    if (unlikely(((PyObject *)__pyx_v_p) == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_p), __pyx_v_x); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__get); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_v_obj));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_obj));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
    __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(__pyx_v_ps->value);
  __Pyx_DECREF(__pyx_v_ps->value);
  __pyx_v_ps->value = ((PyObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1043
 *         cdef tuple p = ps.properties
 *         ps.value = [p[x].get(obj) for x in xrange(len(p))]
 *         return ps.value             # <<<<<<<<<<<<<<
 * 
 * cdef class AliasProperty(Property):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ps->value);
  __pyx_r = __pyx_v_ps->value;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XDECREF(__pyx_v_p);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_11get(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_21ReferenceListProperty_11get(PyObject *__pyx_v_self, PyObject *__pyx_v_obj) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_21ReferenceListProperty_10get(((struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)__pyx_v_self), ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj));
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1039
 *         return True
 * 
 *     cpdef get(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         cdef tuple p = ps.properties
 */

static PyObject *__pyx_pf_4kivy_10properties_21ReferenceListProperty_10get(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.ReferenceListProperty.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_13AliasProperty_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_13AliasProperty_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_4kivy_10properties_13AliasProperty___cinit__(((struct __pyx_obj_4kivy_10properties_AliasProperty *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1073
 *         Parameter `cache` added.
 *     '''
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.getter = None
 *         self.setter = None
 */

static int __pyx_pf_4kivy_10properties_13AliasProperty___cinit__(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "kivy\properties.pyx":1074
 *     '''
 *     def __cinit__(self):
 *         self.getter = None             # <<<<<<<<<<<<<<
 *         self.setter = None
 *         self.use_cache = 0
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->getter);
  __Pyx_DECREF(__pyx_v_self->getter);
  __pyx_v_self->getter = Py_None;

  /* "kivy\properties.pyx":1075
 *     def __cinit__(self):
 *         self.getter = None
 *         self.setter = None             # <<<<<<<<<<<<<<
 *         self.use_cache = 0
 *         self.bind_objects = list()
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->setter);
  __Pyx_DECREF(__pyx_v_self->setter);
  __pyx_v_self->setter = Py_None;

  /* "kivy\properties.pyx":1076
 *         self.getter = None
 *         self.setter = None
 *         self.use_cache = 0             # <<<<<<<<<<<<<<
 *         self.bind_objects = list()
 * 
 */
  __pyx_v_self->use_cache = 0;

  /* "kivy\properties.pyx":1077
 *         self.setter = None
 *         self.use_cache = 0
 *         self.bind_objects = list()             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, getter, setter, **kwargs):
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1077; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(__pyx_v_self->bind_objects);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->bind_objects));
  __pyx_v_self->bind_objects = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_13AliasProperty_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_13AliasProperty_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_getter = 0;
  PyObject *__pyx_v_setter = 0;
  PyObject *__pyx_v_kwargs = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return -1;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__getter,&__pyx_n_s__setter,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__getter)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__setter)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_getter = values[0];
    __pyx_v_setter = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("kivy.properties.AliasProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_13AliasProperty_2__init__(((struct __pyx_obj_4kivy_10properties_AliasProperty *)__pyx_v_self), __pyx_v_getter, __pyx_v_setter, __pyx_v_kwargs);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1079
 *         self.bind_objects = list()
 * 
 *     def __init__(self, getter, setter, **kwargs):             # <<<<<<<<<<<<<<
 *         Property.__init__(self, None, **kwargs)
 *         self.getter = getter
 */

static int __pyx_pf_4kivy_10properties_13AliasProperty_2__init__(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, PyObject *__pyx_v_getter, PyObject *__pyx_v_setter, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_v = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  long __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "kivy\properties.pyx":1080
 * 
 *     def __init__(self, getter, setter, **kwargs):
 *         Property.__init__(self, None, **kwargs)             # <<<<<<<<<<<<<<
 *         self.getter = getter
 *         self.setter = setter
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_Property)), __pyx_n_s____init__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1080; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1080; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None);
  __Pyx_GIVEREF(Py_None);
  __pyx_t_3 = ((PyObject *)__pyx_v_kwargs);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1080; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "kivy\properties.pyx":1081
 *     def __init__(self, getter, setter, **kwargs):
 *         Property.__init__(self, None, **kwargs)
 *         self.getter = getter             # <<<<<<<<<<<<<<
 *         self.setter = setter
 *         v = kwargs.get('bind')
 */
  __Pyx_INCREF(__pyx_v_getter);
  __Pyx_GIVEREF(__pyx_v_getter);
  __Pyx_GOTREF(__pyx_v_self->getter);
  __Pyx_DECREF(__pyx_v_self->getter);
  __pyx_v_self->getter = __pyx_v_getter;

  /* "kivy\properties.pyx":1082
 *         Property.__init__(self, None, **kwargs)
 *         self.getter = getter
 *         self.setter = setter             # <<<<<<<<<<<<<<
 *         v = kwargs.get('bind')
 *         self.bind_objects = list(v) if v is not None else []
 */
  __Pyx_INCREF(__pyx_v_setter);
  __Pyx_GIVEREF(__pyx_v_setter);
  __Pyx_GOTREF(__pyx_v_self->setter);
  __Pyx_DECREF(__pyx_v_self->setter);
  __pyx_v_self->setter = __pyx_v_setter;

  /* "kivy\properties.pyx":1083
 *         self.getter = getter
 *         self.setter = setter
 *         v = kwargs.get('bind')             # <<<<<<<<<<<<<<
 *         self.bind_objects = list(v) if v is not None else []
 *         self.use_cache = 1 if kwargs.get('cache') else 0
 */
  __pyx_t_4 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_kwargs), ((PyObject *)__pyx_n_s__bind), Py_None); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_v = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "kivy\properties.pyx":1084
 *         self.setter = setter
 *         v = kwargs.get('bind')
 *         self.bind_objects = list(v) if v is not None else []             # <<<<<<<<<<<<<<
 *         self.use_cache = 1 if kwargs.get('cache') else 0
 * 
 */
  __pyx_t_5 = (__pyx_v_v != Py_None);
  if ((__pyx_t_5 != 0)) {
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_v);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_v);
    __Pyx_GIVEREF(__pyx_v_v);
    __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    __pyx_t_4 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = ((PyObject *)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->bind_objects);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->bind_objects));
  __pyx_v_self->bind_objects = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "kivy\properties.pyx":1085
 *         v = kwargs.get('bind')
 *         self.bind_objects = list(v) if v is not None else []
 *         self.use_cache = 1 if kwargs.get('cache') else 0             # <<<<<<<<<<<<<<
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 */
  __pyx_t_4 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_kwargs), ((PyObject *)__pyx_n_s__cache), Py_None); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1085; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1085; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_5) {
    __pyx_t_6 = 1;
  } else {
    __pyx_t_6 = 0;
  }
  __pyx_v_self->use_cache = __pyx_t_6;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1087
 *         self.use_cache = 1 if kwargs.get('cache') else 0
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):             # <<<<<<<<<<<<<<
 *         Property.init_storage(self, obj, storage)
 *         storage.getter = self.getter
 */

static PyObject *__pyx_f_4kivy_10properties_13AliasProperty_init_storage(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_storage) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init_storage", 0);

  /* "kivy\properties.pyx":1088
 * 
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         Property.init_storage(self, obj, storage)             # <<<<<<<<<<<<<<
 *         storage.getter = self.getter
 *         storage.setter = self.setter
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->init_storage(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_storage); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1088; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1089
 *     cdef init_storage(self, EventDispatcher obj, PropertyStorage storage):
 *         Property.init_storage(self, obj, storage)
 *         storage.getter = self.getter             # <<<<<<<<<<<<<<
 *         storage.setter = self.setter
 *         storage.alias_initial = 1
 */
  __pyx_t_1 = __pyx_v_self->getter;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_storage->getter);
  __Pyx_DECREF(__pyx_v_storage->getter);
  __pyx_v_storage->getter = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1090
 *         Property.init_storage(self, obj, storage)
 *         storage.getter = self.getter
 *         storage.setter = self.setter             # <<<<<<<<<<<<<<
 *         storage.alias_initial = 1
 * 
 */
  __pyx_t_1 = __pyx_v_self->setter;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_storage->setter);
  __Pyx_DECREF(__pyx_v_storage->setter);
  __pyx_v_storage->setter = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1091
 *         storage.getter = self.getter
 *         storage.setter = self.setter
 *         storage.alias_initial = 1             # <<<<<<<<<<<<<<
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):
 */
  __pyx_v_storage->alias_initial = 1;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.init_storage", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1093
 *         storage.alias_initial = 1
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         cdef Property oprop
 *         for prop in self.bind_objects:
 */

static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_5link_deps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_13AliasProperty_link_deps(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_name, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_Property *__pyx_v_oprop = 0;
  PyObject *__pyx_v_prop = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link_deps", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__link_deps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_13AliasProperty_5link_deps)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(((PyObject *)__pyx_v_name));
      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_name));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_name));
      __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 = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":1095
 *     cpdef link_deps(self, EventDispatcher obj, str name):
 *         cdef Property oprop
 *         for prop in self.bind_objects:             # <<<<<<<<<<<<<<
 *             oprop = getattr(obj.__class__, prop)
 *             oprop.bind(obj, self.trigger_change)
 */
  if (unlikely(((PyObject *)__pyx_v_self->bind_objects) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = ((PyObject *)__pyx_v_self->bind_objects); __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
  for (;;) {
    if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_COMPILING_IN_CPYTHON
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #endif
    __Pyx_XDECREF(__pyx_v_prop);
    __pyx_v_prop = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "kivy\properties.pyx":1096
 *         cdef Property oprop
 *         for prop in self.bind_objects:
 *             oprop = getattr(obj.__class__, prop)             # <<<<<<<<<<<<<<
 *             oprop.bind(obj, self.trigger_change)
 * 
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_GetAttr(__pyx_t_3, __pyx_v_prop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_4kivy_10properties_Property))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_XDECREF(((PyObject *)__pyx_v_oprop));
    __pyx_v_oprop = ((struct __pyx_obj_4kivy_10properties_Property *)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "kivy\properties.pyx":1097
 *         for prop in self.bind_objects:
 *             oprop = getattr(obj.__class__, prop)
 *             oprop.bind(obj, self.trigger_change)             # <<<<<<<<<<<<<<
 * 
 *     cpdef trigger_change(self, EventDispatcher obj, value):
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__trigger_change); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = ((struct __pyx_vtabstruct_4kivy_10properties_Property *)__pyx_v_oprop->__pyx_vtab)->bind(__pyx_v_oprop, __pyx_v_obj, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.link_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_oprop);
  __Pyx_XDECREF(__pyx_v_prop);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_5link_deps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_5link_deps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_name = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("link_deps (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__name,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("link_deps", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "link_deps") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_name = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("link_deps", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.AliasProperty.link_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_13AliasProperty_4link_deps(((struct __pyx_obj_4kivy_10properties_AliasProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_name);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1093
 *         storage.alias_initial = 1
 * 
 *     cpdef link_deps(self, EventDispatcher obj, str name):             # <<<<<<<<<<<<<<
 *         cdef Property oprop
 *         for prop in self.bind_objects:
 */

static PyObject *__pyx_pf_4kivy_10properties_13AliasProperty_4link_deps(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("link_deps", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_AliasProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.link_deps(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_name, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.link_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1099
 *             oprop.bind(obj, self.trigger_change)
 * 
 *     cpdef trigger_change(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.alias_initial = 1
 */

static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_7trigger_change(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_13AliasProperty_trigger_change(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_value, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_v_dvalue = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("trigger_change", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__trigger_change); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_13AliasProperty_7trigger_change)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      __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 = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":1100
 * 
 *     cpdef trigger_change(self, EventDispatcher obj, value):
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         ps.alias_initial = 1
 *         dvalue = self.get(obj)
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1101
 *     cpdef trigger_change(self, EventDispatcher obj, value):
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.alias_initial = 1             # <<<<<<<<<<<<<<
 *         dvalue = self.get(obj)
 *         if ps.value != dvalue:
 */
  __pyx_v_ps->alias_initial = 1;

  /* "kivy\properties.pyx":1102
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.alias_initial = 1
 *         dvalue = self.get(obj)             # <<<<<<<<<<<<<<
 *         if ps.value != dvalue:
 *             ps.value = dvalue
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_AliasProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_dvalue = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1103
 *         ps.alias_initial = 1
 *         dvalue = self.get(obj)
 *         if ps.value != dvalue:             # <<<<<<<<<<<<<<
 *             ps.value = dvalue
 *             self.dispatch(obj)
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_ps->value, __pyx_v_dvalue, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":1104
 *         dvalue = self.get(obj)
 *         if ps.value != dvalue:
 *             ps.value = dvalue             # <<<<<<<<<<<<<<
 *             self.dispatch(obj)
 * 
 */
    __Pyx_INCREF(__pyx_v_dvalue);
    __Pyx_GIVEREF(__pyx_v_dvalue);
    __Pyx_GOTREF(__pyx_v_ps->value);
    __Pyx_DECREF(__pyx_v_ps->value);
    __pyx_v_ps->value = __pyx_v_dvalue;

    /* "kivy\properties.pyx":1105
 *         if ps.value != dvalue:
 *             ps.value = dvalue
 *             self.dispatch(obj)             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
    __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_AliasProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.dispatch(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.trigger_change", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XDECREF(__pyx_v_dvalue);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_7trigger_change(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_7trigger_change(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("trigger_change (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("trigger_change", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trigger_change") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("trigger_change", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.AliasProperty.trigger_change", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_13AliasProperty_6trigger_change(((struct __pyx_obj_4kivy_10properties_AliasProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_value);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1099
 *             oprop.bind(obj, self.trigger_change)
 * 
 *     cpdef trigger_change(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         ps.alias_initial = 1
 */

static PyObject *__pyx_pf_4kivy_10properties_13AliasProperty_6trigger_change(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("trigger_change", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_AliasProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->trigger_change(__pyx_v_self, __pyx_v_obj, __pyx_v_value, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.trigger_change", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1107
 *             self.dispatch(obj)
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         return True
 * 
 */

static PyObject *__pyx_f_4kivy_10properties_13AliasProperty_check(CYTHON_UNUSED struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, CYTHON_UNUSED struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":1108
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     cpdef get(self, EventDispatcher obj):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1110
 *         return True
 * 
 *     cpdef get(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if self.use_cache:
 */

static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_9get(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_13AliasProperty_get(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__get); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_13AliasProperty_9get)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __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 = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":1111
 * 
 *     cpdef get(self, EventDispatcher obj):
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if self.use_cache:
 *             if ps.alias_initial:
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1112
 *     cpdef get(self, EventDispatcher obj):
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if self.use_cache:             # <<<<<<<<<<<<<<
 *             if ps.alias_initial:
 *                 ps.value = ps.getter(obj)
 */
  __pyx_t_4 = (__pyx_v_self->use_cache != 0);
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":1113
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if self.use_cache:
 *             if ps.alias_initial:             # <<<<<<<<<<<<<<
 *                 ps.value = ps.getter(obj)
 *                 ps.alias_initial = 0
 */
    __pyx_t_4 = (__pyx_v_ps->alias_initial != 0);
    if (__pyx_t_4) {

      /* "kivy\properties.pyx":1114
 *         if self.use_cache:
 *             if ps.alias_initial:
 *                 ps.value = ps.getter(obj)             # <<<<<<<<<<<<<<
 *                 ps.alias_initial = 0
 *             return ps.value
 */
      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __pyx_t_3 = PyObject_Call(__pyx_v_ps->getter, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_v_ps->value);
      __Pyx_DECREF(__pyx_v_ps->value);
      __pyx_v_ps->value = __pyx_t_3;
      __pyx_t_3 = 0;

      /* "kivy\properties.pyx":1115
 *             if ps.alias_initial:
 *                 ps.value = ps.getter(obj)
 *                 ps.alias_initial = 0             # <<<<<<<<<<<<<<
 *             return ps.value
 *         return ps.getter(obj)
 */
      __pyx_v_ps->alias_initial = 0;
      goto __pyx_L4;
    }
    __pyx_L4:;

    /* "kivy\properties.pyx":1116
 *                 ps.value = ps.getter(obj)
 *                 ps.alias_initial = 0
 *             return ps.value             # <<<<<<<<<<<<<<
 *         return ps.getter(obj)
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_ps->value);
    __pyx_r = __pyx_v_ps->value;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":1117
 *                 ps.alias_initial = 0
 *             return ps.value
 *         return ps.getter(obj)             # <<<<<<<<<<<<<<
 * 
 *     cpdef set(self, EventDispatcher obj, value):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_obj));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
  __pyx_t_1 = PyObject_Call(__pyx_v_ps->getter, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_9get(PyObject *__pyx_v_self, PyObject *__pyx_v_obj); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_9get(PyObject *__pyx_v_self, PyObject *__pyx_v_obj) {
  CYTHON_UNUSED int __pyx_lineno = 0;
  CYTHON_UNUSED const char *__pyx_filename = NULL;
  CYTHON_UNUSED int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_13AliasProperty_8get(((struct __pyx_obj_4kivy_10properties_AliasProperty *)__pyx_v_self), ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)__pyx_v_obj));
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1110
 *         return True
 * 
 *     cpdef get(self, EventDispatcher obj):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if self.use_cache:
 */

static PyObject *__pyx_pf_4kivy_10properties_13AliasProperty_8get(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_AliasProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1119
 *         return ps.getter(obj)
 * 
 *     cpdef set(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.setter(obj, value):
 */

static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_11set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_4kivy_10properties_13AliasProperty_set(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value, int __pyx_skip_dispatch) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *__pyx_v_ps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__set); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4kivy_10properties_13AliasProperty_11set)) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(((PyObject *)__pyx_v_obj));
      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_obj));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
      __Pyx_INCREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      __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 = 1119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "kivy\properties.pyx":1120
 * 
 *     cpdef set(self, EventDispatcher obj, value):
 *         cdef PropertyStorage ps = obj.__storage[self._name]             # <<<<<<<<<<<<<<
 *         if ps.setter(obj, value):
 *             ps.value = self.get(obj)
 */
  if (unlikely(((PyObject *)__pyx_v_obj->__pyx___storage) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_obj->__pyx___storage), ((PyObject *)__pyx_v_self->__pyx_base._name)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4kivy_10properties_PropertyStorage))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_ps = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "kivy\properties.pyx":1121
 *     cpdef set(self, EventDispatcher obj, value):
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.setter(obj, value):             # <<<<<<<<<<<<<<
 *             ps.value = self.get(obj)
 *             self.dispatch(obj)
 */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_obj));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_obj));
  __Pyx_INCREF(__pyx_v_value);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __pyx_t_3 = PyObject_Call(__pyx_v_ps->setter, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":1122
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.setter(obj, value):
 *             ps.value = self.get(obj)             # <<<<<<<<<<<<<<
 *             self.dispatch(obj)
 * 
 */
    __pyx_t_3 = ((struct __pyx_vtabstruct_4kivy_10properties_AliasProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_ps->value);
    __Pyx_DECREF(__pyx_v_ps->value);
    __pyx_v_ps->value = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "kivy\properties.pyx":1123
 *         if ps.setter(obj, value):
 *             ps.value = self.get(obj)
 *             self.dispatch(obj)             # <<<<<<<<<<<<<<
 * 
 * cdef class VariableListProperty(Property):
 */
    __pyx_t_3 = ((struct __pyx_vtabstruct_4kivy_10properties_AliasProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.dispatch(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_11set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_13AliasProperty_11set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_obj = ((struct __pyx_obj_4kivy_6_event_EventDispatcher *)values[0]);
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("kivy.properties.AliasProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_4kivy_6_event_EventDispatcher, 1, "obj", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_4kivy_10properties_13AliasProperty_10set(((struct __pyx_obj_4kivy_10properties_AliasProperty *)__pyx_v_self), __pyx_v_obj, __pyx_v_value);
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1119
 *         return ps.getter(obj)
 * 
 *     cpdef set(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         cdef PropertyStorage ps = obj.__storage[self._name]
 *         if ps.setter(obj, value):
 */

static PyObject *__pyx_pf_4kivy_10properties_13AliasProperty_10set(struct __pyx_obj_4kivy_10properties_AliasProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_4kivy_10properties_AliasProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.AliasProperty.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_20VariableListProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_4kivy_10properties_20VariableListProperty_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_defaultvalue = 0;
  PyObject *__pyx_v_length = 0;
  PyObject *__pyx_v_kw = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  __pyx_v_kw = PyDict_New(); if (unlikely(!__pyx_v_kw)) return -1;
  __Pyx_GOTREF(__pyx_v_kw);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__defaultvalue,&__pyx_n_s__length,0};
    PyObject* values[2] = {0,0};

    /* "kivy\properties.pyx":1147
 *     cdef public int length
 * 
 *     def __init__(self, defaultvalue=None, length=4, **kw):             # <<<<<<<<<<<<<<
 *         if length == 4:
 *             defaultvalue = defaultvalue or [0, 0, 0, 0]
 */
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)__pyx_int_4);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__defaultvalue);
          if (value) { values[0] = value; kw_args--; }
        }
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__length);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_defaultvalue = values[0];
    __pyx_v_length = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
  __Pyx_AddTraceback("kivy.properties.VariableListProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4kivy_10properties_20VariableListProperty___init__(((struct __pyx_obj_4kivy_10properties_VariableListProperty *)__pyx_v_self), __pyx_v_defaultvalue, __pyx_v_length, __pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_4kivy_10properties_20VariableListProperty___init__(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self, PyObject *__pyx_v_defaultvalue, PyObject *__pyx_v_length, PyObject *__pyx_v_kw) {
  PyObject *__pyx_v_err = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF(__pyx_v_defaultvalue);

  /* "kivy\properties.pyx":1148
 * 
 *     def __init__(self, defaultvalue=None, length=4, **kw):
 *         if length == 4:             # <<<<<<<<<<<<<<
 *             defaultvalue = defaultvalue or [0, 0, 0, 0]
 *         elif length == 2:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_length, __pyx_int_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":1149
 *     def __init__(self, defaultvalue=None, length=4, **kw):
 *         if length == 4:
 *             defaultvalue = defaultvalue or [0, 0, 0, 0]             # <<<<<<<<<<<<<<
 *         elif length == 2:
 *             defaultvalue = defaultvalue or [0, 0]
 */
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_defaultvalue); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (!__pyx_t_2) {
      __pyx_t_1 = PyList_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_int_0);
      PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      __Pyx_INCREF(__pyx_int_0);
      PyList_SET_ITEM(__pyx_t_1, 1, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      __Pyx_INCREF(__pyx_int_0);
      PyList_SET_ITEM(__pyx_t_1, 2, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      __Pyx_INCREF(__pyx_int_0);
      PyList_SET_ITEM(__pyx_t_1, 3, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      __pyx_t_3 = __pyx_t_1;
      __pyx_t_1 = 0;
    } else {
      __Pyx_INCREF(__pyx_v_defaultvalue);
      __pyx_t_3 = __pyx_v_defaultvalue;
    }
    __Pyx_DECREF(__pyx_v_defaultvalue);
    __pyx_v_defaultvalue = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L3;
  }

  /* "kivy\properties.pyx":1150
 *         if length == 4:
 *             defaultvalue = defaultvalue or [0, 0, 0, 0]
 *         elif length == 2:             # <<<<<<<<<<<<<<
 *             defaultvalue = defaultvalue or [0, 0]
 *         else:
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_length, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":1151
 *             defaultvalue = defaultvalue or [0, 0, 0, 0]
 *         elif length == 2:
 *             defaultvalue = defaultvalue or [0, 0]             # <<<<<<<<<<<<<<
 *         else:
 *             err = 'VariableListProperty requires a length of 2 or 4 (got %r)'
 */
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_defaultvalue); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (!__pyx_t_2) {
      __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_int_0);
      PyList_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      __Pyx_INCREF(__pyx_int_0);
      PyList_SET_ITEM(__pyx_t_3, 1, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
    } else {
      __Pyx_INCREF(__pyx_v_defaultvalue);
      __pyx_t_1 = __pyx_v_defaultvalue;
    }
    __Pyx_DECREF(__pyx_v_defaultvalue);
    __pyx_v_defaultvalue = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "kivy\properties.pyx":1153
 *             defaultvalue = defaultvalue or [0, 0]
 *         else:
 *             err = 'VariableListProperty requires a length of 2 or 4 (got %r)'             # <<<<<<<<<<<<<<
 *             raise ValueError(err % length)
 * 
 */
    __Pyx_INCREF(((PyObject *)__pyx_kp_s_21));
    __pyx_v_err = ((PyObject *)__pyx_kp_s_21);

    /* "kivy\properties.pyx":1154
 *         else:
 *             err = 'VariableListProperty requires a length of 2 or 4 (got %r)'
 *             raise ValueError(err % length)             # <<<<<<<<<<<<<<
 * 
 *         self.length = length
 */
    __pyx_t_1 = PyNumber_Remainder(__pyx_v_err, __pyx_v_length); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":1156
 *             raise ValueError(err % length)
 * 
 *         self.length = length             # <<<<<<<<<<<<<<
 *         super(VariableListProperty, self).__init__(defaultvalue, **kw)
 * 
 */
  __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_v_length); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->length = __pyx_t_4;

  /* "kivy\properties.pyx":1157
 * 
 *         self.length = length
 *         super(VariableListProperty, self).__init__(defaultvalue, **kw)             # <<<<<<<<<<<<<<
 * 
 *     cdef check(self, EventDispatcher obj, value):
 */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_VariableListProperty)));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_VariableListProperty)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4kivy_10properties_VariableListProperty)));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __pyx_t_3 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s____init__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_defaultvalue);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_defaultvalue);
  __Pyx_GIVEREF(__pyx_v_defaultvalue);
  __pyx_t_5 = ((PyObject *)__pyx_v_kw);
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.VariableListProperty.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XDECREF(__pyx_v_defaultvalue);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1159
 *         super(VariableListProperty, self).__init__(defaultvalue, **kw)
 * 
 *     cdef check(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         if Property.check(self, obj, value):
 *             return True
 */

static PyObject *__pyx_f_4kivy_10properties_20VariableListProperty_check(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_err = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("check", 0);

  /* "kivy\properties.pyx":1160
 * 
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):             # <<<<<<<<<<<<<<
 *             return True
 *         if type(value) not in (int, float, long, list, tuple, str):
 */
  __pyx_t_1 = __pyx_vtabptr_4kivy_10properties_Property->check(((struct __pyx_obj_4kivy_10properties_Property *)__pyx_v_self), __pyx_v_obj, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":1161
 *     cdef check(self, EventDispatcher obj, value):
 *         if Property.check(self, obj, value):
 *             return True             # <<<<<<<<<<<<<<
 *         if type(value) not in (int, float, long, list, tuple, str):
 *             err = '%s.%s accepts only int/float/long/list/tuple/str (got %r)'
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":1162
 *         if Property.check(self, obj, value):
 *             return True
 *         if type(value) not in (int, float, long, list, tuple, str):             # <<<<<<<<<<<<<<
 *             err = '%s.%s accepts only int/float/long/list/tuple/str (got %r)'
 *             raise ValueError(err % (obj.__class__.__name__, self.name, value))
 */
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_value)));
  __pyx_t_1 = ((PyObject *)Py_TYPE(__pyx_v_value));
  __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_t_1), ((PyObject *)((PyObject*)(&PyInt_Type))), Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (((int)__pyx_t_2)) {
    __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_t_1), ((PyObject *)((PyObject*)(&PyFloat_Type))), Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = ((int)__pyx_t_4);
  } else {
    __pyx_t_5 = ((int)__pyx_t_2);
  }
  if (__pyx_t_5) {
    __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_t_1), ((PyObject *)((PyObject*)(&PyLong_Type))), Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = ((int)__pyx_t_2);
  } else {
    __pyx_t_4 = __pyx_t_5;
  }
  if (__pyx_t_4) {
    __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_t_1), ((PyObject *)((PyObject*)(&PyList_Type))), Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = ((int)__pyx_t_5);
  } else {
    __pyx_t_2 = __pyx_t_4;
  }
  if (__pyx_t_2) {
    __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_t_1), ((PyObject *)((PyObject*)(&PyTuple_Type))), Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = ((int)__pyx_t_4);
  } else {
    __pyx_t_5 = __pyx_t_2;
  }
  if (__pyx_t_5) {
    __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_t_1), ((PyObject *)((PyObject*)(&PyString_Type))), Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = ((int)__pyx_t_2);
  } else {
    __pyx_t_4 = __pyx_t_5;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "kivy\properties.pyx":1163
 *             return True
 *         if type(value) not in (int, float, long, list, tuple, str):
 *             err = '%s.%s accepts only int/float/long/list/tuple/str (got %r)'             # <<<<<<<<<<<<<<
 *             raise ValueError(err % (obj.__class__.__name__, self.name, value))
 * 
 */
    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
    __pyx_v_err = ((PyObject *)__pyx_kp_s_22);

    /* "kivy\properties.pyx":1164
 *         if type(value) not in (int, float, long, list, tuple, str):
 *             err = '%s.%s accepts only int/float/long/list/tuple/str (got %r)'
 *             raise ValueError(err % (obj.__class__.__name__, self.name, value))             # <<<<<<<<<<<<<<
 * 
 *     cdef convert(self, EventDispatcher obj, x):
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____name__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_value);
    __Pyx_GIVEREF(__pyx_v_value);
    __pyx_t_3 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Remainder(__pyx_v_err, ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("kivy.properties.VariableListProperty.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1166
 *             raise ValueError(err % (obj.__class__.__name__, self.name, value))
 * 
 *     cdef convert(self, EventDispatcher obj, x):             # <<<<<<<<<<<<<<
 *         if x is None:
 *             return x
 */

static PyObject *__pyx_f_4kivy_10properties_20VariableListProperty_convert(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_x) {
  PyObject *__pyx_v_tp = NULL;
  PyObject *__pyx_v_l = NULL;
  PyObject *__pyx_v_y = NULL;
  PyObject *__pyx_v_z = NULL;
  PyObject *__pyx_v_err = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  int __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("convert", 0);

  /* "kivy\properties.pyx":1167
 * 
 *     cdef convert(self, EventDispatcher obj, x):
 *         if x is None:             # <<<<<<<<<<<<<<
 *             return x
 * 
 */
  __pyx_t_1 = (__pyx_v_x == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":1168
 *     cdef convert(self, EventDispatcher obj, x):
 *         if x is None:
 *             return x             # <<<<<<<<<<<<<<
 * 
 *         tp = type(x)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_x);
    __pyx_r = __pyx_v_x;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":1170
 *             return x
 * 
 *         tp = type(x)             # <<<<<<<<<<<<<<
 *         if tp is list or tp is tuple:
 *             l = len(x)
 */
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_x)));
  __pyx_v_tp = ((PyObject*)((PyObject *)Py_TYPE(__pyx_v_x)));

  /* "kivy\properties.pyx":1171
 * 
 *         tp = type(x)
 *         if tp is list or tp is tuple:             # <<<<<<<<<<<<<<
 *             l = len(x)
 *             if l == 1:
 */
  __pyx_t_2 = (__pyx_v_tp == ((PyObject*)(&PyList_Type)));
  if (!(__pyx_t_2 != 0)) {
    __pyx_t_1 = (__pyx_v_tp == ((PyObject*)(&PyTuple_Type)));
    __pyx_t_3 = (__pyx_t_1 != 0);
  } else {
    __pyx_t_3 = (__pyx_t_2 != 0);
  }
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":1172
 *         tp = type(x)
 *         if tp is list or tp is tuple:
 *             l = len(x)             # <<<<<<<<<<<<<<
 *             if l == 1:
 *                 y = self._convert_numeric(obj, x[0])
 */
    __pyx_t_4 = PyObject_Length(__pyx_v_x); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_v_l = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "kivy\properties.pyx":1173
 *         if tp is list or tp is tuple:
 *             l = len(x)
 *             if l == 1:             # <<<<<<<<<<<<<<
 *                 y = self._convert_numeric(obj, x[0])
 *                 if self.length == 4:
 */
    __pyx_t_5 = PyObject_RichCompare(__pyx_v_l, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_3) {

      /* "kivy\properties.pyx":1174
 *             l = len(x)
 *             if l == 1:
 *                 y = self._convert_numeric(obj, x[0])             # <<<<<<<<<<<<<<
 *                 if self.length == 4:
 *                     return [y, y, y, y]
 */
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_x, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = ((struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->_convert_numeric(__pyx_v_self, __pyx_v_obj, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_y = __pyx_t_6;
      __pyx_t_6 = 0;

      /* "kivy\properties.pyx":1177
 *                 if self.length == 4:
 *                     return [y, y, y, y]
 *                 elif self.length == 2:             # <<<<<<<<<<<<<<
 *                     return [y, y]
 *             elif l == 2:
 */
      switch (__pyx_v_self->length) {

        /* "kivy\properties.pyx":1175
 *             if l == 1:
 *                 y = self._convert_numeric(obj, x[0])
 *                 if self.length == 4:             # <<<<<<<<<<<<<<
 *                     return [y, y, y, y]
 *                 elif self.length == 2:
 */
        case 4:

        /* "kivy\properties.pyx":1176
 *                 y = self._convert_numeric(obj, x[0])
 *                 if self.length == 4:
 *                     return [y, y, y, y]             # <<<<<<<<<<<<<<
 *                 elif self.length == 2:
 *                     return [y, y]
 */
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_6 = PyList_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_v_y);
        PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_y);
        __Pyx_GIVEREF(__pyx_v_y);
        __Pyx_INCREF(__pyx_v_y);
        PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_y);
        __Pyx_GIVEREF(__pyx_v_y);
        __Pyx_INCREF(__pyx_v_y);
        PyList_SET_ITEM(__pyx_t_6, 2, __pyx_v_y);
        __Pyx_GIVEREF(__pyx_v_y);
        __Pyx_INCREF(__pyx_v_y);
        PyList_SET_ITEM(__pyx_t_6, 3, __pyx_v_y);
        __Pyx_GIVEREF(__pyx_v_y);
        __pyx_r = ((PyObject *)__pyx_t_6);
        __pyx_t_6 = 0;
        goto __pyx_L0;
        break;

        /* "kivy\properties.pyx":1177
 *                 if self.length == 4:
 *                     return [y, y, y, y]
 *                 elif self.length == 2:             # <<<<<<<<<<<<<<
 *                     return [y, y]
 *             elif l == 2:
 */
        case 2:

        /* "kivy\properties.pyx":1178
 *                     return [y, y, y, y]
 *                 elif self.length == 2:
 *                     return [y, y]             # <<<<<<<<<<<<<<
 *             elif l == 2:
 *                 if x[1] in NUMERIC_FORMATS:
 */
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_v_y);
        PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_y);
        __Pyx_GIVEREF(__pyx_v_y);
        __Pyx_INCREF(__pyx_v_y);
        PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_y);
        __Pyx_GIVEREF(__pyx_v_y);
        __pyx_r = ((PyObject *)__pyx_t_6);
        __pyx_t_6 = 0;
        goto __pyx_L0;
        break;
      }
      goto __pyx_L5;
    }

    /* "kivy\properties.pyx":1179
 *                 elif self.length == 2:
 *                     return [y, y]
 *             elif l == 2:             # <<<<<<<<<<<<<<
 *                 if x[1] in NUMERIC_FORMATS:
 *                     # defaultvalue is a list or tuple representing one value
 */
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_l, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_3) {

      /* "kivy\properties.pyx":1180
 *                     return [y, y]
 *             elif l == 2:
 *                 if x[1] in NUMERIC_FORMATS:             # <<<<<<<<<<<<<<
 *                     # defaultvalue is a list or tuple representing one value
 *                     y = self._convert_numeric(obj, x)
 */
      __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_x, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__NUMERIC_FORMATS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = (__Pyx_PySequence_Contains(__pyx_t_6, __pyx_t_5, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {

        /* "kivy\properties.pyx":1182
 *                 if x[1] in NUMERIC_FORMATS:
 *                     # defaultvalue is a list or tuple representing one value
 *                     y = self._convert_numeric(obj, x)             # <<<<<<<<<<<<<<
 *                     if self.length == 4:
 *                         return [y, y, y, y]
 */
        __pyx_t_5 = ((struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->_convert_numeric(__pyx_v_self, __pyx_v_obj, __pyx_v_x); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_v_y = __pyx_t_5;
        __pyx_t_5 = 0;

        /* "kivy\properties.pyx":1185
 *                     if self.length == 4:
 *                         return [y, y, y, y]
 *                     elif self.length == 2:             # <<<<<<<<<<<<<<
 *                         return [y, y]
 *                 else:
 */
        switch (__pyx_v_self->length) {

          /* "kivy\properties.pyx":1183
 *                     # defaultvalue is a list or tuple representing one value
 *                     y = self._convert_numeric(obj, x)
 *                     if self.length == 4:             # <<<<<<<<<<<<<<
 *                         return [y, y, y, y]
 *                     elif self.length == 2:
 */
          case 4:

          /* "kivy\properties.pyx":1184
 *                     y = self._convert_numeric(obj, x)
 *                     if self.length == 4:
 *                         return [y, y, y, y]             # <<<<<<<<<<<<<<
 *                     elif self.length == 2:
 *                         return [y, y]
 */
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_5 = PyList_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_v_y);
          PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_y);
          __Pyx_GIVEREF(__pyx_v_y);
          __Pyx_INCREF(__pyx_v_y);
          PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_y);
          __Pyx_GIVEREF(__pyx_v_y);
          __Pyx_INCREF(__pyx_v_y);
          PyList_SET_ITEM(__pyx_t_5, 2, __pyx_v_y);
          __Pyx_GIVEREF(__pyx_v_y);
          __Pyx_INCREF(__pyx_v_y);
          PyList_SET_ITEM(__pyx_t_5, 3, __pyx_v_y);
          __Pyx_GIVEREF(__pyx_v_y);
          __pyx_r = ((PyObject *)__pyx_t_5);
          __pyx_t_5 = 0;
          goto __pyx_L0;
          break;

          /* "kivy\properties.pyx":1185
 *                     if self.length == 4:
 *                         return [y, y, y, y]
 *                     elif self.length == 2:             # <<<<<<<<<<<<<<
 *                         return [y, y]
 *                 else:
 */
          case 2:

          /* "kivy\properties.pyx":1186
 *                         return [y, y, y, y]
 *                     elif self.length == 2:
 *                         return [y, y]             # <<<<<<<<<<<<<<
 *                 else:
 *                     y = self._convert_numeric(obj, x[0])
 */
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_v_y);
          PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_y);
          __Pyx_GIVEREF(__pyx_v_y);
          __Pyx_INCREF(__pyx_v_y);
          PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_y);
          __Pyx_GIVEREF(__pyx_v_y);
          __pyx_r = ((PyObject *)__pyx_t_5);
          __pyx_t_5 = 0;
          goto __pyx_L0;
          break;
        }
        goto __pyx_L6;
      }
      /*else*/ {

        /* "kivy\properties.pyx":1188
 *                         return [y, y]
 *                 else:
 *                     y = self._convert_numeric(obj, x[0])             # <<<<<<<<<<<<<<
 *                     z = self._convert_numeric(obj, x[1])
 *                     if self.length == 4:
 */
        __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_x, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = ((struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->_convert_numeric(__pyx_v_self, __pyx_v_obj, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_v_y = __pyx_t_6;
        __pyx_t_6 = 0;

        /* "kivy\properties.pyx":1189
 *                 else:
 *                     y = self._convert_numeric(obj, x[0])
 *                     z = self._convert_numeric(obj, x[1])             # <<<<<<<<<<<<<<
 *                     if self.length == 4:
 *                         return [y, z, y, z]
 */
        __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_x, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = ((struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->_convert_numeric(__pyx_v_self, __pyx_v_obj, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_z = __pyx_t_5;
        __pyx_t_5 = 0;

        /* "kivy\properties.pyx":1192
 *                     if self.length == 4:
 *                         return [y, z, y, z]
 *                     elif self.length == 2:             # <<<<<<<<<<<<<<
 *                         return [y, z]
 *             elif l == 4:
 */
        switch (__pyx_v_self->length) {

          /* "kivy\properties.pyx":1190
 *                     y = self._convert_numeric(obj, x[0])
 *                     z = self._convert_numeric(obj, x[1])
 *                     if self.length == 4:             # <<<<<<<<<<<<<<
 *                         return [y, z, y, z]
 *                     elif self.length == 2:
 */
          case 4:

          /* "kivy\properties.pyx":1191
 *                     z = self._convert_numeric(obj, x[1])
 *                     if self.length == 4:
 *                         return [y, z, y, z]             # <<<<<<<<<<<<<<
 *                     elif self.length == 2:
 *                         return [y, z]
 */
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_5 = PyList_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_v_y);
          PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_y);
          __Pyx_GIVEREF(__pyx_v_y);
          __Pyx_INCREF(__pyx_v_z);
          PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_z);
          __Pyx_GIVEREF(__pyx_v_z);
          __Pyx_INCREF(__pyx_v_y);
          PyList_SET_ITEM(__pyx_t_5, 2, __pyx_v_y);
          __Pyx_GIVEREF(__pyx_v_y);
          __Pyx_INCREF(__pyx_v_z);
          PyList_SET_ITEM(__pyx_t_5, 3, __pyx_v_z);
          __Pyx_GIVEREF(__pyx_v_z);
          __pyx_r = ((PyObject *)__pyx_t_5);
          __pyx_t_5 = 0;
          goto __pyx_L0;
          break;

          /* "kivy\properties.pyx":1192
 *                     if self.length == 4:
 *                         return [y, z, y, z]
 *                     elif self.length == 2:             # <<<<<<<<<<<<<<
 *                         return [y, z]
 *             elif l == 4:
 */
          case 2:

          /* "kivy\properties.pyx":1193
 *                         return [y, z, y, z]
 *                     elif self.length == 2:
 *                         return [y, z]             # <<<<<<<<<<<<<<
 *             elif l == 4:
 *                 if self.length == 4:
 */
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_v_y);
          PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_y);
          __Pyx_GIVEREF(__pyx_v_y);
          __Pyx_INCREF(__pyx_v_z);
          PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_z);
          __Pyx_GIVEREF(__pyx_v_z);
          __pyx_r = ((PyObject *)__pyx_t_5);
          __pyx_t_5 = 0;
          goto __pyx_L0;
          break;
        }
      }
      __pyx_L6:;
      goto __pyx_L5;
    }

    /* "kivy\properties.pyx":1194
 *                     elif self.length == 2:
 *                         return [y, z]
 *             elif l == 4:             # <<<<<<<<<<<<<<
 *                 if self.length == 4:
 *                     return [self._convert_numeric(obj, y) for y in x]
 */
    __pyx_t_5 = PyObject_RichCompare(__pyx_v_l, __pyx_int_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_2) {

      /* "kivy\properties.pyx":1195
 *                         return [y, z]
 *             elif l == 4:
 *                 if self.length == 4:             # <<<<<<<<<<<<<<
 *                     return [self._convert_numeric(obj, y) for y in x]
 *                 else:
 */
      __pyx_t_2 = ((__pyx_v_self->length == 4) != 0);
      if (__pyx_t_2) {

        /* "kivy\properties.pyx":1196
 *             elif l == 4:
 *                 if self.length == 4:
 *                     return [self._convert_numeric(obj, y) for y in x]             # <<<<<<<<<<<<<<
 *                 else:
 *                     err = '%s.%s must have 1 or 2 components (got %r)'
 */
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_5);
        if (PyList_CheckExact(__pyx_v_x) || PyTuple_CheckExact(__pyx_v_x)) {
          __pyx_t_6 = __pyx_v_x; __Pyx_INCREF(__pyx_t_6); __pyx_t_4 = 0;
          __pyx_t_7 = NULL;
        } else {
          __pyx_t_4 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_x); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
        }
        for (;;) {
          if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_6)) {
            if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_6)) break;
            #if CYTHON_COMPILING_IN_CPYTHON
            __pyx_t_8 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            #else
            __pyx_t_8 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            #endif
          } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_6)) {
            if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
            #if CYTHON_COMPILING_IN_CPYTHON
            __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            #else
            __pyx_t_8 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            #endif
          } else {
            __pyx_t_8 = __pyx_t_7(__pyx_t_6);
            if (unlikely(!__pyx_t_8)) {
              if (PyErr_Occurred()) {
                if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
                else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_XDECREF(__pyx_v_y);
          __pyx_v_y = __pyx_t_8;
          __pyx_t_8 = 0;
          __pyx_t_8 = ((struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->_convert_numeric(__pyx_v_self, __pyx_v_obj, __pyx_v_y); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_8);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_8))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_r = ((PyObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;
        goto __pyx_L7;
      }
      /*else*/ {

        /* "kivy\properties.pyx":1198
 *                     return [self._convert_numeric(obj, y) for y in x]
 *                 else:
 *                     err = '%s.%s must have 1 or 2 components (got %r)'             # <<<<<<<<<<<<<<
 *                     raise ValueError(err % (obj.__class__.__name__,
 *                         self.name, x))
 */
        __Pyx_INCREF(((PyObject *)__pyx_kp_s_23));
        __pyx_v_err = ((PyObject *)__pyx_kp_s_23);

        /* "kivy\properties.pyx":1199
 *                 else:
 *                     err = '%s.%s must have 1 or 2 components (got %r)'
 *                     raise ValueError(err % (obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                         self.name, x))
 *             else:
 */
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s____name__); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

        /* "kivy\properties.pyx":1200
 *                     err = '%s.%s must have 1 or 2 components (got %r)'
 *                     raise ValueError(err % (obj.__class__.__name__,
 *                         self.name, x))             # <<<<<<<<<<<<<<
 *             else:
 *                 if self.length == 4:
 */
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_v_x);
        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_x);
        __Pyx_GIVEREF(__pyx_v_x);
        __pyx_t_6 = 0;
        __pyx_t_5 = 0;
        __pyx_t_5 = PyNumber_Remainder(__pyx_v_err, ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
        __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_L7:;
      goto __pyx_L5;
    }
    /*else*/ {

      /* "kivy\properties.pyx":1204
 *                 if self.length == 4:
 *                     err = '%s.%s must have 1, 2 or 4 components (got %r)'
 *                 elif self.length == 2:             # <<<<<<<<<<<<<<
 *                     err = '%s.%s must have 1 or 2 components (got %r)'
 *                 raise ValueError(err % (obj.__class__.__name__, self.name, x))
 */
      switch (__pyx_v_self->length) {

        /* "kivy\properties.pyx":1202
 *                         self.name, x))
 *             else:
 *                 if self.length == 4:             # <<<<<<<<<<<<<<
 *                     err = '%s.%s must have 1, 2 or 4 components (got %r)'
 *                 elif self.length == 2:
 */
        case 4:

        /* "kivy\properties.pyx":1203
 *             else:
 *                 if self.length == 4:
 *                     err = '%s.%s must have 1, 2 or 4 components (got %r)'             # <<<<<<<<<<<<<<
 *                 elif self.length == 2:
 *                     err = '%s.%s must have 1 or 2 components (got %r)'
 */
        __Pyx_INCREF(((PyObject *)__pyx_kp_s_24));
        __pyx_v_err = ((PyObject *)__pyx_kp_s_24);
        break;

        /* "kivy\properties.pyx":1204
 *                 if self.length == 4:
 *                     err = '%s.%s must have 1, 2 or 4 components (got %r)'
 *                 elif self.length == 2:             # <<<<<<<<<<<<<<
 *                     err = '%s.%s must have 1 or 2 components (got %r)'
 *                 raise ValueError(err % (obj.__class__.__name__, self.name, x))
 */
        case 2:

        /* "kivy\properties.pyx":1205
 *                     err = '%s.%s must have 1, 2 or 4 components (got %r)'
 *                 elif self.length == 2:
 *                     err = '%s.%s must have 1 or 2 components (got %r)'             # <<<<<<<<<<<<<<
 *                 raise ValueError(err % (obj.__class__.__name__, self.name, x))
 *         elif tp is int or tp is long or tp is float or tp is str:
 */
        __Pyx_INCREF(((PyObject *)__pyx_kp_s_23));
        __pyx_v_err = ((PyObject *)__pyx_kp_s_23);
        break;
      }

      /* "kivy\properties.pyx":1206
 *                 elif self.length == 2:
 *                     err = '%s.%s must have 1 or 2 components (got %r)'
 *                 raise ValueError(err % (obj.__class__.__name__, self.name, x))             # <<<<<<<<<<<<<<
 *         elif tp is int or tp is long or tp is float or tp is str:
 *             y = self._convert_numeric(obj, x)
 */
      if (unlikely(!__pyx_v_err)) { __Pyx_RaiseUnboundLocalError("err"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s____name__); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_x);
      PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_x);
      __Pyx_GIVEREF(__pyx_v_x);
      __pyx_t_8 = 0;
      __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_Remainder(__pyx_v_err, ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_L5:;
    goto __pyx_L4;
  }

  /* "kivy\properties.pyx":1207
 *                     err = '%s.%s must have 1 or 2 components (got %r)'
 *                 raise ValueError(err % (obj.__class__.__name__, self.name, x))
 *         elif tp is int or tp is long or tp is float or tp is str:             # <<<<<<<<<<<<<<
 *             y = self._convert_numeric(obj, x)
 *             if self.length == 4:
 */
  __pyx_t_2 = (__pyx_v_tp == ((PyObject*)(&PyInt_Type)));
  if (!(__pyx_t_2 != 0)) {
    __pyx_t_3 = (__pyx_v_tp == ((PyObject*)(&PyLong_Type)));
    if (!(__pyx_t_3 != 0)) {
      __pyx_t_1 = (__pyx_v_tp == ((PyObject*)(&PyFloat_Type)));
      if (!(__pyx_t_1 != 0)) {
        __pyx_t_9 = (__pyx_v_tp == ((PyObject*)(&PyString_Type)));
        __pyx_t_10 = (__pyx_t_9 != 0);
      } else {
        __pyx_t_10 = (__pyx_t_1 != 0);
      }
      __pyx_t_1 = __pyx_t_10;
    } else {
      __pyx_t_1 = (__pyx_t_3 != 0);
    }
    __pyx_t_3 = __pyx_t_1;
  } else {
    __pyx_t_3 = (__pyx_t_2 != 0);
  }
  if (__pyx_t_3) {

    /* "kivy\properties.pyx":1208
 *                 raise ValueError(err % (obj.__class__.__name__, self.name, x))
 *         elif tp is int or tp is long or tp is float or tp is str:
 *             y = self._convert_numeric(obj, x)             # <<<<<<<<<<<<<<
 *             if self.length == 4:
 *                 return [y, y, y, y]
 */
    __pyx_t_5 = ((struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->_convert_numeric(__pyx_v_self, __pyx_v_obj, __pyx_v_x); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_v_y = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "kivy\properties.pyx":1211
 *             if self.length == 4:
 *                 return [y, y, y, y]
 *             elif self.length == 2:             # <<<<<<<<<<<<<<
 *                 return [y, y]
 *         else:
 */
    switch (__pyx_v_self->length) {

      /* "kivy\properties.pyx":1209
 *         elif tp is int or tp is long or tp is float or tp is str:
 *             y = self._convert_numeric(obj, x)
 *             if self.length == 4:             # <<<<<<<<<<<<<<
 *                 return [y, y, y, y]
 *             elif self.length == 2:
 */
      case 4:

      /* "kivy\properties.pyx":1210
 *             y = self._convert_numeric(obj, x)
 *             if self.length == 4:
 *                 return [y, y, y, y]             # <<<<<<<<<<<<<<
 *             elif self.length == 2:
 *                 return [y, y]
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_5 = PyList_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_y);
      PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_y);
      __Pyx_GIVEREF(__pyx_v_y);
      __Pyx_INCREF(__pyx_v_y);
      PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_y);
      __Pyx_GIVEREF(__pyx_v_y);
      __Pyx_INCREF(__pyx_v_y);
      PyList_SET_ITEM(__pyx_t_5, 2, __pyx_v_y);
      __Pyx_GIVEREF(__pyx_v_y);
      __Pyx_INCREF(__pyx_v_y);
      PyList_SET_ITEM(__pyx_t_5, 3, __pyx_v_y);
      __Pyx_GIVEREF(__pyx_v_y);
      __pyx_r = ((PyObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;
      break;

      /* "kivy\properties.pyx":1211
 *             if self.length == 4:
 *                 return [y, y, y, y]
 *             elif self.length == 2:             # <<<<<<<<<<<<<<
 *                 return [y, y]
 *         else:
 */
      case 2:

      /* "kivy\properties.pyx":1212
 *                 return [y, y, y, y]
 *             elif self.length == 2:
 *                 return [y, y]             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError('%s.%s has an invalid format (got %r)' % (
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_y);
      PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_y);
      __Pyx_GIVEREF(__pyx_v_y);
      __Pyx_INCREF(__pyx_v_y);
      PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_y);
      __Pyx_GIVEREF(__pyx_v_y);
      __pyx_r = ((PyObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;
      break;
    }
    goto __pyx_L4;
  }
  /*else*/ {

    /* "kivy\properties.pyx":1215
 *         else:
 *             raise ValueError('%s.%s has an invalid format (got %r)' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name, x))
 * 
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s____name__); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "kivy\properties.pyx":1216
 *             raise ValueError('%s.%s has an invalid format (got %r)' % (
 *                 obj.__class__.__name__,
 *                 self.name, x))             # <<<<<<<<<<<<<<
 * 
 *     cdef _convert_numeric(self, EventDispatcher obj, x):
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    __pyx_t_6 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_25), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_5));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
    __pyx_t_5 = 0;
    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("kivy.properties.VariableListProperty.convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tp);
  __Pyx_XDECREF(__pyx_v_l);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XDECREF(__pyx_v_z);
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1218
 *                 self.name, x))
 * 
 *     cdef _convert_numeric(self, EventDispatcher obj, x):             # <<<<<<<<<<<<<<
 *         tp = type(x)
 *         if tp is int or tp is float or tp is long:
 */

static PyObject *__pyx_f_4kivy_10properties_20VariableListProperty__convert_numeric(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_x) {
  PyObject *__pyx_v_tp = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_convert_numeric", 0);

  /* "kivy\properties.pyx":1219
 * 
 *     cdef _convert_numeric(self, EventDispatcher obj, x):
 *         tp = type(x)             # <<<<<<<<<<<<<<
 *         if tp is int or tp is float or tp is long:
 *             return x
 */
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_x)));
  __pyx_v_tp = ((PyObject*)((PyObject *)Py_TYPE(__pyx_v_x)));

  /* "kivy\properties.pyx":1220
 *     cdef _convert_numeric(self, EventDispatcher obj, x):
 *         tp = type(x)
 *         if tp is int or tp is float or tp is long:             # <<<<<<<<<<<<<<
 *             return x
 *         if tp is tuple or tp is list:
 */
  __pyx_t_1 = (__pyx_v_tp == ((PyObject*)(&PyInt_Type)));
  if (!(__pyx_t_1 != 0)) {
    __pyx_t_2 = (__pyx_v_tp == ((PyObject*)(&PyFloat_Type)));
    if (!(__pyx_t_2 != 0)) {
      __pyx_t_3 = (__pyx_v_tp == ((PyObject*)(&PyLong_Type)));
      __pyx_t_4 = (__pyx_t_3 != 0);
    } else {
      __pyx_t_4 = (__pyx_t_2 != 0);
    }
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_2 = (__pyx_t_1 != 0);
  }
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":1221
 *         tp = type(x)
 *         if tp is int or tp is float or tp is long:
 *             return x             # <<<<<<<<<<<<<<
 *         if tp is tuple or tp is list:
 *             if len(x) != 2:
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_x);
    __pyx_r = __pyx_v_x;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "kivy\properties.pyx":1222
 *         if tp is int or tp is float or tp is long:
 *             return x
 *         if tp is tuple or tp is list:             # <<<<<<<<<<<<<<
 *             if len(x) != 2:
 *                 raise ValueError('%s.%s must have 2 components (got %r)' % (
 */
  __pyx_t_2 = (__pyx_v_tp == ((PyObject*)(&PyTuple_Type)));
  if (!(__pyx_t_2 != 0)) {
    __pyx_t_1 = (__pyx_v_tp == ((PyObject*)(&PyList_Type)));
    __pyx_t_4 = (__pyx_t_1 != 0);
  } else {
    __pyx_t_4 = (__pyx_t_2 != 0);
  }
  if (__pyx_t_4) {

    /* "kivy\properties.pyx":1223
 *             return x
 *         if tp is tuple or tp is list:
 *             if len(x) != 2:             # <<<<<<<<<<<<<<
 *                 raise ValueError('%s.%s must have 2 components (got %r)' % (
 *                     obj.__class__.__name__,
 */
    __pyx_t_5 = PyObject_Length(__pyx_v_x); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_4 = ((__pyx_t_5 != 2) != 0);
    if (__pyx_t_4) {

      /* "kivy\properties.pyx":1225
 *             if len(x) != 2:
 *                 raise ValueError('%s.%s must have 2 components (got %r)' % (
 *                     obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                     self.name, x))
 *             return self.parse_list(obj, x[0], <str>x[1])
 */
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s____name__); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

      /* "kivy\properties.pyx":1226
 *                 raise ValueError('%s.%s must have 2 components (got %r)' % (
 *                     obj.__class__.__name__,
 *                     self.name, x))             # <<<<<<<<<<<<<<
 *             return self.parse_list(obj, x[0], <str>x[1])
 *         elif tp is str:
 */
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_x);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_x);
      __Pyx_GIVEREF(__pyx_v_x);
      __pyx_t_7 = 0;
      __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_6), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_6));
      __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_6));
      __Pyx_GIVEREF(((PyObject *)__pyx_t_6));
      __pyx_t_6 = 0;
      __pyx_t_6 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L5;
    }
    __pyx_L5:;

    /* "kivy\properties.pyx":1227
 *                     obj.__class__.__name__,
 *                     self.name, x))
 *             return self.parse_list(obj, x[0], <str>x[1])             # <<<<<<<<<<<<<<
 *         elif tp is str:
 *             return self.parse_str(obj, x)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_x, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_x, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = PyFloat_FromDouble(((struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->parse_list(__pyx_v_self, __pyx_v_obj, __pyx_t_6, ((PyObject*)__pyx_t_8))); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
    goto __pyx_L4;
  }

  /* "kivy\properties.pyx":1228
 *                     self.name, x))
 *             return self.parse_list(obj, x[0], <str>x[1])
 *         elif tp is str:             # <<<<<<<<<<<<<<
 *             return self.parse_str(obj, x)
 *         else:
 */
  __pyx_t_4 = (__pyx_v_tp == ((PyObject*)(&PyString_Type)));
  __pyx_t_2 = (__pyx_t_4 != 0);
  if (__pyx_t_2) {

    /* "kivy\properties.pyx":1229
 *             return self.parse_list(obj, x[0], <str>x[1])
 *         elif tp is str:
 *             return self.parse_str(obj, x)             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError('%s.%s have an invalid format (got %r)' % (
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = PyFloat_FromDouble(((struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->parse_str(__pyx_v_self, __pyx_v_obj, __pyx_v_x)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
    goto __pyx_L4;
  }
  /*else*/ {

    /* "kivy\properties.pyx":1232
 *         else:
 *             raise ValueError('%s.%s have an invalid format (got %r)' % (
 *                 obj.__class__.__name__,             # <<<<<<<<<<<<<<
 *                 self.name, x))
 * 
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_n_s____class__); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s____name__); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

    /* "kivy\properties.pyx":1233
 *             raise ValueError('%s.%s have an invalid format (got %r)' % (
 *                 obj.__class__.__name__,
 *                 self.name, x))             # <<<<<<<<<<<<<<
 * 
 *     cdef float parse_str(self, EventDispatcher obj, value):
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__name); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    __pyx_t_8 = 0;
    __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_7));
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
    __pyx_t_7 = 0;
    __pyx_t_7 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_7, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("kivy.properties.VariableListProperty._convert_numeric", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1235
 *                 self.name, x))
 * 
 *     cdef float parse_str(self, EventDispatcher obj, value):             # <<<<<<<<<<<<<<
 *         return self.parse_list(obj, value[:-2], <str>value[-2:])
 * 
 */

static float __pyx_f_4kivy_10properties_20VariableListProperty_parse_str(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self, struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value) {
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_str", 0);

  /* "kivy\properties.pyx":1236
 * 
 *     cdef float parse_str(self, EventDispatcher obj, value):
 *         return self.parse_list(obj, value[:-2], <str>value[-2:])             # <<<<<<<<<<<<<<
 * 
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext):
 */
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_value, 0, -2, NULL, NULL, &__pyx_k_slice_26, 0, 1, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_value, -2, 0, NULL, NULL, &__pyx_k_slice_27, 1, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected str, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = ((struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty *)__pyx_v_self->__pyx_base.__pyx_vtab)->parse_list(__pyx_v_self, __pyx_v_obj, __pyx_t_1, ((PyObject*)__pyx_t_2));
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("kivy.properties.VariableListProperty.parse_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1238
 *         return self.parse_list(obj, value[:-2], <str>value[-2:])
 * 
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext):             # <<<<<<<<<<<<<<
 *         return dpi2px(value, ext)
 * 
 */

static float __pyx_f_4kivy_10properties_20VariableListProperty_parse_list(CYTHON_UNUSED struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self, CYTHON_UNUSED struct __pyx_obj_4kivy_6_event_EventDispatcher *__pyx_v_obj, PyObject *__pyx_v_value, PyObject *__pyx_v_ext) {
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("parse_list", 0);

  /* "kivy\properties.pyx":1239
 * 
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext):
 *         return dpi2px(value, ext)             # <<<<<<<<<<<<<<
 * 
 */
  __pyx_r = __pyx_f_4kivy_10properties_dpi2px(__pyx_v_value, ((PyObject *)__pyx_v_ext), 0);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_4kivy_10properties_20VariableListProperty_6length_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_4kivy_10properties_20VariableListProperty_6length_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_4kivy_10properties_20VariableListProperty_6length___get__(((struct __pyx_obj_4kivy_10properties_VariableListProperty *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "kivy\properties.pyx":1145
 *     '''
 * 
 *     cdef public int length             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, defaultvalue=None, length=4, **kw):
 */

static PyObject *__pyx_pf_4kivy_10properties_20VariableListProperty_6length___get__(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->length); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("kivy.properties.VariableListProperty.length.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_4kivy_10properties_20VariableListProperty_6length_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_4kivy_10properties_20VariableListProperty_6length_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_4kivy_10properties_20VariableListProperty_6length_2__set__(((struct __pyx_obj_4kivy_10properties_VariableListProperty *)__pyx_v_self), ((PyObject *)__pyx_v_value));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_4kivy_10properties_20VariableListProperty_6length_2__set__(struct __pyx_obj_4kivy_10properties_VariableListProperty *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->length = __pyx_t_1;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("kivy.properties.VariableListProperty.length.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static struct __pyx_vtabstruct_4kivy_10properties_Property __pyx_vtable_4kivy_10properties_Property;

static PyObject *__pyx_tp_new_4kivy_10properties_Property(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_4kivy_10properties_Property *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_Property *)o);
  p->__pyx_vtab = __pyx_vtabptr_4kivy_10properties_Property;
  p->_name = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->errorvalue = Py_None; Py_INCREF(Py_None);
  p->errorhandler = Py_None; Py_INCREF(Py_None);
  p->defaultvalue = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_4kivy_10properties_8Property_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_4kivy_10properties_Property(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_Property *p = (struct __pyx_obj_4kivy_10properties_Property *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_name);
  Py_CLEAR(p->errorvalue);
  Py_CLEAR(p->errorhandler);
  Py_CLEAR(p->defaultvalue);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_4kivy_10properties_Property(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_4kivy_10properties_Property *p = (struct __pyx_obj_4kivy_10properties_Property *)o;
  if (p->_name) {
    e = (*v)(p->_name, a); if (e) return e;
  }
  if (p->errorvalue) {
    e = (*v)(p->errorvalue, a); if (e) return e;
  }
  if (p->errorhandler) {
    e = (*v)(p->errorhandler, a); if (e) return e;
  }
  if (p->defaultvalue) {
    e = (*v)(p->defaultvalue, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_4kivy_10properties_Property(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_Property *p = (struct __pyx_obj_4kivy_10properties_Property *)o;
  PyObject* tmp;
  tmp = ((PyObject*)p->_name);
  p->_name = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->errorvalue);
  p->errorvalue = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->errorhandler);
  p->errorhandler = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->defaultvalue);
  p->defaultvalue = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_tp_descr_get_4kivy_10properties_Property(PyObject *o, PyObject *i, PyObject *c) {
  PyObject *r = 0;
  if (!i) i = Py_None;
  if (!c) c = Py_None;
  r = __pyx_pw_4kivy_10properties_8Property_15__get__(o, i, c);
  return r;
}

static int __pyx_tp_descr_set_4kivy_10properties_Property(PyObject *o, PyObject *i, PyObject *v) {
  if (v) {
    return __pyx_pw_4kivy_10properties_8Property_13__set__(o, i, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__delete__");
    return -1;
  }
}

static PyObject *__pyx_getprop_4kivy_10properties_8Property_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_4kivy_10properties_8Property_4name_1__get__(o);
}

static PyObject *__pyx_getprop_4kivy_10properties_8Property_defaultvalue(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_4kivy_10properties_8Property_12defaultvalue_1__get__(o);
}

static int __pyx_setprop_4kivy_10properties_8Property_defaultvalue(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_4kivy_10properties_8Property_12defaultvalue_3__set__(o, v);
  }
  else {
    return __pyx_pw_4kivy_10properties_8Property_12defaultvalue_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_4kivy_10properties_Property[] = {
  {__Pyx_NAMESTR("link"), (PyCFunction)__pyx_pw_4kivy_10properties_8Property_5link, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_8Property_4link)},
  {__Pyx_NAMESTR("link_deps"), (PyCFunction)__pyx_pw_4kivy_10properties_8Property_7link_deps, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {__Pyx_NAMESTR("bind"), (PyCFunction)__pyx_pw_4kivy_10properties_8Property_9bind, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_8Property_8bind)},
  {__Pyx_NAMESTR("unbind"), (PyCFunction)__pyx_pw_4kivy_10properties_8Property_11unbind, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_8Property_10unbind)},
  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_4kivy_10properties_8Property_17set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_8Property_16set)},
  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4kivy_10properties_8Property_19get, METH_O, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_8Property_18get)},
  {__Pyx_NAMESTR("dispatch"), (PyCFunction)__pyx_pw_4kivy_10properties_8Property_21dispatch, METH_O, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_8Property_20dispatch)},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_4kivy_10properties_Property[] = {
  {(char *)"name", __pyx_getprop_4kivy_10properties_8Property_name, 0, 0, 0},
  {(char *)"defaultvalue", __pyx_getprop_4kivy_10properties_8Property_defaultvalue, __pyx_setprop_4kivy_10properties_8Property_defaultvalue, 0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_Property = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.Property"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_Property), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_Property, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Base class for building more complex properties.\n\n    This class handles all the basic setters and getters, None type handling,\n    the observer list and storage initialisation. This class should not be\n    directly instantiated.\n\n    By default, a :class:`Property` always takes a default value::\n\n        class MyObject(Widget):\n\n            hello = Property('Hello world')\n\n    The default value must be a value that agrees with the Property type. For\n    example, you can't set a list to a :class:`StringProperty`, because the\n    StringProperty will check the default value.\n\n    None is a special case: you can set the default value of a Property to\n    None, but you can't set None to a property afterward.  If you really want\n    to do that, you must declare the Property with `allownone=True`::\n\n        class MyObject(Widget):\n\n            hello = ObjectProperty(None, allownone=True)\n\n        # then later\n        a = MyObject()\n        a.hello = 'bleh' # working\n        a.hello = None # working too, because allownone is True.\n\n    :Parameters:\n        `errorhandler`: callable\n            If set, must take a single argument and return a valid substitute\n            value\n        `errorvalue`: object\n            If set, will replace an invalid property value (overrides\n            errorhandler)\n\n    .. versionchanged:: 1.4.2\n        Parameters errorhandler and errorvalue added\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_Property, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_Property, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_Property, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_4kivy_10properties_Property, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  __pyx_tp_descr_get_4kivy_10properties_Property, /*tp_descr_get*/
  __pyx_tp_descr_set_4kivy_10properties_Property, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_8Property_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_Property, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_NumericProperty __pyx_vtable_4kivy_10properties_NumericProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_NumericProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_NumericProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_NumericProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_NumericProperty;
  return o;
}

static PyMethodDef __pyx_methods_4kivy_10properties_NumericProperty[] = {
  {__Pyx_NAMESTR("get_format"), (PyCFunction)__pyx_pw_4kivy_10properties_15NumericProperty_3get_format, METH_O, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_15NumericProperty_2get_format)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_NumericProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.NumericProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_NumericProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_Property, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Property that represents a numeric value.\n\n    The NumericProperty accepts only int or float.\n\n    >>> wid = Widget()\n    >>> wid.x = 42\n    >>> print wid.x\n    42\n    >>> wid.x = \"plop\"\n     Traceback (most recent call last):\n       File \"<stdin>\", line 1, in <module>\n       File \"properties.pyx\", line 93, in kivy.properties.Property.__set__\n       File \"properties.pyx\", line 111, in kivy.properties.Property.set\n       File \"properties.pyx\", line 159, in kivy.properties.NumericProperty.check\n     ValueError: NumericProperty accept only int/float\n\n    .. versionchanged:: 1.4.1\n        NumericProperty can now accept custom text and tuple value to indicate a\n        type, like \"in\", \"pt\", \"px\", \"cm\", \"mm\", in the format: '10pt' or (10,\n        'pt').\n\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_Property, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_Property, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_NumericProperty, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_15NumericProperty_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_NumericProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_ReferenceListProperty __pyx_vtable_4kivy_10properties_ReferenceListProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_ReferenceListProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_ReferenceListProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_ReferenceListProperty;
  p->properties = ((PyObject*)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_4kivy_10properties_21ReferenceListProperty_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_4kivy_10properties_ReferenceListProperty(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_ReferenceListProperty *p = (struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->properties);
  PyObject_GC_Track(o);
  __pyx_tp_dealloc_4kivy_10properties_Property(o);
}

static int __pyx_tp_traverse_4kivy_10properties_ReferenceListProperty(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_4kivy_10properties_ReferenceListProperty *p = (struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)o;
  e = __pyx_tp_traverse_4kivy_10properties_Property(o, v, a); if (e) return e;
  if (p->properties) {
    e = (*v)(p->properties, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_4kivy_10properties_ReferenceListProperty(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_ReferenceListProperty *p = (struct __pyx_obj_4kivy_10properties_ReferenceListProperty *)o;
  PyObject* tmp;
  __pyx_tp_clear_4kivy_10properties_Property(o);
  tmp = ((PyObject*)p->properties);
  p->properties = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_4kivy_10properties_ReferenceListProperty[] = {
  {__Pyx_NAMESTR("link_deps"), (PyCFunction)__pyx_pw_4kivy_10properties_21ReferenceListProperty_5link_deps, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {__Pyx_NAMESTR("trigger_change"), (PyCFunction)__pyx_pw_4kivy_10properties_21ReferenceListProperty_7trigger_change, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_4kivy_10properties_21ReferenceListProperty_9set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4kivy_10properties_21ReferenceListProperty_11get, METH_O, __Pyx_DOCSTR(0)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_ReferenceListProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.ReferenceListProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_ReferenceListProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_ReferenceListProperty, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Property that allows the creaton of a tuple of other properties.\n\n    For example, if `x` and `y` are :class:`NumericProperty`s, we can create a\n    :class:`ReferenceListProperty` for the `pos`. If you change the value of\n    `pos`, it will automatically change the values of `x` and `y` accordingly.\n    If you read the value of `pos`, it will return a tuple with the values of\n    `x` and `y`.\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_ReferenceListProperty, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_ReferenceListProperty, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_ReferenceListProperty, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_21ReferenceListProperty_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_ReferenceListProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_VariableListProperty __pyx_vtable_4kivy_10properties_VariableListProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_VariableListProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_VariableListProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_VariableListProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_VariableListProperty;
  return o;
}

static PyObject *__pyx_getprop_4kivy_10properties_20VariableListProperty_length(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_4kivy_10properties_20VariableListProperty_6length_1__get__(o);
}

static int __pyx_setprop_4kivy_10properties_20VariableListProperty_length(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_4kivy_10properties_20VariableListProperty_6length_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_4kivy_10properties_VariableListProperty[] = {
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_4kivy_10properties_VariableListProperty[] = {
  {(char *)"length", __pyx_getprop_4kivy_10properties_20VariableListProperty_length, __pyx_setprop_4kivy_10properties_20VariableListProperty_length, 0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_VariableListProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.VariableListProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_VariableListProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_Property, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("A ListProperty that mimics the css way of defining numeric values such\n    as padding, margin, etc.\n\n    Accepts a list of 1 or 2 (or 4 when length=4) Numeric arguments or a single\n    Numeric argument.\n\n    VariableListProperty([1]) represents [1, 1, 1, 1].\n    VariableListProperty([1, 2]) represents [1, 2, 1, 2].\n    VariableListProperty(['1px', (2, 'px'), 3, 4.0]) represents [1, 2, 3, 4.0].\n    VariableListProperty(5) represents [5, 5, 5, 5].\n    VariableListProperty(3, length=2) represents [3, 3].\n\n    :Parameters:\n        `length`: int\n            The length of the list, can be 2 or 4.\n\n    .. versionadded:: 1.7.0\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_Property, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_Property, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_VariableListProperty, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_4kivy_10properties_VariableListProperty, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_20VariableListProperty_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_VariableListProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_AliasProperty __pyx_vtable_4kivy_10properties_AliasProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_AliasProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_AliasProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_AliasProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_AliasProperty;
  p->getter = Py_None; Py_INCREF(Py_None);
  p->setter = Py_None; Py_INCREF(Py_None);
  p->bind_objects = ((PyObject*)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_4kivy_10properties_13AliasProperty_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_4kivy_10properties_AliasProperty(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_AliasProperty *p = (struct __pyx_obj_4kivy_10properties_AliasProperty *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->getter);
  Py_CLEAR(p->setter);
  Py_CLEAR(p->bind_objects);
  PyObject_GC_Track(o);
  __pyx_tp_dealloc_4kivy_10properties_Property(o);
}

static int __pyx_tp_traverse_4kivy_10properties_AliasProperty(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_4kivy_10properties_AliasProperty *p = (struct __pyx_obj_4kivy_10properties_AliasProperty *)o;
  e = __pyx_tp_traverse_4kivy_10properties_Property(o, v, a); if (e) return e;
  if (p->getter) {
    e = (*v)(p->getter, a); if (e) return e;
  }
  if (p->setter) {
    e = (*v)(p->setter, a); if (e) return e;
  }
  if (p->bind_objects) {
    e = (*v)(p->bind_objects, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_4kivy_10properties_AliasProperty(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_AliasProperty *p = (struct __pyx_obj_4kivy_10properties_AliasProperty *)o;
  PyObject* tmp;
  __pyx_tp_clear_4kivy_10properties_Property(o);
  tmp = ((PyObject*)p->getter);
  p->getter = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->setter);
  p->setter = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->bind_objects);
  p->bind_objects = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_4kivy_10properties_AliasProperty[] = {
  {__Pyx_NAMESTR("link_deps"), (PyCFunction)__pyx_pw_4kivy_10properties_13AliasProperty_5link_deps, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {__Pyx_NAMESTR("trigger_change"), (PyCFunction)__pyx_pw_4kivy_10properties_13AliasProperty_7trigger_change, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4kivy_10properties_13AliasProperty_9get, METH_O, __Pyx_DOCSTR(0)},
  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_4kivy_10properties_13AliasProperty_11set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_AliasProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.AliasProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_AliasProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_AliasProperty, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Create a property with a custom getter and setter.\n\n    If you don't find a Property class that fits to your needs, you can make\n    your own by creating custom Python getter and setter methods.\n\n    Example from kivy/uix/widget.py::\n\n        def get_right(self):\n            return self.x + self.width\n        def set_right(self, value):\n            self.x = value - self.width\n        right = AliasProperty(get_right, set_right, bind=('x', 'width'))\n\n    :Parameters:\n        `getter`: function\n            Function to use as a property getter\n        `setter`: function\n            Function to use as a property setter\n        `bind`: list/tuple\n            Properties to observe for changes, as property name strings\n        `cache`: boolean\n            If True, the value will be cached, until one of the binded elements\n            will changes\n\n    .. versionchanged:: 1.4.0\n        Parameter `cache` added.\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_AliasProperty, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_AliasProperty, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_AliasProperty, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_13AliasProperty_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_AliasProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_DictProperty __pyx_vtable_4kivy_10properties_DictProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_DictProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_DictProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_DictProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_DictProperty;
  return o;
}

static PyMethodDef __pyx_methods_4kivy_10properties_DictProperty[] = {
  {__Pyx_NAMESTR("link"), (PyCFunction)__pyx_pw_4kivy_10properties_12DictProperty_3link, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_4kivy_10properties_12DictProperty_5set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_DictProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.DictProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_DictProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_Property, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Property that represents a dict.\n\n    Only dict are allowed. Any other classes are forbidden.\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_Property, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_Property, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_DictProperty, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_12DictProperty_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_DictProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_ObjectProperty __pyx_vtable_4kivy_10properties_ObjectProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_ObjectProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_ObjectProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_ObjectProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_ObjectProperty;
  p->baseclass = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_4kivy_10properties_ObjectProperty(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_ObjectProperty *p = (struct __pyx_obj_4kivy_10properties_ObjectProperty *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->baseclass);
  PyObject_GC_Track(o);
  __pyx_tp_dealloc_4kivy_10properties_Property(o);
}

static int __pyx_tp_traverse_4kivy_10properties_ObjectProperty(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_4kivy_10properties_ObjectProperty *p = (struct __pyx_obj_4kivy_10properties_ObjectProperty *)o;
  e = __pyx_tp_traverse_4kivy_10properties_Property(o, v, a); if (e) return e;
  if (p->baseclass) {
    e = (*v)(p->baseclass, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_4kivy_10properties_ObjectProperty(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_ObjectProperty *p = (struct __pyx_obj_4kivy_10properties_ObjectProperty *)o;
  PyObject* tmp;
  __pyx_tp_clear_4kivy_10properties_Property(o);
  tmp = ((PyObject*)p->baseclass);
  p->baseclass = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_4kivy_10properties_ObjectProperty[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_ObjectProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.ObjectProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_ObjectProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_ObjectProperty, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Property that represents a Python object.\n\n    :Parameters:\n        `baseclass`: object\n            This will be used for: `isinstance(value, baseclass)`.\n\n    .. warning::\n\n        To mark the property as changed, you must reassign a new python object.\n\n    .. versionchanged:: 1.7.0\n\n        `baseclass` parameter added.\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_ObjectProperty, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_ObjectProperty, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_ObjectProperty, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_14ObjectProperty_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_ObjectProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_StringProperty __pyx_vtable_4kivy_10properties_StringProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_StringProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_StringProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_StringProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_StringProperty;
  return o;
}

static PyMethodDef __pyx_methods_4kivy_10properties_StringProperty[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_StringProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.StringProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_StringProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_Property, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Property that represents a string value.\n\n    Only a string or unicode is accepted.\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_Property, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_Property, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_StringProperty, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_14StringProperty_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_StringProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_BoundedNumericProperty __pyx_vtable_4kivy_10properties_BoundedNumericProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_BoundedNumericProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_BoundedNumericProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_BoundedNumericProperty;
  if (unlikely(__pyx_pw_4kivy_10properties_22BoundedNumericProperty_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static PyObject *__pyx_getprop_4kivy_10properties_22BoundedNumericProperty_bounds(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_4kivy_10properties_22BoundedNumericProperty_6bounds_1__get__(o);
}

static PyMethodDef __pyx_methods_4kivy_10properties_BoundedNumericProperty[] = {
  {__Pyx_NAMESTR("set_min"), (PyCFunction)__pyx_pw_4kivy_10properties_22BoundedNumericProperty_5set_min, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_22BoundedNumericProperty_4set_min)},
  {__Pyx_NAMESTR("get_min"), (PyCFunction)__pyx_pw_4kivy_10properties_22BoundedNumericProperty_7get_min, METH_O, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_22BoundedNumericProperty_6get_min)},
  {__Pyx_NAMESTR("set_max"), (PyCFunction)__pyx_pw_4kivy_10properties_22BoundedNumericProperty_9set_max, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_22BoundedNumericProperty_8set_max)},
  {__Pyx_NAMESTR("get_max"), (PyCFunction)__pyx_pw_4kivy_10properties_22BoundedNumericProperty_11get_max, METH_O, __Pyx_DOCSTR(__pyx_doc_4kivy_10properties_22BoundedNumericProperty_10get_max)},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_4kivy_10properties_BoundedNumericProperty[] = {
  {(char *)"bounds", __pyx_getprop_4kivy_10properties_22BoundedNumericProperty_bounds, 0, __Pyx_DOCSTR(__pyx_k_28), 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_BoundedNumericProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.BoundedNumericProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_BoundedNumericProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_Property, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Property that represents a numeric value within a minimum bound and/or\n    maximum bound -- within a numeric range.\n\n    :Parameters:\n        `min`: numeric\n            If set, minimum bound will be used, with the value of min\n        `max`: numeric\n            If set, maximum bound will be used, with the value of max\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_Property, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_Property, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_BoundedNumericProperty, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_4kivy_10properties_BoundedNumericProperty, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_22BoundedNumericProperty_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_BoundedNumericProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_OptionProperty __pyx_vtable_4kivy_10properties_OptionProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_OptionProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_OptionProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_OptionProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_OptionProperty;
  p->options = ((PyObject*)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_4kivy_10properties_14OptionProperty_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_4kivy_10properties_OptionProperty(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_OptionProperty *p = (struct __pyx_obj_4kivy_10properties_OptionProperty *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->options);
  PyObject_GC_Track(o);
  __pyx_tp_dealloc_4kivy_10properties_Property(o);
}

static int __pyx_tp_traverse_4kivy_10properties_OptionProperty(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_4kivy_10properties_OptionProperty *p = (struct __pyx_obj_4kivy_10properties_OptionProperty *)o;
  e = __pyx_tp_traverse_4kivy_10properties_Property(o, v, a); if (e) return e;
  if (p->options) {
    e = (*v)(p->options, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_4kivy_10properties_OptionProperty(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_OptionProperty *p = (struct __pyx_obj_4kivy_10properties_OptionProperty *)o;
  PyObject* tmp;
  __pyx_tp_clear_4kivy_10properties_Property(o);
  tmp = ((PyObject*)p->options);
  p->options = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_4kivy_10properties_14OptionProperty_options(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_4kivy_10properties_14OptionProperty_7options_1__get__(o);
}

static PyMethodDef __pyx_methods_4kivy_10properties_OptionProperty[] = {
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_4kivy_10properties_OptionProperty[] = {
  {(char *)"options", __pyx_getprop_4kivy_10properties_14OptionProperty_options, 0, __Pyx_DOCSTR(__pyx_k_29), 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_OptionProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.OptionProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_OptionProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_OptionProperty, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Property that represents a string from a predefined list of valid\n    options.\n\n    If the string set in the property is not in the list of valid options\n    (passed at property creation time), a ValueError exception will be raised.\n\n    :Parameters:\n        `options`: list (not tuple.)\n            List of valid options\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_OptionProperty, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_OptionProperty, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_OptionProperty, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_4kivy_10properties_OptionProperty, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_14OptionProperty_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_OptionProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_ListProperty __pyx_vtable_4kivy_10properties_ListProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_ListProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_ListProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_ListProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_ListProperty;
  return o;
}

static PyMethodDef __pyx_methods_4kivy_10properties_ListProperty[] = {
  {__Pyx_NAMESTR("link"), (PyCFunction)__pyx_pw_4kivy_10properties_12ListProperty_3link, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_4kivy_10properties_12ListProperty_5set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_ListProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.ListProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_ListProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_Property, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Property that represents a list.\n\n    Only lists are allowed. Tuple or any other classes are forbidden.\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_Property, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_Property, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_ListProperty, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_12ListProperty_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_ListProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_4kivy_10properties_BooleanProperty __pyx_vtable_4kivy_10properties_BooleanProperty;

static PyObject *__pyx_tp_new_4kivy_10properties_BooleanProperty(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_4kivy_10properties_BooleanProperty *p;
  PyObject *o = __pyx_tp_new_4kivy_10properties_Property(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_BooleanProperty *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4kivy_10properties_Property*)__pyx_vtabptr_4kivy_10properties_BooleanProperty;
  return o;
}

static PyMethodDef __pyx_methods_4kivy_10properties_BooleanProperty[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_BooleanProperty = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.BooleanProperty"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_BooleanProperty), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_Property, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Property that represents only a boolean value.\n    "), /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_Property, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_Property, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_BooleanProperty, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_4kivy_10properties_15BooleanProperty_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_BooleanProperty, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};

static PyObject *__pyx_tp_new_4kivy_10properties_PropertyStorage(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_4kivy_10properties_PropertyStorage *)o);
  p->value = Py_None; Py_INCREF(Py_None);
  p->observers = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->numeric_fmt = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->options = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->properties = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->getter = Py_None; Py_INCREF(Py_None);
  p->setter = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_4kivy_10properties_PropertyStorage(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *p = (struct __pyx_obj_4kivy_10properties_PropertyStorage *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->value);
  Py_CLEAR(p->observers);
  Py_CLEAR(p->numeric_fmt);
  Py_CLEAR(p->options);
  Py_CLEAR(p->properties);
  Py_CLEAR(p->getter);
  Py_CLEAR(p->setter);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_4kivy_10properties_PropertyStorage(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_4kivy_10properties_PropertyStorage *p = (struct __pyx_obj_4kivy_10properties_PropertyStorage *)o;
  if (p->value) {
    e = (*v)(p->value, a); if (e) return e;
  }
  if (p->observers) {
    e = (*v)(p->observers, a); if (e) return e;
  }
  if (p->numeric_fmt) {
    e = (*v)(p->numeric_fmt, a); if (e) return e;
  }
  if (p->options) {
    e = (*v)(p->options, a); if (e) return e;
  }
  if (p->properties) {
    e = (*v)(p->properties, a); if (e) return e;
  }
  if (p->getter) {
    e = (*v)(p->getter, a); if (e) return e;
  }
  if (p->setter) {
    e = (*v)(p->setter, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_4kivy_10properties_PropertyStorage(PyObject *o) {
  struct __pyx_obj_4kivy_10properties_PropertyStorage *p = (struct __pyx_obj_4kivy_10properties_PropertyStorage *)o;
  PyObject* tmp;
  tmp = ((PyObject*)p->value);
  p->value = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->observers);
  p->observers = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->numeric_fmt);
  p->numeric_fmt = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->options);
  p->options = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->properties);
  p->properties = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->getter);
  p->getter = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->setter);
  p->setter = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_4kivy_10properties_PropertyStorage[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_4kivy_10properties_PropertyStorage = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("kivy.properties.PropertyStorage"), /*tp_name*/
  sizeof(struct __pyx_obj_4kivy_10properties_PropertyStorage), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_4kivy_10properties_PropertyStorage, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_4kivy_10properties_PropertyStorage, /*tp_traverse*/
  __pyx_tp_clear_4kivy_10properties_PropertyStorage, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_4kivy_10properties_PropertyStorage, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_4kivy_10properties_PropertyStorage, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};

static PyMethodDef __pyx_methods[] = {
  {__Pyx_NAMESTR("dpi2px"), (PyCFunction)__pyx_pw_4kivy_10properties_1dpi2px, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
  {0, 0, 0, 0}
};

#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef __pyx_moduledef = {
  #if PY_VERSION_HEX < 0x03020000
    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
  #else
    PyModuleDef_HEAD_INIT,
  #endif
    __Pyx_NAMESTR("properties"),
    __Pyx_DOCSTR(__pyx_k_30), /* m_doc */
    -1, /* m_size */
    __pyx_methods /* m_methods */,
    NULL, /* m_reload */
    NULL, /* m_traverse */
    NULL, /* m_clear */
    NULL /* m_free */
};
#endif

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_n_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 1},
  {&__pyx_kp_s_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 0, 1, 0},
  {&__pyx_n_s_100, __pyx_k_100, sizeof(__pyx_k_100), 0, 0, 1, 1},
  {&__pyx_n_s_103, __pyx_k_103, sizeof(__pyx_k_103), 0, 0, 1, 1},
  {&__pyx_n_s_106, __pyx_k_106, sizeof(__pyx_k_106), 0, 0, 1, 1},
  {&__pyx_n_s_109, __pyx_k_109, sizeof(__pyx_k_109), 0, 0, 1, 1},
  {&__pyx_kp_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 0},
  {&__pyx_n_s_112, __pyx_k_112, sizeof(__pyx_k_112), 0, 0, 1, 1},
  {&__pyx_n_s_115, __pyx_k_115, sizeof(__pyx_k_115), 0, 0, 1, 1},
  {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0},
  {&__pyx_kp_s_13, __pyx_k_13, sizeof(__pyx_k_13), 0, 0, 1, 0},
  {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0},
  {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0},
  {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0},
  {&__pyx_kp_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 0},
  {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0},
  {&__pyx_kp_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 0},
  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
  {&__pyx_kp_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 0},
  {&__pyx_kp_s_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 0, 1, 0},
  {&__pyx_kp_s_23, __pyx_k_23, sizeof(__pyx_k_23), 0, 0, 1, 0},
  {&__pyx_kp_s_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 1, 0},
  {&__pyx_kp_s_25, __pyx_k_25, sizeof(__pyx_k_25), 0, 0, 1, 0},
  {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0},
  {&__pyx_n_s_31, __pyx_k_31, sizeof(__pyx_k_31), 0, 0, 1, 1},
  {&__pyx_n_s_32, __pyx_k_32, sizeof(__pyx_k_32), 0, 0, 1, 1},
  {&__pyx_n_s_33, __pyx_k_33, sizeof(__pyx_k_33), 0, 0, 1, 1},
  {&__pyx_kp_s_38, __pyx_k_38, sizeof(__pyx_k_38), 0, 0, 1, 0},
  {&__pyx_n_s_39, __pyx_k_39, sizeof(__pyx_k_39), 0, 0, 1, 1},
  {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0},
  {&__pyx_n_s_40, __pyx_k_40, sizeof(__pyx_k_40), 0, 0, 1, 1},
  {&__pyx_n_s_43, __pyx_k_43, sizeof(__pyx_k_43), 0, 0, 1, 1},
  {&__pyx_n_s_46, __pyx_k_46, sizeof(__pyx_k_46), 0, 0, 1, 1},
  {&__pyx_n_s_49, __pyx_k_49, sizeof(__pyx_k_49), 0, 0, 1, 1},
  {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0},
  {&__pyx_n_s_52, __pyx_k_52, sizeof(__pyx_k_52), 0, 0, 1, 1},
  {&__pyx_n_s_55, __pyx_k_55, sizeof(__pyx_k_55), 0, 0, 1, 1},
  {&__pyx_n_s_58, __pyx_k_58, sizeof(__pyx_k_58), 0, 0, 1, 1},
  {&__pyx_kp_s_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 1, 0},
  {&__pyx_n_s_61, __pyx_k_61, sizeof(__pyx_k_61), 0, 0, 1, 1},
  {&__pyx_n_s_64, __pyx_k_64, sizeof(__pyx_k_64), 0, 0, 1, 1},
  {&__pyx_n_s_67, __pyx_k_67, sizeof(__pyx_k_67), 0, 0, 1, 1},
  {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0},
  {&__pyx_n_s_70, __pyx_k_70, sizeof(__pyx_k_70), 0, 0, 1, 1},
  {&__pyx_n_s_73, __pyx_k_73, sizeof(__pyx_k_73), 0, 0, 1, 1},
  {&__pyx_n_s_76, __pyx_k_76, sizeof(__pyx_k_76), 0, 0, 1, 1},
  {&__pyx_n_s_79, __pyx_k_79, sizeof(__pyx_k_79), 0, 0, 1, 1},
  {&__pyx_n_s_82, __pyx_k_82, sizeof(__pyx_k_82), 0, 0, 1, 1},
  {&__pyx_n_s_85, __pyx_k_85, sizeof(__pyx_k_85), 0, 0, 1, 1},
  {&__pyx_n_s_88, __pyx_k_88, sizeof(__pyx_k_88), 0, 0, 1, 1},
  {&__pyx_n_s_91, __pyx_k_91, sizeof(__pyx_k_91), 0, 0, 1, 1},
  {&__pyx_n_s_94, __pyx_k_94, sizeof(__pyx_k_94), 0, 0, 1, 1},
  {&__pyx_n_s_97, __pyx_k_97, sizeof(__pyx_k_97), 0, 0, 1, 1},
  {&__pyx_n_s__AliasProperty, __pyx_k__AliasProperty, sizeof(__pyx_k__AliasProperty), 0, 0, 1, 1},
  {&__pyx_n_s__AttributeError, __pyx_k__AttributeError, sizeof(__pyx_k__AttributeError), 0, 0, 1, 1},
  {&__pyx_n_s__BooleanProperty, __pyx_k__BooleanProperty, sizeof(__pyx_k__BooleanProperty), 0, 0, 1, 1},
  {&__pyx_n_s__DictProperty, __pyx_k__DictProperty, sizeof(__pyx_k__DictProperty), 0, 0, 1, 1},
  {&__pyx_n_s__KeyError, __pyx_k__KeyError, sizeof(__pyx_k__KeyError), 0, 0, 1, 1},
  {&__pyx_n_s__ListProperty, __pyx_k__ListProperty, sizeof(__pyx_k__ListProperty), 0, 0, 1, 1},
  {&__pyx_n_s__Metrics, __pyx_k__Metrics, sizeof(__pyx_k__Metrics), 0, 0, 1, 1},
  {&__pyx_n_s__NUMERIC_FORMATS, __pyx_k__NUMERIC_FORMATS, sizeof(__pyx_k__NUMERIC_FORMATS), 0, 0, 1, 1},
  {&__pyx_n_s__NumericProperty, __pyx_k__NumericProperty, sizeof(__pyx_k__NumericProperty), 0, 0, 1, 1},
  {&__pyx_n_s__ObjectProperty, __pyx_k__ObjectProperty, sizeof(__pyx_k__ObjectProperty), 0, 0, 1, 1},
  {&__pyx_n_s__ObservableDict, __pyx_k__ObservableDict, sizeof(__pyx_k__ObservableDict), 0, 0, 1, 1},
  {&__pyx_n_s__ObservableList, __pyx_k__ObservableList, sizeof(__pyx_k__ObservableList), 0, 0, 1, 1},
  {&__pyx_n_s__OptionProperty, __pyx_k__OptionProperty, sizeof(__pyx_k__OptionProperty), 0, 0, 1, 1},
  {&__pyx_n_s__Property, __pyx_k__Property, sizeof(__pyx_k__Property), 0, 0, 1, 1},
  {&__pyx_n_s__StringProperty, __pyx_k__StringProperty, sizeof(__pyx_k__StringProperty), 0, 0, 1, 1},
  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
  {&__pyx_n_s____all__, __pyx_k____all__, sizeof(__pyx_k____all__), 0, 0, 1, 1},
  {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1},
  {&__pyx_n_s____delitem__, __pyx_k____delitem__, sizeof(__pyx_k____delitem__), 0, 0, 1, 1},
  {&__pyx_n_s____delslice__, __pyx_k____delslice__, sizeof(__pyx_k____delslice__), 0, 0, 1, 1},
  {&__pyx_n_s____getattr__, __pyx_k____getattr__, sizeof(__pyx_k____getattr__), 0, 0, 1, 1},
  {&__pyx_n_s____getitem__, __pyx_k____getitem__, sizeof(__pyx_k____getitem__), 0, 0, 1, 1},
  {&__pyx_n_s____iadd__, __pyx_k____iadd__, sizeof(__pyx_k____iadd__), 0, 0, 1, 1},
  {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1},
  {&__pyx_n_s____imul__, __pyx_k____imul__, sizeof(__pyx_k____imul__), 0, 0, 1, 1},
  {&__pyx_n_s____init__, __pyx_k____init__, sizeof(__pyx_k____init__), 0, 0, 1, 1},
  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
  {&__pyx_n_s____metaclass__, __pyx_k____metaclass__, sizeof(__pyx_k____metaclass__), 0, 0, 1, 1},
  {&__pyx_n_s____module__, __pyx_k____module__, sizeof(__pyx_k____module__), 0, 0, 1, 1},
  {&__pyx_n_s____name__, __pyx_k____name__, sizeof(__pyx_k____name__), 0, 0, 1, 1},
  {&__pyx_n_s____pyx_vtable__, __pyx_k____pyx_vtable__, sizeof(__pyx_k____pyx_vtable__), 0, 0, 1, 1},
  {&__pyx_n_s____qualname__, __pyx_k____qualname__, sizeof(__pyx_k____qualname__), 0, 0, 1, 1},
  {&__pyx_n_s____setattr__, __pyx_k____setattr__, sizeof(__pyx_k____setattr__), 0, 0, 1, 1},
  {&__pyx_n_s____setitem__, __pyx_k____setitem__, sizeof(__pyx_k____setitem__), 0, 0, 1, 1},
  {&__pyx_n_s____setslice__, __pyx_k____setslice__, sizeof(__pyx_k____setslice__), 0, 0, 1, 1},
  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
  {&__pyx_n_s___value, __pyx_k___value, sizeof(__pyx_k___value), 0, 0, 1, 1},
  {&__pyx_n_s___weak_return, __pyx_k___weak_return, sizeof(__pyx_k___weak_return), 0, 0, 1, 1},
  {&__pyx_n_s__allownone, __pyx_k__allownone, sizeof(__pyx_k__allownone), 0, 0, 1, 1},
  {&__pyx_n_s__append, __pyx_k__append, sizeof(__pyx_k__append), 0, 0, 1, 1},
  {&__pyx_n_s__attr, __pyx_k__attr, sizeof(__pyx_k__attr), 0, 0, 1, 1},
  {&__pyx_n_s__baseclass, __pyx_k__baseclass, sizeof(__pyx_k__baseclass), 0, 0, 1, 1},
  {&__pyx_n_s__bind, __pyx_k__bind, sizeof(__pyx_k__bind), 0, 0, 1, 1},
  {&__pyx_n_s__cache, __pyx_k__cache, sizeof(__pyx_k__cache), 0, 0, 1, 1},
  {&__pyx_n_s__clear, __pyx_k__clear, sizeof(__pyx_k__clear), 0, 0, 1, 1},
  {&__pyx_n_s__cm, __pyx_k__cm, sizeof(__pyx_k__cm), 0, 0, 1, 1},
  {&__pyx_n_s__defaultvalue, __pyx_k__defaultvalue, sizeof(__pyx_k__defaultvalue), 0, 0, 1, 1},
  {&__pyx_n_s__density, __pyx_k__density, sizeof(__pyx_k__density), 0, 0, 1, 1},
  {&__pyx_n_s__dispatch, __pyx_k__dispatch, sizeof(__pyx_k__dispatch), 0, 0, 1, 1},
  {&__pyx_n_s__dp, __pyx_k__dp, sizeof(__pyx_k__dp), 0, 0, 1, 1},
  {&__pyx_n_s__dpi, __pyx_k__dpi, sizeof(__pyx_k__dpi), 0, 0, 1, 1},
  {&__pyx_n_s__errorhandler, __pyx_k__errorhandler, sizeof(__pyx_k__errorhandler), 0, 0, 1, 1},
  {&__pyx_n_s__errorvalue, __pyx_k__errorvalue, sizeof(__pyx_k__errorvalue), 0, 0, 1, 1},
  {&__pyx_n_s__ext, __pyx_k__ext, sizeof(__pyx_k__ext), 0, 0, 1, 1},
  {&__pyx_n_s__extend, __pyx_k__extend, sizeof(__pyx_k__extend), 0, 0, 1, 1},
  {&__pyx_n_s__fontscale, __pyx_k__fontscale, sizeof(__pyx_k__fontscale), 0, 0, 1, 1},
  {&__pyx_n_s__get, __pyx_k__get, sizeof(__pyx_k__get), 0, 0, 1, 1},
  {&__pyx_n_s__getter, __pyx_k__getter, sizeof(__pyx_k__getter), 0, 0, 1, 1},
  {&__pyx_n_s__in, __pyx_k__in, sizeof(__pyx_k__in), 0, 0, 1, 1},
  {&__pyx_n_s__insert, __pyx_k__insert, sizeof(__pyx_k__insert), 0, 0, 1, 1},
  {&__pyx_n_s__item, __pyx_k__item, sizeof(__pyx_k__item), 0, 0, 1, 1},
  {&__pyx_n_s__key, __pyx_k__key, sizeof(__pyx_k__key), 0, 0, 1, 1},
  {&__pyx_n_s__largs, __pyx_k__largs, sizeof(__pyx_k__largs), 0, 0, 1, 1},
  {&__pyx_n_s__length, __pyx_k__length, sizeof(__pyx_k__length), 0, 0, 1, 1},
  {&__pyx_n_s__link, __pyx_k__link, sizeof(__pyx_k__link), 0, 0, 1, 1},
  {&__pyx_n_s__link_deps, __pyx_k__link_deps, sizeof(__pyx_k__link_deps), 0, 0, 1, 1},
  {&__pyx_n_s__max, __pyx_k__max, sizeof(__pyx_k__max), 0, 0, 1, 1},
  {&__pyx_n_s__min, __pyx_k__min, sizeof(__pyx_k__min), 0, 0, 1, 1},
  {&__pyx_n_s__mm, __pyx_k__mm, sizeof(__pyx_k__mm), 0, 0, 1, 1},
  {&__pyx_n_s__name, __pyx_k__name, sizeof(__pyx_k__name), 0, 0, 1, 1},
  {&__pyx_n_s__obj, __pyx_k__obj, sizeof(__pyx_k__obj), 0, 0, 1, 1},
  {&__pyx_n_s__object, __pyx_k__object, sizeof(__pyx_k__object), 0, 0, 1, 1},
  {&__pyx_n_s__observer, __pyx_k__observer, sizeof(__pyx_k__observer), 0, 0, 1, 1},
  {&__pyx_n_s__options, __pyx_k__options, sizeof(__pyx_k__options), 0, 0, 1, 1},
  {&__pyx_n_s__pop, __pyx_k__pop, sizeof(__pyx_k__pop), 0, 0, 1, 1},
  {&__pyx_n_s__popitem, __pyx_k__popitem, sizeof(__pyx_k__popitem), 0, 0, 1, 1},
  {&__pyx_n_s__prop, __pyx_k__prop, sizeof(__pyx_k__prop), 0, 0, 1, 1},
  {&__pyx_n_s__pt, __pyx_k__pt, sizeof(__pyx_k__pt), 0, 0, 1, 1},
  {&__pyx_n_s__px, __pyx_k__px, sizeof(__pyx_k__px), 0, 0, 1, 1},
  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
  {&__pyx_n_s__ref, __pyx_k__ref, sizeof(__pyx_k__ref), 0, 0, 1, 1},
  {&__pyx_n_s__remove, __pyx_k__remove, sizeof(__pyx_k__remove), 0, 0, 1, 1},
  {&__pyx_n_s__result, __pyx_k__result, sizeof(__pyx_k__result), 0, 0, 1, 1},
  {&__pyx_n_s__reverse, __pyx_k__reverse, sizeof(__pyx_k__reverse), 0, 0, 1, 1},
  {&__pyx_n_s__self, __pyx_k__self, sizeof(__pyx_k__self), 0, 0, 1, 1},
  {&__pyx_n_s__set, __pyx_k__set, sizeof(__pyx_k__set), 0, 0, 1, 1},
  {&__pyx_n_s__setdefault, __pyx_k__setdefault, sizeof(__pyx_k__setdefault), 0, 0, 1, 1},
  {&__pyx_n_s__setter, __pyx_k__setter, sizeof(__pyx_k__setter), 0, 0, 1, 1},
  {&__pyx_n_s__sort, __pyx_k__sort, sizeof(__pyx_k__sort), 0, 0, 1, 1},
  {&__pyx_n_s__sp, __pyx_k__sp, sizeof(__pyx_k__sp), 0, 0, 1, 1},
  {&__pyx_n_s__super, __pyx_k__super, sizeof(__pyx_k__super), 0, 0, 1, 1},
  {&__pyx_n_s__trigger_change, __pyx_k__trigger_change, sizeof(__pyx_k__trigger_change), 0, 0, 1, 1},
  {&__pyx_n_s__unbind, __pyx_k__unbind, sizeof(__pyx_k__unbind), 0, 0, 1, 1},
  {&__pyx_n_s__update, __pyx_k__update, sizeof(__pyx_k__update), 0, 0, 1, 1},
  {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1},
  {&__pyx_n_s__weakref, __pyx_k__weakref, sizeof(__pyx_k__weakref), 0, 0, 1, 1},
  {&__pyx_n_s__xrange, __pyx_k__xrange, sizeof(__pyx_k__xrange), 0, 0, 1, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
static int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_n_s__super); if (!__pyx_builtin_super) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s__KeyError); if (!__pyx_builtin_KeyError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s__object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #if PY_MAJOR_VERSION >= 3
  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #else
  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__xrange); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  return 0;
  __pyx_L1_error:;
  return -1;
}

static int __Pyx_InitCachedConstants(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);

  /* "kivy\properties.pyx":468
 * 
 *     cdef float parse_str(self, EventDispatcher obj, value):
 *         return self.parse_list(obj, value[:-2], <str>value[-2:])             # <<<<<<<<<<<<<<
 * 
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext):
 */
  __pyx_k_slice_8 = PySlice_New(Py_None, __pyx_int_neg_2, Py_None); if (unlikely(!__pyx_k_slice_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_8);
  __Pyx_GIVEREF(__pyx_k_slice_8);
  __pyx_k_slice_9 = PySlice_New(__pyx_int_neg_2, Py_None, Py_None); if (unlikely(!__pyx_k_slice_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_9);
  __Pyx_GIVEREF(__pyx_k_slice_9);

  /* "kivy\properties.pyx":1236
 * 
 *     cdef float parse_str(self, EventDispatcher obj, value):
 *         return self.parse_list(obj, value[:-2], <str>value[-2:])             # <<<<<<<<<<<<<<
 * 
 *     cdef float parse_list(self, EventDispatcher obj, value, str ext):
 */
  __pyx_k_slice_26 = PySlice_New(Py_None, __pyx_int_neg_2, Py_None); if (unlikely(!__pyx_k_slice_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_26);
  __Pyx_GIVEREF(__pyx_k_slice_26);
  __pyx_k_slice_27 = PySlice_New(__pyx_int_neg_2, Py_None, Py_None); if (unlikely(!__pyx_k_slice_27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_27);
  __Pyx_GIVEREF(__pyx_k_slice_27);

  /* "kivy\properties.pyx":168
 * '''
 * 
 * __all__ = ('Property',             # <<<<<<<<<<<<<<
 *            'NumericProperty', 'StringProperty', 'ListProperty',
 *            'ObjectProperty', 'BooleanProperty', 'BoundedNumericProperty',
 */
  __pyx_k_tuple_34 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__Property), ((PyObject *)__pyx_n_s__NumericProperty), ((PyObject *)__pyx_n_s__StringProperty), ((PyObject *)__pyx_n_s__ListProperty), ((PyObject *)__pyx_n_s__ObjectProperty), ((PyObject *)__pyx_n_s__BooleanProperty), ((PyObject *)__pyx_n_s_31), ((PyObject *)__pyx_n_s__OptionProperty), ((PyObject *)__pyx_n_s_32), ((PyObject *)__pyx_n_s__AliasProperty), ((PyObject *)__pyx_n_s__DictProperty), ((PyObject *)__pyx_n_s_33)); if (unlikely(!__pyx_k_tuple_34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_34);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_34));

  /* "kivy\properties.pyx":180
 * cdef float g_fontscale = -1
 * 
 * NUMERIC_FORMATS = ('in', 'px', 'dp', 'sp', 'pt', 'cm', 'mm')             # <<<<<<<<<<<<<<
 * 
 * cpdef float dpi2px(value, ext):
 */
  __pyx_k_tuple_35 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in), ((PyObject *)__pyx_n_s__px), ((PyObject *)__pyx_n_s__dp), ((PyObject *)__pyx_n_s__sp), ((PyObject *)__pyx_n_s__pt), ((PyObject *)__pyx_n_s__cm), ((PyObject *)__pyx_n_s__mm)); if (unlikely(!__pyx_k_tuple_35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_35);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_35));

  /* "kivy\properties.pyx":511
 * class ObservableList(list):
 *     # Internal class to observe changes inside a native python list.
 *     def __init__(self, *largs):             # <<<<<<<<<<<<<<
 *         self.prop = largs[0]
 *         self.obj = ref(largs[1])
 */
  __pyx_k_tuple_36 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_36);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_36));
  __pyx_k_codeobj_37 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____init__, 511, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":516
 *         super(ObservableList, self).__init__(*largs[2:])
 * 
 *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
 *         list.__setitem__(self, key, value)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_41 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__value)); if (unlikely(!__pyx_k_tuple_41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_41);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_41));
  __pyx_k_codeobj_42 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____setitem__, 516, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":520
 *         observable_list_dispatch(self)
 * 
 *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
 *         list.__delitem__(self, key)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_44 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key)); if (unlikely(!__pyx_k_tuple_44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_44);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_44));
  __pyx_k_codeobj_45 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____delitem__, 520, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":524
 *         observable_list_dispatch(self)
 * 
 *     def __setslice__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__setslice__(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_47 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_47);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_47));
  __pyx_k_codeobj_48 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____setslice__, 524, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":528
 *         observable_list_dispatch(self)
 * 
 *     def __delslice__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__delslice__(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_50 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_50);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_50));
  __pyx_k_codeobj_51 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____delslice__, 528, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":532
 *         observable_list_dispatch(self)
 * 
 *     def __iadd__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__iadd__(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_53 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_53);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_53));
  __pyx_k_codeobj_54 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____iadd__, 532, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":536
 *         observable_list_dispatch(self)
 * 
 *     def __imul__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__imul__(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_56 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_56);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_56));
  __pyx_k_codeobj_57 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____imul__, 536, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":540
 *         observable_list_dispatch(self)
 * 
 *     def append(self, *largs):             # <<<<<<<<<<<<<<
 *         list.append(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_59 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_59);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_59));
  __pyx_k_codeobj_60 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__append, 540, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":544
 *         observable_list_dispatch(self)
 * 
 *     def remove(self, *largs):             # <<<<<<<<<<<<<<
 *         list.remove(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_62 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_62);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_62));
  __pyx_k_codeobj_63 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__remove, 544, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":548
 *         observable_list_dispatch(self)
 * 
 *     def insert(self, *largs):             # <<<<<<<<<<<<<<
 *         list.insert(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_65 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_65);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_65));
  __pyx_k_codeobj_66 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__insert, 548, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":552
 *         observable_list_dispatch(self)
 * 
 *     def pop(self, *largs):             # <<<<<<<<<<<<<<
 *         cdef object result = list.pop(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_68 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_68);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_68));
  __pyx_k_codeobj_69 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__pop, 552, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":557
 *         return result
 * 
 *     def extend(self, *largs):             # <<<<<<<<<<<<<<
 *         list.extend(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_71 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_71);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_71));
  __pyx_k_codeobj_72 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__extend, 557, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":561
 *         observable_list_dispatch(self)
 * 
 *     def sort(self, *largs):             # <<<<<<<<<<<<<<
 *         list.sort(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_74 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_74);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_74));
  __pyx_k_codeobj_75 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_74, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__sort, 561, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":565
 *         observable_list_dispatch(self)
 * 
 *     def reverse(self, *largs):             # <<<<<<<<<<<<<<
 *         list.reverse(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_k_tuple_77 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_77);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_77));
  __pyx_k_codeobj_78 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__reverse, 565, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":604
 * class ObservableDict(dict):
 *     # Internal class to observe changes inside a native python dict.
 *     def __init__(self, *largs):             # <<<<<<<<<<<<<<
 *         self.prop = largs[0]
 *         self.obj = largs[1]
 */
  __pyx_k_tuple_80 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_80);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_80));
  __pyx_k_codeobj_81 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____init__, 604, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_81)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":609
 *         super(ObservableDict, self).__init__(*largs[2:])
 * 
 *     def _weak_return(self, item):             # <<<<<<<<<<<<<<
 *         if isinstance(item, ref):
 *             return item()
 */
  __pyx_k_tuple_83 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_83);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_83));
  __pyx_k_codeobj_84 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_83, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s___weak_return, 609, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":614
 *         return item
 * 
 *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
 *         try:
 *             return self._weak_return(self.__getitem__(attr))
 */
  __pyx_k_tuple_86 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__attr)); if (unlikely(!__pyx_k_tuple_86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_86);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_86));
  __pyx_k_codeobj_87 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____getattr__, 614, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_87)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":624
 *                 raise KeyError(attr)
 * 
 *     def __setattr__(self, attr, value):             # <<<<<<<<<<<<<<
 *         if attr in ('prop', 'obj'):
 *             super(ObservableDict, self).__setattr__(attr, value)
 */
  __pyx_k_tuple_89 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__attr), ((PyObject *)__pyx_n_s__value)); if (unlikely(!__pyx_k_tuple_89)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_89);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_89));
  __pyx_k_codeobj_90 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_89, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____setattr__, 624, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_90)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":630
 *         self.__setitem__(attr, value)
 * 
 *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
 *         if value is None:
 *             # remove attribute if value is None
 */
  __pyx_k_tuple_92 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__value)); if (unlikely(!__pyx_k_tuple_92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_92);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_92));
  __pyx_k_codeobj_93 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____setitem__, 630, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_93)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":639
 *         observable_dict_dispatch(self)
 * 
 *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
 *         dict.__delitem__(self, key)
 *         observable_dict_dispatch(self)
 */
  __pyx_k_tuple_95 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key)); if (unlikely(!__pyx_k_tuple_95)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_95);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_95));
  __pyx_k_codeobj_96 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_95, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____delitem__, 639, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_96)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":643
 *         observable_dict_dispatch(self)
 * 
 *     def clear(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.clear(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_k_tuple_98 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_98)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_98);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_98));
  __pyx_k_codeobj_99 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_98, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__clear, 643, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_99)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":647
 *         observable_dict_dispatch(self)
 * 
 *     def remove(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.remove(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_k_tuple_101 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_101)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_101);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_101));
  __pyx_k_codeobj_102 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_101, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__remove, 647, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_102)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":651
 *         observable_dict_dispatch(self)
 * 
 *     def pop(self, *largs):             # <<<<<<<<<<<<<<
 *         cdef object result = dict.pop(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_k_tuple_104 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_104)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_104);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_104));
  __pyx_k_codeobj_105 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_104, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__pop, 651, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_105)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":656
 *         return result
 * 
 *     def popitem(self, *largs):             # <<<<<<<<<<<<<<
 *         cdef object result = dict.popitem(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_k_tuple_107 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_107)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_107);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_107));
  __pyx_k_codeobj_108 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_107, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__popitem, 656, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":661
 *         return result
 * 
 *     def setdefault(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.setdefault(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_k_tuple_110 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_110)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_110);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_110));
  __pyx_k_codeobj_111 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_110, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__setdefault, 661, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_111)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":665
 *         observable_dict_dispatch(self)
 * 
 *     def update(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.update(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_k_tuple_113 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__largs), ((PyObject *)__pyx_n_s__largs)); if (unlikely(!__pyx_k_tuple_113)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_113);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_113));
  __pyx_k_codeobj_114 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_113, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__update, 665, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_114)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_InitGlobals(void) {
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_neg_2 = PyInt_FromLong(-2); if (unlikely(!__pyx_int_neg_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  return 0;
  __pyx_L1_error:;
  return -1;
}

#if PY_MAJOR_VERSION < 3
PyMODINIT_FUNC initproperties(void); /*proto*/
PyMODINIT_FUNC initproperties(void)
#else
PyMODINIT_FUNC PyInit_properties(void); /*proto*/
PyMODINIT_FUNC PyInit_properties(void)
#endif
{
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  #if CYTHON_REFNANNY
  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
  if (!__Pyx_RefNanny) {
      PyErr_Clear();
      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
      if (!__Pyx_RefNanny)
          Py_FatalError("failed to import 'refnanny' module");
  }
  #endif
  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_properties(void)", 0);
  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #ifdef __Pyx_CyFunction_USED
  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  #ifdef __Pyx_FusedFunction_USED
  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  #ifdef __Pyx_Generator_USED
  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  /*--- Library function declarations ---*/
  /*--- Threads initialization code ---*/
  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
  #ifdef WITH_THREAD /* Python build with threading support? */
  PyEval_InitThreads();
  #endif
  #endif
  /*--- Module creation code ---*/
  #if PY_MAJOR_VERSION < 3
  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("properties"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_30), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
  #else
  __pyx_m = PyModule_Create(&__pyx_moduledef);
  #endif
  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  Py_INCREF(__pyx_d);
  #if PY_MAJOR_VERSION >= 3
  {
    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (!PyDict_GetItemString(modules, "kivy.properties")) {
      if (unlikely(PyDict_SetItemString(modules, "kivy.properties", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
  }
  #endif
  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #if CYTHON_COMPILING_IN_PYPY
  Py_INCREF(__pyx_b);
  #endif
  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  /*--- Initialize various global constants etc. ---*/
  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
  if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  if (__pyx_module_is_main_kivy__properties) {
    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;};
  }
  /*--- Builtin init code ---*/
  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Constants init code ---*/
  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Global init code ---*/
  /*--- Variable export code ---*/
  /*--- Function export code ---*/
  /*--- Type init code ---*/
  __pyx_vtabptr_4kivy_10properties_Property = &__pyx_vtable_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_Property.init_storage = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, struct __pyx_obj_4kivy_10properties_PropertyStorage *))__pyx_f_4kivy_10properties_8Property_init_storage;
  __pyx_vtable_4kivy_10properties_Property.link = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_8Property_link;
  __pyx_vtable_4kivy_10properties_Property.link_deps = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_8Property_link_deps;
  __pyx_vtable_4kivy_10properties_Property.bind = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_8Property_bind;
  __pyx_vtable_4kivy_10properties_Property.unbind = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_8Property_unbind;
  __pyx_vtable_4kivy_10properties_Property.compare_value = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, PyObject *, PyObject *))__pyx_f_4kivy_10properties_8Property_compare_value;
  __pyx_vtable_4kivy_10properties_Property.set = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_8Property_set;
  __pyx_vtable_4kivy_10properties_Property.get = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_8Property_get;
  __pyx_vtable_4kivy_10properties_Property.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_8Property_check;
  __pyx_vtable_4kivy_10properties_Property.convert = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_8Property_convert;
  __pyx_vtable_4kivy_10properties_Property.dispatch = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_8Property_dispatch;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_Property) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_Property.tp_dict, __pyx_vtabptr_4kivy_10properties_Property) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "Property", (PyObject *)&__pyx_type_4kivy_10properties_Property) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_Property = &__pyx_type_4kivy_10properties_Property;
  __pyx_vtabptr_4kivy_10properties_NumericProperty = &__pyx_vtable_4kivy_10properties_NumericProperty;
  __pyx_vtable_4kivy_10properties_NumericProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_NumericProperty.__pyx_base.init_storage = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, struct __pyx_obj_4kivy_10properties_PropertyStorage *))__pyx_f_4kivy_10properties_15NumericProperty_init_storage;
  __pyx_vtable_4kivy_10properties_NumericProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_15NumericProperty_check;
  __pyx_vtable_4kivy_10properties_NumericProperty.__pyx_base.convert = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_15NumericProperty_convert;
  __pyx_vtable_4kivy_10properties_NumericProperty.parse_str = (float (*)(struct __pyx_obj_4kivy_10properties_NumericProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_15NumericProperty_parse_str;
  __pyx_vtable_4kivy_10properties_NumericProperty.parse_list = (float (*)(struct __pyx_obj_4kivy_10properties_NumericProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, PyObject *))__pyx_f_4kivy_10properties_15NumericProperty_parse_list;
  __pyx_type_4kivy_10properties_NumericProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_NumericProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_NumericProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_NumericProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "NumericProperty", (PyObject *)&__pyx_type_4kivy_10properties_NumericProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_NumericProperty = &__pyx_type_4kivy_10properties_NumericProperty;
  __pyx_vtabptr_4kivy_10properties_ReferenceListProperty = &__pyx_vtable_4kivy_10properties_ReferenceListProperty;
  __pyx_vtable_4kivy_10properties_ReferenceListProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_ReferenceListProperty.__pyx_base.init_storage = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, struct __pyx_obj_4kivy_10properties_PropertyStorage *))__pyx_f_4kivy_10properties_21ReferenceListProperty_init_storage;
  __pyx_vtable_4kivy_10properties_ReferenceListProperty.__pyx_base.link_deps = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_21ReferenceListProperty_link_deps;
  __pyx_vtable_4kivy_10properties_ReferenceListProperty.__pyx_base.set = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_21ReferenceListProperty_set;
  __pyx_vtable_4kivy_10properties_ReferenceListProperty.__pyx_base.get = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_21ReferenceListProperty_get;
  __pyx_vtable_4kivy_10properties_ReferenceListProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_21ReferenceListProperty_check;
  __pyx_vtable_4kivy_10properties_ReferenceListProperty.__pyx_base.convert = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_21ReferenceListProperty_convert;
  __pyx_vtable_4kivy_10properties_ReferenceListProperty.trigger_change = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_ReferenceListProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_21ReferenceListProperty_trigger_change;
  __pyx_type_4kivy_10properties_ReferenceListProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_ReferenceListProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_ReferenceListProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_ReferenceListProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "ReferenceListProperty", (PyObject *)&__pyx_type_4kivy_10properties_ReferenceListProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_ReferenceListProperty = &__pyx_type_4kivy_10properties_ReferenceListProperty;
  __pyx_vtabptr_4kivy_10properties_VariableListProperty = &__pyx_vtable_4kivy_10properties_VariableListProperty;
  __pyx_vtable_4kivy_10properties_VariableListProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_VariableListProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_20VariableListProperty_check;
  __pyx_vtable_4kivy_10properties_VariableListProperty.__pyx_base.convert = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_20VariableListProperty_convert;
  __pyx_vtable_4kivy_10properties_VariableListProperty._convert_numeric = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_VariableListProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_20VariableListProperty__convert_numeric;
  __pyx_vtable_4kivy_10properties_VariableListProperty.parse_str = (float (*)(struct __pyx_obj_4kivy_10properties_VariableListProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_20VariableListProperty_parse_str;
  __pyx_vtable_4kivy_10properties_VariableListProperty.parse_list = (float (*)(struct __pyx_obj_4kivy_10properties_VariableListProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, PyObject *))__pyx_f_4kivy_10properties_20VariableListProperty_parse_list;
  __pyx_type_4kivy_10properties_VariableListProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_VariableListProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_VariableListProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_VariableListProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "VariableListProperty", (PyObject *)&__pyx_type_4kivy_10properties_VariableListProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_VariableListProperty = &__pyx_type_4kivy_10properties_VariableListProperty;
  __pyx_vtabptr_4kivy_10properties_AliasProperty = &__pyx_vtable_4kivy_10properties_AliasProperty;
  __pyx_vtable_4kivy_10properties_AliasProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_AliasProperty.__pyx_base.init_storage = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, struct __pyx_obj_4kivy_10properties_PropertyStorage *))__pyx_f_4kivy_10properties_13AliasProperty_init_storage;
  __pyx_vtable_4kivy_10properties_AliasProperty.__pyx_base.link_deps = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_13AliasProperty_link_deps;
  __pyx_vtable_4kivy_10properties_AliasProperty.__pyx_base.set = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_13AliasProperty_set;
  __pyx_vtable_4kivy_10properties_AliasProperty.__pyx_base.get = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_13AliasProperty_get;
  __pyx_vtable_4kivy_10properties_AliasProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_13AliasProperty_check;
  __pyx_vtable_4kivy_10properties_AliasProperty.trigger_change = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_AliasProperty *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_13AliasProperty_trigger_change;
  __pyx_type_4kivy_10properties_AliasProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_AliasProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_AliasProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_AliasProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "AliasProperty", (PyObject *)&__pyx_type_4kivy_10properties_AliasProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_AliasProperty = &__pyx_type_4kivy_10properties_AliasProperty;
  __pyx_vtabptr_4kivy_10properties_DictProperty = &__pyx_vtable_4kivy_10properties_DictProperty;
  __pyx_vtable_4kivy_10properties_DictProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_DictProperty.__pyx_base.link = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_12DictProperty_link;
  __pyx_vtable_4kivy_10properties_DictProperty.__pyx_base.set = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_12DictProperty_set;
  __pyx_vtable_4kivy_10properties_DictProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_12DictProperty_check;
  __pyx_type_4kivy_10properties_DictProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_DictProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_DictProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_DictProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "DictProperty", (PyObject *)&__pyx_type_4kivy_10properties_DictProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_DictProperty = &__pyx_type_4kivy_10properties_DictProperty;
  __pyx_vtabptr_4kivy_10properties_ObjectProperty = &__pyx_vtable_4kivy_10properties_ObjectProperty;
  __pyx_vtable_4kivy_10properties_ObjectProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_ObjectProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_14ObjectProperty_check;
  __pyx_type_4kivy_10properties_ObjectProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_ObjectProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_ObjectProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_ObjectProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "ObjectProperty", (PyObject *)&__pyx_type_4kivy_10properties_ObjectProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_ObjectProperty = &__pyx_type_4kivy_10properties_ObjectProperty;
  __pyx_vtabptr_4kivy_10properties_StringProperty = &__pyx_vtable_4kivy_10properties_StringProperty;
  __pyx_vtable_4kivy_10properties_StringProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_StringProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_14StringProperty_check;
  __pyx_type_4kivy_10properties_StringProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_StringProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_StringProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_StringProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "StringProperty", (PyObject *)&__pyx_type_4kivy_10properties_StringProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_StringProperty = &__pyx_type_4kivy_10properties_StringProperty;
  __pyx_vtabptr_4kivy_10properties_BoundedNumericProperty = &__pyx_vtable_4kivy_10properties_BoundedNumericProperty;
  __pyx_vtable_4kivy_10properties_BoundedNumericProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_BoundedNumericProperty.__pyx_base.init_storage = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, struct __pyx_obj_4kivy_10properties_PropertyStorage *))__pyx_f_4kivy_10properties_22BoundedNumericProperty_init_storage;
  __pyx_vtable_4kivy_10properties_BoundedNumericProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_22BoundedNumericProperty_check;
  __pyx_type_4kivy_10properties_BoundedNumericProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_BoundedNumericProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_BoundedNumericProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_BoundedNumericProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "BoundedNumericProperty", (PyObject *)&__pyx_type_4kivy_10properties_BoundedNumericProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_BoundedNumericProperty = &__pyx_type_4kivy_10properties_BoundedNumericProperty;
  __pyx_vtabptr_4kivy_10properties_OptionProperty = &__pyx_vtable_4kivy_10properties_OptionProperty;
  __pyx_vtable_4kivy_10properties_OptionProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_OptionProperty.__pyx_base.init_storage = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, struct __pyx_obj_4kivy_10properties_PropertyStorage *))__pyx_f_4kivy_10properties_14OptionProperty_init_storage;
  __pyx_vtable_4kivy_10properties_OptionProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_14OptionProperty_check;
  __pyx_type_4kivy_10properties_OptionProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_OptionProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_OptionProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_OptionProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "OptionProperty", (PyObject *)&__pyx_type_4kivy_10properties_OptionProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_OptionProperty = &__pyx_type_4kivy_10properties_OptionProperty;
  __pyx_vtabptr_4kivy_10properties_ListProperty = &__pyx_vtable_4kivy_10properties_ListProperty;
  __pyx_vtable_4kivy_10properties_ListProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_ListProperty.__pyx_base.link = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_12ListProperty_link;
  __pyx_vtable_4kivy_10properties_ListProperty.__pyx_base.set = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4kivy_10properties_12ListProperty_set;
  __pyx_vtable_4kivy_10properties_ListProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_12ListProperty_check;
  __pyx_type_4kivy_10properties_ListProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_ListProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_ListProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_ListProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "ListProperty", (PyObject *)&__pyx_type_4kivy_10properties_ListProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_ListProperty = &__pyx_type_4kivy_10properties_ListProperty;
  __pyx_vtabptr_4kivy_10properties_BooleanProperty = &__pyx_vtable_4kivy_10properties_BooleanProperty;
  __pyx_vtable_4kivy_10properties_BooleanProperty.__pyx_base = *__pyx_vtabptr_4kivy_10properties_Property;
  __pyx_vtable_4kivy_10properties_BooleanProperty.__pyx_base.check = (PyObject *(*)(struct __pyx_obj_4kivy_10properties_Property *, struct __pyx_obj_4kivy_6_event_EventDispatcher *, PyObject *))__pyx_f_4kivy_10properties_15BooleanProperty_check;
  __pyx_type_4kivy_10properties_BooleanProperty.tp_base = __pyx_ptype_4kivy_10properties_Property;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_BooleanProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetVtable(__pyx_type_4kivy_10properties_BooleanProperty.tp_dict, __pyx_vtabptr_4kivy_10properties_BooleanProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "BooleanProperty", (PyObject *)&__pyx_type_4kivy_10properties_BooleanProperty) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_BooleanProperty = &__pyx_type_4kivy_10properties_BooleanProperty;
  if (PyType_Ready(&__pyx_type_4kivy_10properties_PropertyStorage) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "PropertyStorage", (PyObject *)&__pyx_type_4kivy_10properties_PropertyStorage) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_10properties_PropertyStorage = &__pyx_type_4kivy_10properties_PropertyStorage;
  /*--- Type import code ---*/
  __pyx_ptype_4kivy_6_event_ObjectWithUid = __Pyx_ImportType("kivy._event", "ObjectWithUid", sizeof(struct __pyx_obj_4kivy_6_event_ObjectWithUid), 1); if (unlikely(!__pyx_ptype_4kivy_6_event_ObjectWithUid)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_4kivy_6_event_EventDispatcher = __Pyx_ImportType("kivy._event", "EventDispatcher", sizeof(struct __pyx_obj_4kivy_6_event_EventDispatcher), 1); if (unlikely(!__pyx_ptype_4kivy_6_event_EventDispatcher)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_vtabptr_4kivy_6_event_EventDispatcher = (struct __pyx_vtabstruct_4kivy_6_event_EventDispatcher*)__Pyx_GetVtable(__pyx_ptype_4kivy_6_event_EventDispatcher->tp_dict); if (unlikely(!__pyx_vtabptr_4kivy_6_event_EventDispatcher)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Variable import code ---*/
  /*--- Function import code ---*/
  /*--- Execution code ---*/

  /* "kivy\properties.pyx":168
 * '''
 * 
 * __all__ = ('Property',             # <<<<<<<<<<<<<<
 *            'NumericProperty', 'StringProperty', 'ListProperty',
 *            'ObjectProperty', 'BooleanProperty', 'BoundedNumericProperty',
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s____all__, ((PyObject *)__pyx_k_tuple_34)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":174
 *            'DictProperty', 'VariableListProperty')
 * 
 * from weakref import ref             # <<<<<<<<<<<<<<
 * 
 * cdef float g_dpi = -1
 */
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__ref));
  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__ref));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ref));
  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__weakref), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__ref); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__ref, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "kivy\properties.pyx":176
 * from weakref import ref
 * 
 * cdef float g_dpi = -1             # <<<<<<<<<<<<<<
 * cdef float g_density = -1
 * cdef float g_fontscale = -1
 */
  __pyx_v_4kivy_10properties_g_dpi = -1.0;

  /* "kivy\properties.pyx":177
 * 
 * cdef float g_dpi = -1
 * cdef float g_density = -1             # <<<<<<<<<<<<<<
 * cdef float g_fontscale = -1
 * 
 */
  __pyx_v_4kivy_10properties_g_density = -1.0;

  /* "kivy\properties.pyx":178
 * cdef float g_dpi = -1
 * cdef float g_density = -1
 * cdef float g_fontscale = -1             # <<<<<<<<<<<<<<
 * 
 * NUMERIC_FORMATS = ('in', 'px', 'dp', 'sp', 'pt', 'cm', 'mm')
 */
  __pyx_v_4kivy_10properties_g_fontscale = -1.0;

  /* "kivy\properties.pyx":180
 * cdef float g_fontscale = -1
 * 
 * NUMERIC_FORMATS = ('in', 'px', 'dp', 'sp', 'pt', 'cm', 'mm')             # <<<<<<<<<<<<<<
 * 
 * cpdef float dpi2px(value, ext):
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__NUMERIC_FORMATS, ((PyObject *)__pyx_k_tuple_35)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "kivy\properties.pyx":509
 * 
 * 
 * class ObservableList(list):             # <<<<<<<<<<<<<<
 *     # Internal class to observe changes inside a native python list.
 *     def __init__(self, *largs):
 */
  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));

  /* "kivy\properties.pyx":511
 * class ObservableList(list):
 *     # Internal class to observe changes inside a native python list.
 *     def __init__(self, *largs):             # <<<<<<<<<<<<<<
 *         self.prop = largs[0]
 *         self.obj = ref(largs[1])
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_1__init__, 0, __pyx_n_s_39, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_37)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____init__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":516
 *         super(ObservableList, self).__init__(*largs[2:])
 * 
 *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
 *         list.__setitem__(self, key, value)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_3__setitem__, 0, __pyx_n_s_43, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_42)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____setitem__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":520
 *         observable_list_dispatch(self)
 * 
 *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
 *         list.__delitem__(self, key)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_5__delitem__, 0, __pyx_n_s_46, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_45)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____delitem__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":524
 *         observable_list_dispatch(self)
 * 
 *     def __setslice__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__setslice__(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_7__setslice__, 0, __pyx_n_s_49, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_48)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____setslice__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":528
 *         observable_list_dispatch(self)
 * 
 *     def __delslice__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__delslice__(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_9__delslice__, 0, __pyx_n_s_52, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_51)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____delslice__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":532
 *         observable_list_dispatch(self)
 * 
 *     def __iadd__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__iadd__(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_11__iadd__, 0, __pyx_n_s_55, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_54)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____iadd__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":536
 *         observable_list_dispatch(self)
 * 
 *     def __imul__(self, *largs):             # <<<<<<<<<<<<<<
 *         list.__imul__(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_13__imul__, 0, __pyx_n_s_58, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_57)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____imul__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":540
 *         observable_list_dispatch(self)
 * 
 *     def append(self, *largs):             # <<<<<<<<<<<<<<
 *         list.append(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_15append, 0, __pyx_n_s_61, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_60)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__append, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":544
 *         observable_list_dispatch(self)
 * 
 *     def remove(self, *largs):             # <<<<<<<<<<<<<<
 *         list.remove(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_17remove, 0, __pyx_n_s_64, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_63)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__remove, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":548
 *         observable_list_dispatch(self)
 * 
 *     def insert(self, *largs):             # <<<<<<<<<<<<<<
 *         list.insert(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_19insert, 0, __pyx_n_s_67, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_66)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__insert, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":552
 *         observable_list_dispatch(self)
 * 
 *     def pop(self, *largs):             # <<<<<<<<<<<<<<
 *         cdef object result = list.pop(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_21pop, 0, __pyx_n_s_70, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_69)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__pop, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":557
 *         return result
 * 
 *     def extend(self, *largs):             # <<<<<<<<<<<<<<
 *         list.extend(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_23extend, 0, __pyx_n_s_73, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_72)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__extend, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":561
 *         observable_list_dispatch(self)
 * 
 *     def sort(self, *largs):             # <<<<<<<<<<<<<<
 *         list.sort(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_25sort, 0, __pyx_n_s_76, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_75)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__sort, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":565
 *         observable_list_dispatch(self)
 * 
 *     def reverse(self, *largs):             # <<<<<<<<<<<<<<
 *         list.reverse(self, *largs)
 *         observable_list_dispatch(self)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableList_27reverse, 0, __pyx_n_s_79, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_78)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__reverse, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "kivy\properties.pyx":509
 * 
 * 
 * class ObservableList(list):             # <<<<<<<<<<<<<<
 *     # Internal class to observe changes inside a native python list.
 *     def __init__(self, *largs):
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)((PyObject*)(&PyList_Type))));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)(&PyList_Type))));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyList_Type))));
  __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2), __pyx_n_s__ObservableList, __pyx_n_s__ObservableList, __pyx_n_s_40); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__ObservableList, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;

  /* "kivy\properties.pyx":602
 * 
 * 
 * class ObservableDict(dict):             # <<<<<<<<<<<<<<
 *     # Internal class to observe changes inside a native python dict.
 *     def __init__(self, *largs):
 */
  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));

  /* "kivy\properties.pyx":604
 * class ObservableDict(dict):
 *     # Internal class to observe changes inside a native python dict.
 *     def __init__(self, *largs):             # <<<<<<<<<<<<<<
 *         self.prop = largs[0]
 *         self.obj = largs[1]
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_1__init__, 0, __pyx_n_s_82, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_81)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____init__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":609
 *         super(ObservableDict, self).__init__(*largs[2:])
 * 
 *     def _weak_return(self, item):             # <<<<<<<<<<<<<<
 *         if isinstance(item, ref):
 *             return item()
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_3_weak_return, 0, __pyx_n_s_85, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_84)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s___weak_return, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":614
 *         return item
 * 
 *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
 *         try:
 *             return self._weak_return(self.__getitem__(attr))
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_5__getattr__, 0, __pyx_n_s_88, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_87)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____getattr__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":624
 *                 raise KeyError(attr)
 * 
 *     def __setattr__(self, attr, value):             # <<<<<<<<<<<<<<
 *         if attr in ('prop', 'obj'):
 *             super(ObservableDict, self).__setattr__(attr, value)
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_7__setattr__, 0, __pyx_n_s_91, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_90)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____setattr__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":630
 *         self.__setitem__(attr, value)
 * 
 *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
 *         if value is None:
 *             # remove attribute if value is None
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_9__setitem__, 0, __pyx_n_s_94, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_93)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____setitem__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":639
 *         observable_dict_dispatch(self)
 * 
 *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
 *         dict.__delitem__(self, key)
 *         observable_dict_dispatch(self)
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_11__delitem__, 0, __pyx_n_s_97, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_96)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____delitem__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":643
 *         observable_dict_dispatch(self)
 * 
 *     def clear(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.clear(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_13clear, 0, __pyx_n_s_100, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_99)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__clear, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":647
 *         observable_dict_dispatch(self)
 * 
 *     def remove(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.remove(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_15remove, 0, __pyx_n_s_103, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_102)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__remove, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":651
 *         observable_dict_dispatch(self)
 * 
 *     def pop(self, *largs):             # <<<<<<<<<<<<<<
 *         cdef object result = dict.pop(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_17pop, 0, __pyx_n_s_106, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_105)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__pop, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":656
 *         return result
 * 
 *     def popitem(self, *largs):             # <<<<<<<<<<<<<<
 *         cdef object result = dict.popitem(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_19popitem, 0, __pyx_n_s_109, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_108)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__popitem, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":661
 *         return result
 * 
 *     def setdefault(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.setdefault(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_21setdefault, 0, __pyx_n_s_112, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_111)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__setdefault, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":665
 *         observable_dict_dispatch(self)
 * 
 *     def update(self, *largs):             # <<<<<<<<<<<<<<
 *         dict.update(self, *largs)
 *         observable_dict_dispatch(self)
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_4kivy_10properties_14ObservableDict_23update, 0, __pyx_n_s_115, NULL, __pyx_n_s_40, ((PyObject *)__pyx_k_codeobj_114)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__update, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "kivy\properties.pyx":602
 * 
 * 
 * class ObservableDict(dict):             # <<<<<<<<<<<<<<
 *     # Internal class to observe changes inside a native python dict.
 *     def __init__(self, *largs):
 */
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)((PyObject*)(&PyDict_Type))));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)((PyObject*)(&PyDict_Type))));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyDict_Type))));
  __pyx_t_1 = __Pyx_CreateClass(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2), __pyx_n_s__ObservableDict, __pyx_n_s__ObservableDict, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__ObservableDict, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;

  /* "kivy\properties.pyx":729
 *     '''
 * 
 *     def __init__(self, defaultvalue=True, **kw):             # <<<<<<<<<<<<<<
 *         super(BooleanProperty, self).__init__(defaultvalue, **kw)
 * 
 */
  __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_k_14 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;

  /* "kivy\properties.pyx":1
 * '''             # <<<<<<<<<<<<<<
 * Properties
 * ==========
 */
  __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;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  if (__pyx_m) {
    __Pyx_AddTraceback("init kivy.properties", __pyx_clineno, __pyx_lineno, __pyx_filename);
    Py_DECREF(__pyx_m); __pyx_m = 0;
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init kivy.properties");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if PY_MAJOR_VERSION < 3
  return;
  #else
  return __pyx_m;
  #endif
}

/* Runtime support code */
#if CYTHON_REFNANNY
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule((char *)modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif /* CYTHON_REFNANNY */

static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
    if (unlikely(!result)) {
        PyErr_Format(PyExc_NameError,
#if PY_MAJOR_VERSION >= 3
            "name '%U' is not defined", name);
#else
            "name '%s' is not defined", PyString_AS_STRING(name));
#endif
    }
    return result;
}

static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Format(PyExc_ImportError,
        #if PY_MAJOR_VERSION < 3
            "cannot import name %.230s", PyString_AS_STRING(name));
        #else
            "cannot import name %S", name);
        #endif
    }
    return value;
}

static double __Pyx__PyObject_AsDouble(PyObject* obj) {
    PyObject* float_value;
#if CYTHON_COMPILING_IN_PYPY
    float_value = PyNumber_Float(obj);
#else
    PyNumberMethods *nb = Py_TYPE(obj)->tp_as_number;
    if (likely(nb) && likely(nb->nb_float)) {
        float_value = nb->nb_float(obj);
        if (likely(float_value) && unlikely(!PyFloat_Check(float_value))) {
            PyErr_Format(PyExc_TypeError,
                "__float__ returned non-float (type %.200s)",
                Py_TYPE(float_value)->tp_name);
            Py_DECREF(float_value);
            goto bad;
        }
    } else if (PyUnicode_CheckExact(obj) || PyBytes_CheckExact(obj)) {
#if PY_MAJOR_VERSION >= 3
        float_value = PyFloat_FromString(obj);
#else
        float_value = PyFloat_FromString(obj, 0);
#endif
    } else {
        PyObject* args = PyTuple_New(1);
        if (unlikely(!args)) goto bad;
        PyTuple_SET_ITEM(args, 0, obj);
        float_value = PyObject_Call((PyObject*)&PyFloat_Type, args, 0);
        PyTuple_SET_ITEM(args, 0, 0);
        Py_DECREF(args);
    }
#endif
    if (likely(float_value)) {
        double value = PyFloat_AS_DOUBLE(float_value);
        Py_DECREF(float_value);
        return value;
    }
bad:
    return (double)-1;
}

static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    tmp_type = tstate->curexc_type;
    tmp_value = tstate->curexc_value;
    tmp_tb = tstate->curexc_traceback;
    tstate->curexc_type = type;
    tstate->curexc_value = value;
    tstate->curexc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#else
    PyErr_Restore(type, value, tb);
#endif
}
static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyThreadState *tstate = PyThreadState_GET();
    *type = tstate->curexc_type;
    *value = tstate->curexc_value;
    *tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
#else
    PyErr_Fetch(type, value, tb);
#endif
}

static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename) {
    PyObject *old_exc, *old_val, *old_tb;
    PyObject *ctx;
    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
    #if PY_MAJOR_VERSION < 3
    ctx = PyString_FromString(name);
    #else
    ctx = PyUnicode_FromString(name);
    #endif
    __Pyx_ErrRestore(old_exc, old_val, old_tb);
    if (!ctx) {
        PyErr_WriteUnraisable(Py_None);
    } else {
        PyErr_WriteUnraisable(ctx);
        Py_DECREF(ctx);
    }
}

static void __Pyx_RaiseArgtupleInvalid(
    const char* func_name,
    int exact,
    Py_ssize_t num_min,
    Py_ssize_t num_max,
    Py_ssize_t num_found)
{
    Py_ssize_t num_expected;
    const char *more_or_less;
    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    PyErr_Format(PyExc_TypeError,
                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
                 func_name, more_or_less, num_expected,
                 (num_expected == 1) ? "" : "s", num_found);
}

static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        #if PY_MAJOR_VERSION >= 3
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
        #else
        "%s() got multiple values for keyword argument '%s'", func_name,
        PyString_AsString(kw_name));
        #endif
}

static int __Pyx_ParseOptionalKeywords(
    PyObject *kwds,
    PyObject **argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject *key = 0, *value = 0;
    Py_ssize_t pos = 0;
    PyObject*** name;
    PyObject*** first_kw_arg = argnames + num_pos_args;
    while (PyDict_Next(kwds, &pos, &key, &value)) {
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            values[name-argnames] = value;
            continue;
        }
        name = first_kw_arg;
        #if PY_MAJOR_VERSION < 3
        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
            while (*name) {
                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
                        && _PyString_Eq(**name, key)) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    if ((**argname == key) || (
                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
                             && _PyString_Eq(**argname, key))) {
                        goto arg_passed_twice;
                    }
                    argname++;
                }
            }
        } else
        #endif
        if (likely(PyUnicode_Check(key))) {
            while (*name) {
                int cmp = (**name == key) ? 0 :
                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
                #endif
                    PyUnicode_Compare(**name, key);
                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                if (cmp == 0) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    int cmp = (**argname == key) ? 0 :
                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
                    #endif
                        PyUnicode_Compare(**argname, key);
                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                    if (cmp == 0) goto arg_passed_twice;
                    argname++;
                }
            }
        } else
            goto invalid_keyword_type;
        if (kwds2) {
            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
        } else {
            goto invalid_keyword;
        }
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, key);
    goto bad;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%s() keywords must be strings", function_name);
    goto bad;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%s() got an unexpected keyword argument '%s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
bad:
    return -1;
}

static CYTHON_INLINE int __Pyx_CheckKeywordStrings(
    PyObject *kwdict,
    const char* function_name,
    int kw_allowed)
{
    PyObject* key = 0;
    Py_ssize_t pos = 0;
#if CPYTHON_COMPILING_IN_PYPY
    if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0))
        goto invalid_keyword;
    return 1;
#else
    while (PyDict_Next(kwdict, &pos, &key, 0)) {
        #if PY_MAJOR_VERSION < 3
        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
        #endif
            if (unlikely(!PyUnicode_Check(key)))
                goto invalid_keyword_type;
    }
    if ((!kw_allowed) && unlikely(key))
        goto invalid_keyword;
    return 1;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%s() keywords must be strings", function_name);
    return 0;
#endif
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%s() got an unexpected keyword argument '%s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
    return 0;
}

static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) {
    PyObject* value;
#if PY_MAJOR_VERSION >= 3
    value = PyDict_GetItemWithError(d, key);
    if (unlikely(!value)) {
        if (unlikely(PyErr_Occurred()))
            return NULL;
        value = default_value;
    }
    Py_INCREF(value);
#else
    if (PyString_CheckExact(key) || PyUnicode_CheckExact(key) || PyInt_CheckExact(key)) {
        value = PyDict_GetItem(d, key);
        if (unlikely(!value)) {
            value = default_value;
        }
        Py_INCREF(value);
    } else {
        if (default_value == Py_None)
            default_value = NULL;
        value = PyObject_CallMethodObjArgs(
            d, __pyx_n_s__get, key, default_value, NULL);
    }
#endif
    return value;
}

#if PY_MAJOR_VERSION < 3
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                        CYTHON_UNUSED PyObject *cause) {
    Py_XINCREF(type);
    if (!value || value == Py_None)
        value = NULL;
    else
        Py_INCREF(value);
    if (!tb || tb == Py_None)
        tb = NULL;
    else {
        Py_INCREF(tb);
        if (!PyTraceBack_Check(tb)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: arg 3 must be a traceback or None");
            goto raise_error;
        }
    }
    #if PY_VERSION_HEX < 0x02050000
    if (PyClass_Check(type)) {
    #else
    if (PyType_Check(type)) {
    #endif
#if CYTHON_COMPILING_IN_PYPY
        if (!value) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
#endif
        PyErr_NormalizeException(&type, &value, &tb);
    } else {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        value = type;
        #if PY_VERSION_HEX < 0x02050000
        if (PyInstance_Check(type)) {
            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
            Py_INCREF(type);
        } else {
            type = 0;
            PyErr_SetString(PyExc_TypeError,
                "raise: exception must be an old-style class or instance");
            goto raise_error;
        }
        #else
        type = (PyObject*) Py_TYPE(type);
        Py_INCREF(type);
        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: exception class must be a subclass of BaseException");
            goto raise_error;
        }
        #endif
    }
    __Pyx_ErrRestore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}
#else /* Python 3+ */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    PyObject* owned_instance = NULL;
    if (tb == Py_None) {
        tb = 0;
    } else if (tb && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto bad;
    }
    if (value == Py_None)
        value = 0;
    if (PyExceptionInstance_Check(type)) {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto bad;
        }
        value = type;
        type = (PyObject*) Py_TYPE(value);
    } else if (PyExceptionClass_Check(type)) {
        PyObject *args;
        if (!value)
            args = PyTuple_New(0);
        else if (PyTuple_Check(value)) {
            Py_INCREF(value);
            args = value;
        } else
            args = PyTuple_Pack(1, value);
        if (!args)
            goto bad;
        owned_instance = PyEval_CallObject(type, args);
        Py_DECREF(args);
        if (!owned_instance)
            goto bad;
        value = owned_instance;
        if (!PyExceptionInstance_Check(value)) {
            PyErr_Format(PyExc_TypeError,
                         "calling %R should have returned an instance of "
                         "BaseException, not %R",
                         type, Py_TYPE(value));
            goto bad;
        }
    } else {
        PyErr_SetString(PyExc_TypeError,
            "raise: exception class must be a subclass of BaseException");
        goto bad;
    }
#if PY_VERSION_HEX >= 0x03030000
    if (cause) {
#else
    if (cause && cause != Py_None) {
#endif
        PyObject *fixed_cause;
        if (cause == Py_None) {
            fixed_cause = NULL;
        } else if (PyExceptionClass_Check(cause)) {
            fixed_cause = PyObject_CallObject(cause, NULL);
            if (fixed_cause == NULL)
                goto bad;
        } else if (PyExceptionInstance_Check(cause)) {
            fixed_cause = cause;
            Py_INCREF(fixed_cause);
        } else {
            PyErr_SetString(PyExc_TypeError,
                            "exception causes must derive from "
                            "BaseException");
            goto bad;
        }
        PyException_SetCause(value, fixed_cause);
    }
    PyErr_SetObject(type, value);
    if (tb) {
        PyThreadState *tstate = PyThreadState_GET();
        PyObject* tmp_tb = tstate->curexc_traceback;
        if (tb != tmp_tb) {
            Py_INCREF(tb);
            tstate->curexc_traceback = tb;
            Py_XDECREF(tmp_tb);
        }
    }
bad:
    Py_XDECREF(owned_instance);
    return;
}
#endif

static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
    const char *name, int exact)
{
    if (!type) {
        PyErr_Format(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (none_allowed && obj == Py_None) return 1;
    else if (exact) {
        if (Py_TYPE(obj) == type) return 1;
    }
    else {
        if (PyObject_TypeCheck(obj, type)) return 1;
    }
    PyErr_Format(PyExc_TypeError,
        "Argument '%s' has incorrect type (expected %s, got %s)",
        name, type->tp_name, Py_TYPE(obj)->tp_name);
    return 0;
}

static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    if (unlikely(!type)) {
        PyErr_Format(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (likely(PyObject_TypeCheck(obj, type)))
        return 1;
    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
                 Py_TYPE(obj)->tp_name, type->tp_name);
    return 0;
}

#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) {
    Py_ssize_t start = *_start, stop = *_stop, length = *_length;
    if (start < 0) {
        start += length;
        if (start < 0)
            start = 0;
    }
    if (stop < 0)
        stop += length;
    else if (stop > length)
        stop = length;
    *_length = stop - start;
    *_start = start;
    *_stop = stop;
}
static CYTHON_INLINE void __Pyx_copy_object_array(PyObject** CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) {
    PyObject *v;
    Py_ssize_t i;
    for (i = 0; i < length; i++) {
        v = dest[i] = src[i];
        Py_INCREF(v);
    }
}
static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(
            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    PyObject* dest;
    Py_ssize_t length = PyList_GET_SIZE(src);
    __Pyx_crop_slice(&start, &stop, &length);
    if (unlikely(length <= 0))
        return PyList_New(0);
    dest = PyList_New(length);
    if (unlikely(!dest))
        return NULL;
    __Pyx_copy_object_array(
        ((PyListObject*)src)->ob_item + start,
        ((PyListObject*)dest)->ob_item,
        length);
    return dest;
}
static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(
            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    PyObject* dest;
    Py_ssize_t length = PyTuple_GET_SIZE(src);
    __Pyx_crop_slice(&start, &stop, &length);
    if (unlikely(length <= 0))
        return PyTuple_New(0);
    dest = PyTuple_New(length);
    if (unlikely(!dest))
        return NULL;
    __Pyx_copy_object_array(
        ((PyTupleObject*)src)->ob_item + start,
        ((PyTupleObject*)dest)->ob_item,
        length);
    return dest;
}
#endif

static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *local_type, *local_value, *local_tb;
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    local_type = tstate->curexc_type;
    local_value = tstate->curexc_value;
    local_tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
#else
    PyErr_Fetch(&local_type, &local_value, &local_tb);
#endif
    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
#if CYTHON_COMPILING_IN_CPYTHON
    if (unlikely(tstate->curexc_type))
#else
    if (unlikely(PyErr_Occurred()))
#endif
        goto bad;
    #if PY_MAJOR_VERSION >= 3
    if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
        goto bad;
    #endif
    Py_INCREF(local_type);
    Py_INCREF(local_value);
    Py_INCREF(local_tb);
    *type = local_type;
    *value = local_value;
    *tb = local_tb;
#if CYTHON_COMPILING_IN_CPYTHON
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = local_type;
    tstate->exc_value = local_value;
    tstate->exc_traceback = local_tb;
    /* Make sure tstate is in a consistent state when we XDECREF
       these objects (DECREF may run arbitrary code). */
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#else
    PyErr_SetExcInfo(local_type, local_value, local_tb);
#endif
    return 0;
bad:
    *type = 0;
    *value = 0;
    *tb = 0;
    Py_XDECREF(local_type);
    Py_XDECREF(local_value);
    Py_XDECREF(local_tb);
    return -1;
}

static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (!j) return NULL;
    r = PyObject_GetItem(o, j);
    Py_DECREF(j);
    return r;
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck) {
#if CYTHON_COMPILING_IN_CPYTHON
    if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
    if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
        PyObject *r = PyList_GET_ITEM(o, i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck) {
#if CYTHON_COMPILING_IN_CPYTHON
    if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
    if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
        PyObject *r = PyTuple_GET_ITEM(o, i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                     int is_list, int wraparound, int boundscheck) {
#if CYTHON_COMPILING_IN_CPYTHON
    if (is_list || PyList_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
            PyObject *r = PyList_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    }
    else if (PyTuple_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
            PyObject *r = PyTuple_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    } else {
        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
        if (likely(m && m->sq_item)) {
            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
                Py_ssize_t l = m->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
                        PyErr_Clear();
                    else
                        return NULL;
                }
            }
            return m->sq_item(o, i);
        }
    }
#else
    if (is_list || PySequence_Check(o)) {
        return PySequence_GetItem(o, i);
    }
#endif
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
}

static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
        PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
        int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyMappingMethods* mp;
#if PY_MAJOR_VERSION < 3
    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
    if (likely(ms && ms->sq_slice)) {
        if (!has_cstart) {
            if (_py_start && (*_py_start != Py_None)) {
                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstart = 0;
        }
        if (!has_cstop) {
            if (_py_stop && (*_py_stop != Py_None)) {
                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstop = PY_SSIZE_T_MAX;
        }
        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
            Py_ssize_t l = ms->sq_length(obj);
            if (likely(l >= 0)) {
                if (cstop < 0) {
                    cstop += l;
                    if (cstop < 0) cstop = 0;
                }
                if (cstart < 0) {
                    cstart += l;
                    if (cstart < 0) cstart = 0;
                }
            } else {
                if (PyErr_ExceptionMatches(PyExc_OverflowError))
                    PyErr_Clear();
                else
                    goto bad;
            }
        }
        return ms->sq_slice(obj, cstart, cstop);
    }
#endif
    mp = Py_TYPE(obj)->tp_as_mapping;
    if (likely(mp && mp->mp_subscript))
#endif
    {
        PyObject* result;
        PyObject *py_slice, *py_start, *py_stop;
        if (_py_slice) {
            py_slice = *_py_slice;
        } else {
            PyObject* owned_start = NULL;
            PyObject* owned_stop = NULL;
            if (_py_start) {
                py_start = *_py_start;
            } else {
                if (has_cstart) {
                    owned_start = py_start = PyInt_FromSsize_t(cstart);
                    if (unlikely(!py_start)) goto bad;
                } else
                    py_start = Py_None;
            }
            if (_py_stop) {
                py_stop = *_py_stop;
            } else {
                if (has_cstop) {
                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
                    if (unlikely(!py_stop)) {
                        Py_XDECREF(owned_start);
                        goto bad;
                    }
                } else
                    py_stop = Py_None;
            }
            py_slice = PySlice_New(py_start, py_stop, Py_None);
            Py_XDECREF(owned_start);
            Py_XDECREF(owned_stop);
            if (unlikely(!py_slice)) goto bad;
        }
#if CYTHON_COMPILING_IN_CPYTHON
        result = mp->mp_subscript(obj, py_slice);
#else
        result = PyObject_GetItem(obj, py_slice);
#endif
        if (!_py_slice) {
            Py_DECREF(py_slice);
        }
        return result;
    }
    PyErr_Format(PyExc_TypeError,
        "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name);
bad:
    return NULL;
}

static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
    PyObject *result;
#if CYTHON_COMPILING_IN_CPYTHON
    result = PyDict_GetItem(__pyx_d, name);
    if (result) {
        Py_INCREF(result);
    } else {
#else
    result = PyObject_GetItem(__pyx_d, name);
    if (!result) {
        PyErr_Clear();
#endif
        result = __Pyx_GetBuiltinName(name);
    }
    return result;
}

static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
#if CYTHON_COMPILING_IN_CPYTHON
#if PY_MAJOR_VERSION >= 3
    if (likely(PyUnicode_Check(n)))
#else
    if (likely(PyString_Check(n)))
#endif
        return __Pyx_PyObject_GetAttrStr(o, n);
#endif
    return PyObject_GetAttr(o, n);
}

static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) {
    PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
}

static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
    if (!ob)
        goto bad;
    if (PyDict_SetItem(dict, __pyx_n_s____pyx_vtable__, ob) < 0)
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

static void* __Pyx_GetVtable(PyObject *dict) {
    void* ptr;
    PyObject *ob = PyObject_GetItem(dict, __pyx_n_s____pyx_vtable__);
    if (!ob)
        goto bad;
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
    ptr = PyCapsule_GetPointer(ob, 0);
#else
    ptr = PyCObject_AsVoidPtr(ob);
#endif
    if (!ptr && !PyErr_Occurred())
        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
    Py_DECREF(ob);
    return ptr;
bad:
    Py_XDECREF(ob);
    return NULL;
}

static PyObject *
__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
{
    if (unlikely(op->func_doc == NULL)) {
        if (op->func.m_ml->ml_doc) {
#if PY_MAJOR_VERSION >= 3
            op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
#else
            op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
#endif
            if (unlikely(op->func_doc == NULL))
                return NULL;
        } else {
            Py_INCREF(Py_None);
            return Py_None;
        }
    }
    Py_INCREF(op->func_doc);
    return op->func_doc;
}
static int
__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value)
{
    PyObject *tmp = op->func_doc;
    if (value == NULL)
        value = Py_None; /* Mark as deleted */
    Py_INCREF(value);
    op->func_doc = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op)
{
    if (unlikely(op->func_name == NULL)) {
#if PY_MAJOR_VERSION >= 3
        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
#else
        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
#endif
        if (unlikely(op->func_name == NULL))
            return NULL;
    }
    Py_INCREF(op->func_name);
    return op->func_name;
}
static int
__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
#else
    if (unlikely(value == NULL || !PyString_Check(value))) {
#endif
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    tmp = op->func_name;
    Py_INCREF(value);
    op->func_name = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op)
{
    Py_INCREF(op->func_qualname);
    return op->func_qualname;
}
static int
__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
#else
    if (unlikely(value == NULL || !PyString_Check(value))) {
#endif
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    tmp = op->func_qualname;
    Py_INCREF(value);
    op->func_qualname = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
{
    PyObject *self;
    self = m->func_closure;
    if (self == NULL)
        self = Py_None;
    Py_INCREF(self);
    return self;
}
static PyObject *
__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op)
{
    if (unlikely(op->func_dict == NULL)) {
        op->func_dict = PyDict_New();
        if (unlikely(op->func_dict == NULL))
            return NULL;
    }
    Py_INCREF(op->func_dict);
    return op->func_dict;
}
static int
__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value)
{
    PyObject *tmp;
    if (unlikely(value == NULL)) {
        PyErr_SetString(PyExc_TypeError,
               "function's dictionary may not be deleted");
        return -1;
    }
    if (unlikely(!PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
               "setting function's dictionary to a non-dict");
        return -1;
    }
    tmp = op->func_dict;
    Py_INCREF(value);
    op->func_dict = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_globals(CYTHON_UNUSED __pyx_CyFunctionObject *op)
{
    PyObject* dict = PyModule_GetDict(__pyx_m);
    Py_XINCREF(dict);
    return dict;
}
static PyObject *
__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op)
{
    Py_INCREF(Py_None);
    return Py_None;
}
static PyObject *
__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op)
{
    PyObject* result = (op->func_code) ? op->func_code : Py_None;
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
    PyObject *res = op->defaults_getter((PyObject *) op);
    if (unlikely(!res))
        return -1;
    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
    Py_INCREF(op->defaults_tuple);
    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
    Py_INCREF(op->defaults_kwdict);
    Py_DECREF(res);
    return 0;
}
static int
__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) {
    PyObject* tmp;
    if (!value) {
        value = Py_None;
    } else if (value != Py_None && !PyTuple_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__defaults__ must be set to a tuple object");
        return -1;
    }
    Py_INCREF(value);
    tmp = op->defaults_tuple;
    op->defaults_tuple = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) {
    PyObject* result = op->defaults_tuple;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
            result = op->defaults_tuple;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) {
    PyObject* tmp;
    if (!value) {
        value = Py_None;
    } else if (value != Py_None && !PyDict_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__kwdefaults__ must be set to a dict object");
        return -1;
    }
    Py_INCREF(value);
    tmp = op->defaults_kwdict;
    op->defaults_kwdict = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) {
    PyObject* result = op->defaults_kwdict;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
            result = op->defaults_kwdict;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) {
    PyObject* tmp;
    if (!value || value == Py_None) {
        value = NULL;
    } else if (!PyDict_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__annotations__ must be set to a dict object");
        return -1;
    }
    Py_XINCREF(value);
    tmp = op->func_annotations;
    op->func_annotations = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) {
    PyObject* result = op->func_annotations;
    if (unlikely(!result)) {
        result = PyDict_New();
        if (unlikely(!result)) return NULL;
        op->func_annotations = result;
    }
    Py_INCREF(result);
    return result;
}
static PyGetSetDef __pyx_CyFunction_getsets[] = {
    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
    {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
    {0, 0, 0, 0, 0}
};
#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */
#define PY_WRITE_RESTRICTED WRITE_RESTRICTED
#endif
static PyMemberDef __pyx_CyFunction_members[] = {
    {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0},
    {0, 0, 0,  0, 0}
};
static PyObject *
__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
{
#if PY_MAJOR_VERSION >= 3
    return PyUnicode_FromString(m->func.m_ml->ml_name);
#else
    return PyString_FromString(m->func.m_ml->ml_name);
#endif
}
static PyMethodDef __pyx_CyFunction_methods[] = {
    {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
    {0, 0, 0, 0}
};
static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname,
                                      PyObject *closure, PyObject *module, PyObject* code) {
    __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
    if (op == NULL)
        return NULL;
    op->flags = flags;
    op->func_weakreflist = NULL;
    op->func.m_ml = ml;
    op->func.m_self = (PyObject *) op;
    Py_XINCREF(closure);
    op->func_closure = closure;
    Py_XINCREF(module);
    op->func.m_module = module;
    op->func_dict = NULL;
    op->func_name = NULL;
    Py_INCREF(qualname);
    op->func_qualname = qualname;
    op->func_doc = NULL;
    op->func_classobj = NULL;
    Py_XINCREF(code);
    op->func_code = code;
    op->defaults_pyobjects = 0;
    op->defaults = NULL;
    op->defaults_tuple = NULL;
    op->defaults_kwdict = NULL;
    op->defaults_getter = NULL;
    op->func_annotations = NULL;
    PyObject_GC_Track(op);
    return (PyObject *) op;
}
static int
__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
{
    Py_CLEAR(m->func_closure);
    Py_CLEAR(m->func.m_module);
    Py_CLEAR(m->func_dict);
    Py_CLEAR(m->func_name);
    Py_CLEAR(m->func_qualname);
    Py_CLEAR(m->func_doc);
    Py_CLEAR(m->func_code);
    Py_CLEAR(m->func_classobj);
    Py_CLEAR(m->defaults_tuple);
    Py_CLEAR(m->defaults_kwdict);
    Py_CLEAR(m->func_annotations);
    if (m->defaults) {
        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
        int i;
        for (i = 0; i < m->defaults_pyobjects; i++)
            Py_XDECREF(pydefaults[i]);
        PyMem_Free(m->defaults);
        m->defaults = NULL;
    }
    return 0;
}
static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    PyObject_GC_UnTrack(m);
    if (m->func_weakreflist != NULL)
        PyObject_ClearWeakRefs((PyObject *) m);
    __Pyx_CyFunction_clear(m);
    PyObject_GC_Del(m);
}
static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
{
    Py_VISIT(m->func_closure);
    Py_VISIT(m->func.m_module);
    Py_VISIT(m->func_dict);
    Py_VISIT(m->func_name);
    Py_VISIT(m->func_qualname);
    Py_VISIT(m->func_doc);
    Py_VISIT(m->func_code);
    Py_VISIT(m->func_classobj);
    Py_VISIT(m->defaults_tuple);
    Py_VISIT(m->defaults_kwdict);
    if (m->defaults) {
        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
        int i;
        for (i = 0; i < m->defaults_pyobjects; i++)
            Py_VISIT(pydefaults[i]);
    }
    return 0;
}
static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
{
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
        Py_INCREF(func);
        return func;
    }
    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
        if (type == NULL)
            type = (PyObject *)(Py_TYPE(obj));
        return PyMethod_New(func,
                            type, (PyObject *)(Py_TYPE(type)));
    }
    if (obj == Py_None)
        obj = NULL;
    return PyMethod_New(func, obj, type);
}
static PyObject*
__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
{
#if PY_MAJOR_VERSION >= 3
    return PyUnicode_FromFormat("<cyfunction %U at %p>",
                                op->func_qualname, (void *)op);
#else
    return PyString_FromFormat("<cyfunction %s at %p>",
                               PyString_AsString(op->func_qualname), (void *)op);
#endif
}
#if CYTHON_COMPILING_IN_PYPY
static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyCFunctionObject* f = (PyCFunctionObject*)func;
    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
    PyObject *self = PyCFunction_GET_SELF(func);
    Py_ssize_t size;
    switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) {
    case METH_VARARGS:
        if (likely(kw == NULL) || PyDict_Size(kw) == 0)
            return (*meth)(self, arg);
        break;
    case METH_VARARGS | METH_KEYWORDS:
        return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
    case METH_NOARGS:
        if (likely(kw == NULL) || PyDict_Size(kw) == 0) {
            size = PyTuple_GET_SIZE(arg);
            if (size == 0)
                return (*meth)(self, NULL);
            PyErr_Format(PyExc_TypeError,
                "%.200s() takes no arguments (%zd given)",
                f->m_ml->ml_name, size);
            return NULL;
        }
        break;
    case METH_O:
        if (likely(kw == NULL) || PyDict_Size(kw) == 0) {
            size = PyTuple_GET_SIZE(arg);
            if (size == 1)
                return (*meth)(self, PyTuple_GET_ITEM(arg, 0));
            PyErr_Format(PyExc_TypeError,
                "%.200s() takes exactly one argument (%zd given)",
                f->m_ml->ml_name, size);
            return NULL;
        }
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
                        "longer supported!");
        return NULL;
    }
    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
                 f->m_ml->ml_name);
    return NULL;
}
#else
static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
	return PyCFunction_Call(func, arg, kw);
}
#endif
static PyTypeObject __pyx_CyFunctionType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/
    sizeof(__pyx_CyFunctionObject),   /*tp_basicsize*/
    0,                                  /*tp_itemsize*/
    (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/
    0,                                  /*tp_print*/
    0,                                  /*tp_getattr*/
    0,                                  /*tp_setattr*/
#if PY_MAJOR_VERSION < 3
    0,                                  /*tp_compare*/
#else
    0,                                  /*reserved*/
#endif
    (reprfunc) __Pyx_CyFunction_repr,   /*tp_repr*/
    0,                                  /*tp_as_number*/
    0,                                  /*tp_as_sequence*/
    0,                                  /*tp_as_mapping*/
    0,                                  /*tp_hash*/
    __Pyx_CyFunction_Call,              /*tp_call*/
    0,                                  /*tp_str*/
    0,                                  /*tp_getattro*/
    0,                                  /*tp_setattro*/
    0,                                  /*tp_as_buffer*/
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/
    0,                                  /*tp_doc*/
    (traverseproc) __Pyx_CyFunction_traverse,   /*tp_traverse*/
    (inquiry) __Pyx_CyFunction_clear,   /*tp_clear*/
    0,                                  /*tp_richcompare*/
    offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */
    0,                                  /*tp_iter*/
    0,                                  /*tp_iternext*/
    __pyx_CyFunction_methods,           /*tp_methods*/
    __pyx_CyFunction_members,           /*tp_members*/
    __pyx_CyFunction_getsets,           /*tp_getset*/
    0,                                  /*tp_base*/
    0,                                  /*tp_dict*/
    __Pyx_CyFunction_descr_get,         /*tp_descr_get*/
    0,                                  /*tp_descr_set*/
    offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/
    0,                                  /*tp_init*/
    0,                                  /*tp_alloc*/
    0,                                  /*tp_new*/
    0,                                  /*tp_free*/
    0,                                  /*tp_is_gc*/
    0,                                  /*tp_bases*/
    0,                                  /*tp_mro*/
    0,                                  /*tp_cache*/
    0,                                  /*tp_subclasses*/
    0,                                  /*tp_weaklist*/
    0,                                  /*tp_del*/
#if PY_VERSION_HEX >= 0x02060000
    0,                                  /*tp_version_tag*/
#endif
};
static int __Pyx_CyFunction_init(void) {
#if !CYTHON_COMPILING_IN_PYPY
    __pyx_CyFunctionType_type.tp_call = PyCFunction_Call;
#endif
    if (PyType_Ready(&__pyx_CyFunctionType_type) < 0)
        return -1;
    __pyx_CyFunctionType = &__pyx_CyFunctionType_type;
    return 0;
}
static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults = PyMem_Malloc(size);
    if (!m->defaults)
        return PyErr_NoMemory();
    memset(m->defaults, 0, size);
    m->defaults_pyobjects = pyobjects;
    return m->defaults;
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_tuple = tuple;
    Py_INCREF(tuple);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_kwdict = dict;
    Py_INCREF(dict);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->func_annotations = dict;
    Py_INCREF(dict);
}

static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyThreadState *tstate = PyThreadState_GET();
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
#else
    PyErr_GetExcInfo(type, value, tb);
#endif
}
static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#else
    PyErr_SetExcInfo(type, value, tb);
#endif
}

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    #if PY_VERSION_HEX < 0x03030000
    PyObject *py_import;
    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__);
    if (!py_import)
        goto bad;
    #endif
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    #if PY_VERSION_HEX >= 0x02050000
    {
        #if PY_MAJOR_VERSION >= 3
        if (level == -1) {
            if (strchr(__Pyx_MODULE_NAME, '.')) {
                #if PY_VERSION_HEX < 0x03030000
                PyObject *py_level = PyInt_FromLong(1);
                if (!py_level)
                    goto bad;
                module = PyObject_CallFunctionObjArgs(py_import,
                    name, global_dict, empty_dict, list, py_level, NULL);
                Py_DECREF(py_level);
                #else
                module = PyImport_ImportModuleLevelObject(
                    name, global_dict, empty_dict, list, 1);
                #endif
                if (!module) {
                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
                        goto bad;
                    PyErr_Clear();
                }
            }
            level = 0; /* try absolute import on failure */
        }
        #endif
        if (!module) {
            #if PY_VERSION_HEX < 0x03030000
            PyObject *py_level = PyInt_FromLong(level);
            if (!py_level)
                goto bad;
            module = PyObject_CallFunctionObjArgs(py_import,
                name, global_dict, empty_dict, list, py_level, NULL);
            Py_DECREF(py_level);
            #else
            module = PyImport_ImportModuleLevelObject(
                name, global_dict, empty_dict, list, level);
            #endif
        }
    }
    #else
    if (level>0) {
        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
        goto bad;
    }
    module = PyObject_CallFunctionObjArgs(py_import,
        name, global_dict, empty_dict, list, NULL);
    #endif
bad:
    #if PY_VERSION_HEX < 0x03030000
    Py_XDECREF(py_import);
    #endif
    Py_XDECREF(empty_list);
    Py_XDECREF(empty_dict);
    return module;
}

static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases) {
    PyObject *metaclass;
#if PY_MAJOR_VERSION < 3
    if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
        PyObject *base = PyTuple_GET_ITEM(bases, 0);
        metaclass = __Pyx_PyObject_GetAttrStr(base, __pyx_n_s____class__);
        if (!metaclass) {
            PyErr_Clear();
            metaclass = (PyObject*) Py_TYPE(base);
        }
    } else {
        metaclass = (PyObject *) &PyClass_Type;
    }
#else
    if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
        PyObject *base = PyTuple_GET_ITEM(bases, 0);
        metaclass = (PyObject*) Py_TYPE(base);
    } else {
        metaclass = (PyObject *) &PyType_Type;
    }
#endif
    Py_INCREF(metaclass);
    return metaclass;
}

static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
                                   PyObject *qualname, PyObject *modname) {
    PyObject *result;
    PyObject *metaclass;
    if (PyDict_SetItem(dict, __pyx_n_s____module__, modname) < 0)
        return NULL;
    if (PyDict_SetItem(dict, __pyx_n_s____qualname__, qualname) < 0)
        return NULL;
    metaclass = PyDict_GetItem(dict, __pyx_n_s____metaclass__);
    if (metaclass) {
        Py_INCREF(metaclass);
    } else {
        metaclass = __Pyx_FindPy2Metaclass(bases);
    }
    result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL);
    Py_DECREF(metaclass);
    return result;
}

static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(unsigned char) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(unsigned char)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to unsigned char" :
                    "value too large to convert to unsigned char");
            }
            return (unsigned char)-1;
        }
        return (unsigned char)val;
    }
    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
}

static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(unsigned short) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(unsigned short)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to unsigned short" :
                    "value too large to convert to unsigned short");
            }
            return (unsigned short)-1;
        }
        return (unsigned short)val;
    }
    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
}

static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(unsigned int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(unsigned int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to unsigned int" :
                    "value too large to convert to unsigned int");
            }
            return (unsigned int)-1;
        }
        return (unsigned int)val;
    }
    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
}

static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
    const char neg_one = (char)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(char) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(char)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to char" :
                    "value too large to convert to char");
            }
            return (char)-1;
        }
        return (char)val;
    }
    return (char)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
    const short neg_one = (short)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(short) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(short)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to short" :
                    "value too large to convert to short");
            }
            return (short)-1;
        }
        return (short)val;
    }
    return (short)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
    const int neg_one = (int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to int" :
                    "value too large to convert to int");
            }
            return (int)-1;
        }
        return (int)val;
    }
    return (int)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
    const signed char neg_one = (signed char)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(signed char) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(signed char)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to signed char" :
                    "value too large to convert to signed char");
            }
            return (signed char)-1;
        }
        return (signed char)val;
    }
    return (signed char)__Pyx_PyInt_AsSignedLong(x);
}

static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
    const signed short neg_one = (signed short)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(signed short) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(signed short)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to signed short" :
                    "value too large to convert to signed short");
            }
            return (signed short)-1;
        }
        return (signed short)val;
    }
    return (signed short)__Pyx_PyInt_AsSignedLong(x);
}

static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
    const signed int neg_one = (signed int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(signed int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(signed int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to signed int" :
                    "value too large to convert to signed int");
            }
            return (signed int)-1;
        }
        return (signed int)val;
    }
    return (signed int)__Pyx_PyInt_AsSignedLong(x);
}

static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
    const int neg_one = (int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to int" :
                    "value too large to convert to int");
            }
            return (int)-1;
        }
        return (int)val;
    }
    return (int)__Pyx_PyInt_AsLong(x);
}

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
#include "longintrepr.h"
#endif
#endif
static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to unsigned long");
            return (unsigned long)-1;
        }
        return (unsigned long)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(unsigned long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to unsigned long");
                return (unsigned long)-1;
            }
            return (unsigned long)PyLong_AsUnsignedLong(x);
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(unsigned long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            return (unsigned long)PyLong_AsLong(x);
        }
    } else {
        unsigned long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (unsigned long)-1;
        val = __Pyx_PyInt_AsUnsignedLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
#include "longintrepr.h"
#endif
#endif
static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to unsigned PY_LONG_LONG");
            return (unsigned PY_LONG_LONG)-1;
        }
        return (unsigned PY_LONG_LONG)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to unsigned PY_LONG_LONG");
                return (unsigned PY_LONG_LONG)-1;
            }
            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
        }
    } else {
        unsigned PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (unsigned PY_LONG_LONG)-1;
        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
#include "longintrepr.h"
#endif
#endif
static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
    const long neg_one = (long)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to long");
            return (long)-1;
        }
        return (long)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to long");
                return (long)-1;
            }
            return (long)PyLong_AsUnsignedLong(x);
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(long) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            return (long)PyLong_AsLong(x);
        }
    } else {
        long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (long)-1;
        val = __Pyx_PyInt_AsLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
#include "longintrepr.h"
#endif
#endif
static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to PY_LONG_LONG");
            return (PY_LONG_LONG)-1;
        }
        return (PY_LONG_LONG)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(PY_LONG_LONG)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to PY_LONG_LONG");
                return (PY_LONG_LONG)-1;
            }
            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(PY_LONG_LONG)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            return (PY_LONG_LONG)PyLong_AsLongLong(x);
        }
    } else {
        PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (PY_LONG_LONG)-1;
        val = __Pyx_PyInt_AsLongLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
#include "longintrepr.h"
#endif
#endif
static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
    const signed long neg_one = (signed long)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to signed long");
            return (signed long)-1;
        }
        return (signed long)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(signed long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (signed long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to signed long");
                return (signed long)-1;
            }
            return (signed long)PyLong_AsUnsignedLong(x);
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(signed long)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(signed long) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            return (signed long)PyLong_AsLong(x);
        }
    } else {
        signed long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (signed long)-1;
        val = __Pyx_PyInt_AsSignedLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
#include "longintrepr.h"
#endif
#endif
static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to signed PY_LONG_LONG");
            return (signed PY_LONG_LONG)-1;
        }
        return (signed PY_LONG_LONG)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to signed PY_LONG_LONG");
                return (signed PY_LONG_LONG)-1;
            }
            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
        } else {
#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_USE_PYLONG_INTERNALS
            if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) {
                switch (Py_SIZE(x)) {
                    case  0: return 0;
                    case  1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
                    case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
                }
            }
#endif
#endif
            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
        }
    } else {
        signed PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (signed PY_LONG_LONG)-1;
        val = __Pyx_PyInt_AsSignedLongLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static int __Pyx_check_binary_version(void) {
    char ctversion[4], rtversion[4];
    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
        char message[200];
        PyOS_snprintf(message, sizeof(message),
                      "compiletime version %s of module '%.100s' "
                      "does not match runtime version %s",
                      ctversion, __Pyx_MODULE_NAME, rtversion);
        #if PY_VERSION_HEX < 0x02050000
        return PyErr_Warn(NULL, message);
        #else
        return PyErr_WarnEx(NULL, message, 1);
        #endif
    }
    return 0;
}

#ifndef __PYX_HAVE_RT_ImportModule
#define __PYX_HAVE_RT_ImportModule
static PyObject *__Pyx_ImportModule(const char *name) {
    PyObject *py_name = 0;
    PyObject *py_module = 0;
    py_name = __Pyx_PyIdentifier_FromString(name);
    if (!py_name)
        goto bad;
    py_module = PyImport_Import(py_name);
    Py_DECREF(py_name);
    return py_module;
bad:
    Py_XDECREF(py_name);
    return 0;
}
#endif

#ifndef __PYX_HAVE_RT_ImportType
#define __PYX_HAVE_RT_ImportType
static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
    size_t size, int strict)
{
    PyObject *py_module = 0;
    PyObject *result = 0;
    PyObject *py_name = 0;
    char warning[200];
    Py_ssize_t basicsize;
#ifdef Py_LIMITED_API
    PyObject *py_basicsize;
#endif
    py_module = __Pyx_ImportModule(module_name);
    if (!py_module)
        goto bad;
    py_name = __Pyx_PyIdentifier_FromString(class_name);
    if (!py_name)
        goto bad;
    result = PyObject_GetAttr(py_module, py_name);
    Py_DECREF(py_name);
    py_name = 0;
    Py_DECREF(py_module);
    py_module = 0;
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError,
            "%s.%s is not a type object",
            module_name, class_name);
        goto bad;
    }
#ifndef Py_LIMITED_API
    basicsize = ((PyTypeObject *)result)->tp_basicsize;
#else
    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
    if (!py_basicsize)
        goto bad;
    basicsize = PyLong_AsSsize_t(py_basicsize);
    Py_DECREF(py_basicsize);
    py_basicsize = 0;
    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
        goto bad;
#endif
    if (!strict && (size_t)basicsize > size) {
        PyOS_snprintf(warning, sizeof(warning),
            "%s.%s size changed, may indicate binary incompatibility",
            module_name, class_name);
        #if PY_VERSION_HEX < 0x02050000
        if (PyErr_Warn(NULL, warning) < 0) goto bad;
        #else
        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
        #endif
    }
    else if ((size_t)basicsize != size) {
        PyErr_Format(PyExc_ValueError,
            "%s.%s has the wrong size, try recompiling",
            module_name, class_name);
        goto bad;
    }
    return (PyTypeObject *)result;
bad:
    Py_XDECREF(py_module);
    Py_XDECREF(result);
    return NULL;
}
#endif

static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
    int start = 0, mid = 0, end = count - 1;
    if (end >= 0 && code_line > entries[end].code_line) {
        return count;
    }
    while (start < end) {
        mid = (start + end) / 2;
        if (code_line < entries[mid].code_line) {
            end = mid;
        } else if (code_line > entries[mid].code_line) {
             start = mid + 1;
        } else {
            return mid;
        }
    }
    if (code_line <= entries[mid].code_line) {
        return mid;
    } else {
        return mid + 1;
    }
}
static PyCodeObject *__pyx_find_code_object(int code_line) {
    PyCodeObject* code_object;
    int pos;
    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
        return NULL;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
        return NULL;
    }
    code_object = __pyx_code_cache.entries[pos].code_object;
    Py_INCREF(code_object);
    return code_object;
}
static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
    int pos, i;
    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
    if (unlikely(!code_line)) {
        return;
    }
    if (unlikely(!entries)) {
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
        if (likely(entries)) {
            __pyx_code_cache.entries = entries;
            __pyx_code_cache.max_count = 64;
            __pyx_code_cache.count = 1;
            entries[0].code_line = code_line;
            entries[0].code_object = code_object;
            Py_INCREF(code_object);
        }
        return;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
        PyCodeObject* tmp = entries[pos].code_object;
        entries[pos].code_object = code_object;
        Py_DECREF(tmp);
        return;
    }
    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
        int new_max = __pyx_code_cache.max_count + 64;
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
        if (unlikely(!entries)) {
            return;
        }
        __pyx_code_cache.entries = entries;
        __pyx_code_cache.max_count = new_max;
    }
    for (i=__pyx_code_cache.count; i>pos; i--) {
        entries[i] = entries[i-1];
    }
    entries[pos].code_line = code_line;
    entries[pos].code_object = code_object;
    __pyx_code_cache.count++;
    Py_INCREF(code_object);
}

#include "compile.h"
#include "frameobject.h"
#include "traceback.h"
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
            const char *funcname, int c_line,
            int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyObject *py_srcfile = 0;
    PyObject *py_funcname = 0;
    #if PY_MAJOR_VERSION < 3
    py_srcfile = PyString_FromString(filename);
    #else
    py_srcfile = PyUnicode_FromString(filename);
    #endif
    if (!py_srcfile) goto bad;
    if (c_line) {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #else
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #endif
    }
    else {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromString(funcname);
        #else
        py_funcname = PyUnicode_FromString(funcname);
        #endif
    }
    if (!py_funcname) goto bad;
    py_code = __Pyx_PyCode_New(
        0,            /*int argcount,*/
        0,            /*int kwonlyargcount,*/
        0,            /*int nlocals,*/
        0,            /*int stacksize,*/
        0,            /*int flags,*/
        __pyx_empty_bytes, /*PyObject *code,*/
        __pyx_empty_tuple, /*PyObject *consts,*/
        __pyx_empty_tuple, /*PyObject *names,*/
        __pyx_empty_tuple, /*PyObject *varnames,*/
        __pyx_empty_tuple, /*PyObject *freevars,*/
        __pyx_empty_tuple, /*PyObject *cellvars,*/
        py_srcfile,   /*PyObject *filename,*/
        py_funcname,  /*PyObject *name,*/
        py_line,      /*int firstlineno,*/
        __pyx_empty_bytes  /*PyObject *lnotab*/
    );
    Py_DECREF(py_srcfile);
    Py_DECREF(py_funcname);
    return py_code;
bad:
    Py_XDECREF(py_srcfile);
    Py_XDECREF(py_funcname);
    return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyObject *py_globals = 0;
    PyFrameObject *py_frame = 0;
    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
    if (!py_code) {
        py_code = __Pyx_CreateCodeObjectForTraceback(
            funcname, c_line, py_line, filename);
        if (!py_code) goto bad;
        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
    }
    py_globals = PyModule_GetDict(__pyx_m);
    if (!py_globals) goto bad;
    py_frame = PyFrame_New(
        PyThreadState_GET(), /*PyThreadState *tstate,*/
        py_code,             /*PyCodeObject *code,*/
        py_globals,          /*PyObject *globals,*/
        0                    /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    py_frame->f_lineno = py_line;
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        #if PY_MAJOR_VERSION < 3
        if (t->is_unicode) {
            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
        } else if (t->intern) {
            *t->p = PyString_InternFromString(t->s);
        } else {
            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
        }
        #else  /* Python 3+ has unicode identifiers */
        if (t->is_unicode | t->is_str) {
            if (t->intern) {
                *t->p = PyUnicode_InternFromString(t->s);
            } else if (t->encoding) {
                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
            } else {
                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
            }
        } else {
            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
        }
        #endif
        if (!*t->p)
            return -1;
        ++t;
    }
    return 0;
}

static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {
    return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str));
}
static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
    Py_ssize_t ignore;
    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
}
static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
    if (
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
            __Pyx_sys_getdefaultencoding_not_ascii &&
#endif
            PyUnicode_Check(o)) {
#if PY_VERSION_HEX < 0x03030000
        char* defenc_c;
        PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
        if (!defenc) return NULL;
        defenc_c = PyBytes_AS_STRING(defenc);
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        {
            char* end = defenc_c + PyBytes_GET_SIZE(defenc);
            char* c;
            for (c = defenc_c; c < end; c++) {
                if ((unsigned char) (*c) >= 128) {
                    PyUnicode_AsASCIIString(o);
                    return NULL;
                }
            }
        }
#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/
        *length = PyBytes_GET_SIZE(defenc);
        return defenc_c;
#else /* PY_VERSION_HEX < 0x03030000 */
        if (PyUnicode_READY(o) == -1) return NULL;
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        if (PyUnicode_IS_ASCII(o)) {
            *length = PyUnicode_GET_DATA_SIZE(o);
            return PyUnicode_AsUTF8(o);
        } else {
            PyUnicode_AsASCIIString(o);
            return NULL;
        }
#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
        return PyUnicode_AsUTF8AndSize(o, length);
#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
#endif /* PY_VERSION_HEX < 0x03030000 */
    } else
#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII  || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */
    {
        char* result;
        int r = PyBytes_AsStringAndSize(o, &result, length);
        if (r < 0) {
            return NULL;
        } else {
            return result;
        }
    }
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
   int is_true = x == Py_True;
   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
   else return PyObject_IsTrue(x);
}
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
  PyNumberMethods *m;
  const char *name = NULL;
  PyObject *res = NULL;
#if PY_MAJOR_VERSION < 3
  if (PyInt_Check(x) || PyLong_Check(x))
#else
  if (PyLong_Check(x))
#endif
    return Py_INCREF(x), x;
  m = Py_TYPE(x)->tp_as_number;
#if PY_MAJOR_VERSION < 3
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Int(x);
  }
  else if (m && m->nb_long) {
    name = "long";
    res = PyNumber_Long(x);
  }
#else
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Long(x);
  }
#endif
  if (res) {
#if PY_MAJOR_VERSION < 3
    if (!PyInt_Check(res) && !PyLong_Check(res)) {
#else
    if (!PyLong_Check(res)) {
#endif
      PyErr_Format(PyExc_TypeError,
                   "__%s__ returned non-%s (type %.200s)",
                   name, name, Py_TYPE(res)->tp_name);
      Py_DECREF(res);
      return NULL;
    }
  }
  else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_TypeError,
                    "an integer is required");
  }
  return res;
}
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  Py_ssize_t ival;
  PyObject* x = PyNumber_Index(b);
  if (!x) return -1;
  ival = PyInt_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
#if PY_VERSION_HEX < 0x02050000
   if (ival <= LONG_MAX)
       return PyInt_FromLong((long)ival);
   else {
       unsigned char *bytes = (unsigned char *) &ival;
       int one = 1; int little = (int)*(unsigned char*)&one;
       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
   }
#else
   return PyInt_FromSize_t(ival);
#endif
}
static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
   if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
       if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred())
           PyErr_SetString(PyExc_OverflowError,
                           "value too large to convert to size_t");
       return (size_t)-1;
   }
   return (size_t)val;
}


#endif /* Py_PYTHON_H */
