|  |  |  | @ -2932,19 +2932,6 @@ static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject * | 
		
	
		
			
				|  |  |  |  | static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, | 
		
	
		
			
				|  |  |  |  |                                       Py_UCS4 max_char); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | /* FastTypeChecks.proto */ | 
		
	
		
			
				|  |  |  |  | #if CYTHON_COMPILING_IN_CPYTHON | 
		
	
		
			
				|  |  |  |  | #define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) | 
		
	
		
			
				|  |  |  |  | #define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) | 
		
	
		
			
				|  |  |  |  | #define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | #define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | /* py_dict_values.proto */ | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -2996,6 +2983,19 @@ static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction * | 
		
	
		
			
				|  |  |  |  | #define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2)  __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2) | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | /* FastTypeChecks.proto */ | 
		
	
		
			
				|  |  |  |  | #if CYTHON_COMPILING_IN_CPYTHON | 
		
	
		
			
				|  |  |  |  | #define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) | 
		
	
		
			
				|  |  |  |  | #define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) | 
		
	
		
			
				|  |  |  |  | #define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | #define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | /* RaiseTooManyValuesToUnpack.proto */ | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -17067,8 +17067,8 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_16_copy_ | 
		
	
		
			
				|  |  |  |  |  *         _copy_parent(self, copied, memo) | 
		
	
		
			
				|  |  |  |  |  *  | 
		
	
		
			
				|  |  |  |  |  *     def _async_provide(self, future_result, future):             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *         instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *         try: | 
		
	
		
			
				|  |  |  |  |  *             instance = future.result() | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | /* Python wrapper */ | 
		
	
	
		
			
				
					|  |  |  | @ -17146,8 +17146,8 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async | 
		
	
		
			
				|  |  |  |  |   PyObject *__pyx_t_4 = NULL; | 
		
	
		
			
				|  |  |  |  |   PyObject *__pyx_t_5 = NULL; | 
		
	
		
			
				|  |  |  |  |   PyObject *__pyx_t_6 = NULL; | 
		
	
		
			
				|  |  |  |  |   PyObject *__pyx_t_7 = NULL; | 
		
	
		
			
				|  |  |  |  |   int __pyx_t_8; | 
		
	
		
			
				|  |  |  |  |   int __pyx_t_7; | 
		
	
		
			
				|  |  |  |  |   PyObject *__pyx_t_8 = NULL; | 
		
	
		
			
				|  |  |  |  |   PyObject *__pyx_t_9 = NULL; | 
		
	
		
			
				|  |  |  |  |   PyObject *__pyx_t_10 = NULL; | 
		
	
		
			
				|  |  |  |  |   int __pyx_lineno = 0; | 
		
	
	
		
			
				
					|  |  |  | @ -17158,78 +17158,78 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async | 
		
	
		
			
				|  |  |  |  |   /* "dependency_injector/providers.pyx":767
 | 
		
	
		
			
				|  |  |  |  |  *  | 
		
	
		
			
				|  |  |  |  |  *     def _async_provide(self, future_result, future): | 
		
	
		
			
				|  |  |  |  |  *         instance = future.result()             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *         try: | 
		
	
		
			
				|  |  |  |  |  *             self._check_instance_type(instance) | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_future, __pyx_n_s_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 767, __pyx_L1_error) | 
		
	
		
			
				|  |  |  |  |   __Pyx_GOTREF(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |   __pyx_t_3 = NULL; | 
		
	
		
			
				|  |  |  |  |   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { | 
		
	
		
			
				|  |  |  |  |     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |     if (likely(__pyx_t_3)) { | 
		
	
		
			
				|  |  |  |  |       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |       __Pyx_INCREF(__pyx_t_3); | 
		
	
		
			
				|  |  |  |  |       __Pyx_INCREF(function); | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF_SET(__pyx_t_2, function); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; | 
		
	
		
			
				|  |  |  |  |   if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 767, __pyx_L1_error) | 
		
	
		
			
				|  |  |  |  |   __Pyx_GOTREF(__pyx_t_1); | 
		
	
		
			
				|  |  |  |  |   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; | 
		
	
		
			
				|  |  |  |  |   __pyx_v_instance = __pyx_t_1; | 
		
	
		
			
				|  |  |  |  |   __pyx_t_1 = 0; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   /* "dependency_injector/providers.pyx":768
 | 
		
	
		
			
				|  |  |  |  |  *     def _async_provide(self, future_result, future): | 
		
	
		
			
				|  |  |  |  |  *         instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *         try:             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *             instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *             self._check_instance_type(instance) | 
		
	
		
			
				|  |  |  |  |  *         except Error as exception: | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |   { | 
		
	
		
			
				|  |  |  |  |     __Pyx_PyThreadState_declare | 
		
	
		
			
				|  |  |  |  |     __Pyx_PyThreadState_assign | 
		
	
		
			
				|  |  |  |  |     __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); | 
		
	
		
			
				|  |  |  |  |     __Pyx_XGOTREF(__pyx_t_4); | 
		
	
		
			
				|  |  |  |  |     __Pyx_XGOTREF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |     __Pyx_XGOTREF(__pyx_t_6); | 
		
	
		
			
				|  |  |  |  |     __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:*/ { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       /* "dependency_injector/providers.pyx":769
 | 
		
	
		
			
				|  |  |  |  |  *         instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *         try: | 
		
	
		
			
				|  |  |  |  |  *             self._check_instance_type(instance)             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *         except Error as exception: | 
		
	
		
			
				|  |  |  |  |  *             future_result.set_exception(exception) | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |       __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_check_instance_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 769, __pyx_L3_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |       __pyx_t_3 = NULL; | 
		
	
		
			
				|  |  |  |  |       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { | 
		
	
		
			
				|  |  |  |  |         __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |         if (likely(__pyx_t_3)) { | 
		
	
		
			
				|  |  |  |  |           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |           __Pyx_INCREF(__pyx_t_3); | 
		
	
		
			
				|  |  |  |  |           __Pyx_INCREF(function); | 
		
	
		
			
				|  |  |  |  |           __Pyx_DECREF_SET(__pyx_t_2, function); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_instance) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_instance); | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; | 
		
	
		
			
				|  |  |  |  |       if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 769, __pyx_L3_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_1); | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       /* "dependency_injector/providers.pyx":768
 | 
		
	
		
			
				|  |  |  |  |  *     def _async_provide(self, future_result, future): | 
		
	
		
			
				|  |  |  |  |  *         instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *         try:             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *         try: | 
		
	
		
			
				|  |  |  |  |  *             instance = future.result()             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *             self._check_instance_type(instance) | 
		
	
		
			
				|  |  |  |  |  *         except Exception as exception: | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |       __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_future, __pyx_n_s_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 768, __pyx_L3_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |       __pyx_t_6 = NULL; | 
		
	
		
			
				|  |  |  |  |       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { | 
		
	
		
			
				|  |  |  |  |         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |         if (likely(__pyx_t_6)) { | 
		
	
		
			
				|  |  |  |  |           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |           __Pyx_INCREF(__pyx_t_6); | 
		
	
		
			
				|  |  |  |  |           __Pyx_INCREF(function); | 
		
	
		
			
				|  |  |  |  |           __Pyx_DECREF_SET(__pyx_t_5, function); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; | 
		
	
		
			
				|  |  |  |  |       if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 768, __pyx_L3_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_4); | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; | 
		
	
		
			
				|  |  |  |  |       __pyx_v_instance = __pyx_t_4; | 
		
	
		
			
				|  |  |  |  |       __pyx_t_4 = 0; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       /* "dependency_injector/providers.pyx":769
 | 
		
	
		
			
				|  |  |  |  |  *         try: | 
		
	
		
			
				|  |  |  |  |  *             instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *             self._check_instance_type(instance)             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *         except Exception as exception: | 
		
	
		
			
				|  |  |  |  |  *             future_result.set_exception(exception) | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |       __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_check_instance_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 769, __pyx_L3_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |       __pyx_t_6 = NULL; | 
		
	
		
			
				|  |  |  |  |       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { | 
		
	
		
			
				|  |  |  |  |         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |         if (likely(__pyx_t_6)) { | 
		
	
		
			
				|  |  |  |  |           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |           __Pyx_INCREF(__pyx_t_6); | 
		
	
		
			
				|  |  |  |  |           __Pyx_INCREF(function); | 
		
	
		
			
				|  |  |  |  |           __Pyx_DECREF_SET(__pyx_t_5, function); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_instance) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_instance); | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; | 
		
	
		
			
				|  |  |  |  |       if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 769, __pyx_L3_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_4); | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       /* "dependency_injector/providers.pyx":767
 | 
		
	
		
			
				|  |  |  |  |  *  | 
		
	
		
			
				|  |  |  |  |  *     def _async_provide(self, future_result, future): | 
		
	
		
			
				|  |  |  |  |  *         try:             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *             instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *             self._check_instance_type(instance) | 
		
	
		
			
				|  |  |  |  |  *         except Error as exception: | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -17241,60 +17241,54 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async | 
		
	
		
			
				|  |  |  |  |  *     def _check_instance_type(self, instance): | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |     /*else:*/ { | 
		
	
		
			
				|  |  |  |  |       __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_future_result, __pyx_n_s_set_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 773, __pyx_L5_except_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |       __pyx_t_3 = NULL; | 
		
	
		
			
				|  |  |  |  |       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { | 
		
	
		
			
				|  |  |  |  |         __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |         if (likely(__pyx_t_3)) { | 
		
	
		
			
				|  |  |  |  |           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |           __Pyx_INCREF(__pyx_t_3); | 
		
	
		
			
				|  |  |  |  |       __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_future_result, __pyx_n_s_set_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 773, __pyx_L5_except_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |       __pyx_t_6 = NULL; | 
		
	
		
			
				|  |  |  |  |       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { | 
		
	
		
			
				|  |  |  |  |         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |         if (likely(__pyx_t_6)) { | 
		
	
		
			
				|  |  |  |  |           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |           __Pyx_INCREF(__pyx_t_6); | 
		
	
		
			
				|  |  |  |  |           __Pyx_INCREF(function); | 
		
	
		
			
				|  |  |  |  |           __Pyx_DECREF_SET(__pyx_t_2, function); | 
		
	
		
			
				|  |  |  |  |           __Pyx_DECREF_SET(__pyx_t_5, function); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_instance) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_instance); | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; | 
		
	
		
			
				|  |  |  |  |       if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 773, __pyx_L5_except_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_1); | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; | 
		
	
		
			
				|  |  |  |  |       __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_instance) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_instance); | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; | 
		
	
		
			
				|  |  |  |  |       if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 773, __pyx_L5_except_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_4); | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; | 
		
	
		
			
				|  |  |  |  |     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; | 
		
	
		
			
				|  |  |  |  |     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; | 
		
	
		
			
				|  |  |  |  |     goto __pyx_L8_try_end; | 
		
	
		
			
				|  |  |  |  |     __pyx_L3_error:; | 
		
	
		
			
				|  |  |  |  |     __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_L8_try_end; | 
		
	
		
			
				|  |  |  |  |     __pyx_L3_error:; | 
		
	
		
			
				|  |  |  |  |     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; | 
		
	
		
			
				|  |  |  |  |     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; | 
		
	
		
			
				|  |  |  |  |     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     /* "dependency_injector/providers.pyx":770
 | 
		
	
		
			
				|  |  |  |  |  *         try: | 
		
	
		
			
				|  |  |  |  |  *             instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *             self._check_instance_type(instance) | 
		
	
		
			
				|  |  |  |  |  *         except Error as exception:             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *         except Exception as exception:             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *             future_result.set_exception(exception) | 
		
	
		
			
				|  |  |  |  |  *         else: | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |     __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); | 
		
	
		
			
				|  |  |  |  |     __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Error); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 770, __pyx_L5_except_error) | 
		
	
		
			
				|  |  |  |  |     __Pyx_GOTREF(__pyx_t_7); | 
		
	
		
			
				|  |  |  |  |     __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7); | 
		
	
		
			
				|  |  |  |  |     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; | 
		
	
		
			
				|  |  |  |  |     __Pyx_ErrRestore(__pyx_t_1, __pyx_t_2, __pyx_t_3); | 
		
	
		
			
				|  |  |  |  |     __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; | 
		
	
		
			
				|  |  |  |  |     if (__pyx_t_8) { | 
		
	
		
			
				|  |  |  |  |     __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); | 
		
	
		
			
				|  |  |  |  |     if (__pyx_t_7) { | 
		
	
		
			
				|  |  |  |  |       __Pyx_AddTraceback("dependency_injector.providers.Dependency._async_provide", __pyx_clineno, __pyx_lineno, __pyx_filename); | 
		
	
		
			
				|  |  |  |  |       if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0) __PYX_ERR(1, 770, __pyx_L5_except_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_3); | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_1); | 
		
	
		
			
				|  |  |  |  |       __Pyx_INCREF(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |       __pyx_v_exception = __pyx_t_2; | 
		
	
		
			
				|  |  |  |  |       if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(1, 770, __pyx_L5_except_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_4); | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_6); | 
		
	
		
			
				|  |  |  |  |       __Pyx_INCREF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |       __pyx_v_exception = __pyx_t_5; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       /* "dependency_injector/providers.pyx":771
 | 
		
	
		
			
				|  |  |  |  |  *             self._check_instance_type(instance) | 
		
	
		
			
				|  |  |  |  |  *         except Error as exception: | 
		
	
		
			
				|  |  |  |  |  *         except Exception as exception: | 
		
	
		
			
				|  |  |  |  |  *             future_result.set_exception(exception)             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *         else: | 
		
	
		
			
				|  |  |  |  |  *             future_result.set_result(instance) | 
		
	
	
		
			
				
					|  |  |  | @ -17311,37 +17305,37 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async | 
		
	
		
			
				|  |  |  |  |           __Pyx_DECREF_SET(__pyx_t_9, function); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_v_exception) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_exception); | 
		
	
		
			
				|  |  |  |  |       __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_v_exception) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_exception); | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; | 
		
	
		
			
				|  |  |  |  |       if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 771, __pyx_L5_except_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_7); | 
		
	
		
			
				|  |  |  |  |       if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 771, __pyx_L5_except_error) | 
		
	
		
			
				|  |  |  |  |       __Pyx_GOTREF(__pyx_t_8); | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; | 
		
	
		
			
				|  |  |  |  |       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; | 
		
	
		
			
				|  |  |  |  |       goto __pyx_L4_exception_handled; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     goto __pyx_L5_except_error; | 
		
	
		
			
				|  |  |  |  |     __pyx_L5_except_error:; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     /* "dependency_injector/providers.pyx":768
 | 
		
	
		
			
				|  |  |  |  |     /* "dependency_injector/providers.pyx":767
 | 
		
	
		
			
				|  |  |  |  |  *  | 
		
	
		
			
				|  |  |  |  |  *     def _async_provide(self, future_result, future): | 
		
	
		
			
				|  |  |  |  |  *         instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *         try:             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *             instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *             self._check_instance_type(instance) | 
		
	
		
			
				|  |  |  |  |  *         except Error as exception: | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |     __Pyx_XGIVEREF(__pyx_t_4); | 
		
	
		
			
				|  |  |  |  |     __Pyx_XGIVEREF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |     __Pyx_XGIVEREF(__pyx_t_6); | 
		
	
		
			
				|  |  |  |  |     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); | 
		
	
		
			
				|  |  |  |  |     __Pyx_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_L4_exception_handled:; | 
		
	
		
			
				|  |  |  |  |     __Pyx_XGIVEREF(__pyx_t_4); | 
		
	
		
			
				|  |  |  |  |     __Pyx_XGIVEREF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |     __Pyx_XGIVEREF(__pyx_t_6); | 
		
	
		
			
				|  |  |  |  |     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); | 
		
	
		
			
				|  |  |  |  |     __Pyx_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_L8_try_end:; | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -17349,18 +17343,18 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async | 
		
	
		
			
				|  |  |  |  |  *         _copy_parent(self, copied, memo) | 
		
	
		
			
				|  |  |  |  |  *  | 
		
	
		
			
				|  |  |  |  |  *     def _async_provide(self, future_result, future):             # <<<<<<<<<<<<<< | 
		
	
		
			
				|  |  |  |  |  *         instance = future.result() | 
		
	
		
			
				|  |  |  |  |  *         try: | 
		
	
		
			
				|  |  |  |  |  *             instance = future.result() | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   /* function exit code */ | 
		
	
		
			
				|  |  |  |  |   __pyx_r = Py_None; __Pyx_INCREF(Py_None); | 
		
	
		
			
				|  |  |  |  |   goto __pyx_L0; | 
		
	
		
			
				|  |  |  |  |   __pyx_L1_error:; | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_1); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_2); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_3); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_7); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_4); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_5); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_6); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_8); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_9); | 
		
	
		
			
				|  |  |  |  |   __Pyx_XDECREF(__pyx_t_10); | 
		
	
		
			
				|  |  |  |  |   __Pyx_AddTraceback("dependency_injector.providers.Dependency._async_provide", __pyx_clineno, __pyx_lineno, __pyx_filename); | 
		
	
	
		
			
				
					|  |  |  | @ -128538,106 +128532,6 @@ bad: | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | /* FastTypeChecks */ | 
		
	
		
			
				|  |  |  |  | #if CYTHON_COMPILING_IN_CPYTHON | 
		
	
		
			
				|  |  |  |  | static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { | 
		
	
		
			
				|  |  |  |  |     while (a) { | 
		
	
		
			
				|  |  |  |  |         a = a->tp_base; | 
		
	
		
			
				|  |  |  |  |         if (a == b) | 
		
	
		
			
				|  |  |  |  |             return 1; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return b == &PyBaseObject_Type; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { | 
		
	
		
			
				|  |  |  |  |     PyObject *mro; | 
		
	
		
			
				|  |  |  |  |     if (a == b) return 1; | 
		
	
		
			
				|  |  |  |  |     mro = a->tp_mro; | 
		
	
		
			
				|  |  |  |  |     if (likely(mro)) { | 
		
	
		
			
				|  |  |  |  |         Py_ssize_t i, n; | 
		
	
		
			
				|  |  |  |  |         n = PyTuple_GET_SIZE(mro); | 
		
	
		
			
				|  |  |  |  |         for (i = 0; i < n; i++) { | 
		
	
		
			
				|  |  |  |  |             if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) | 
		
	
		
			
				|  |  |  |  |                 return 1; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return __Pyx_InBases(a, b); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #if PY_MAJOR_VERSION == 2 | 
		
	
		
			
				|  |  |  |  | static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { | 
		
	
		
			
				|  |  |  |  |     PyObject *exception, *value, *tb; | 
		
	
		
			
				|  |  |  |  |     int res; | 
		
	
		
			
				|  |  |  |  |     __Pyx_PyThreadState_declare | 
		
	
		
			
				|  |  |  |  |     __Pyx_PyThreadState_assign | 
		
	
		
			
				|  |  |  |  |     __Pyx_ErrFetch(&exception, &value, &tb); | 
		
	
		
			
				|  |  |  |  |     res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; | 
		
	
		
			
				|  |  |  |  |     if (unlikely(res == -1)) { | 
		
	
		
			
				|  |  |  |  |         PyErr_WriteUnraisable(err); | 
		
	
		
			
				|  |  |  |  |         res = 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     if (!res) { | 
		
	
		
			
				|  |  |  |  |         res = PyObject_IsSubclass(err, exc_type2); | 
		
	
		
			
				|  |  |  |  |         if (unlikely(res == -1)) { | 
		
	
		
			
				|  |  |  |  |             PyErr_WriteUnraisable(err); | 
		
	
		
			
				|  |  |  |  |             res = 0; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     __Pyx_ErrRestore(exception, value, tb); | 
		
	
		
			
				|  |  |  |  |     return res; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { | 
		
	
		
			
				|  |  |  |  |     int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; | 
		
	
		
			
				|  |  |  |  |     if (!res) { | 
		
	
		
			
				|  |  |  |  |         res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return res; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { | 
		
	
		
			
				|  |  |  |  |     Py_ssize_t i, n; | 
		
	
		
			
				|  |  |  |  |     assert(PyExceptionClass_Check(exc_type)); | 
		
	
		
			
				|  |  |  |  |     n = PyTuple_GET_SIZE(tuple); | 
		
	
		
			
				|  |  |  |  | #if PY_MAJOR_VERSION >= 3 | 
		
	
		
			
				|  |  |  |  |     for (i=0; i<n; i++) { | 
		
	
		
			
				|  |  |  |  |         if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  |     for (i=0; i<n; i++) { | 
		
	
		
			
				|  |  |  |  |         PyObject *t = PyTuple_GET_ITEM(tuple, i); | 
		
	
		
			
				|  |  |  |  |         #if PY_MAJOR_VERSION < 3 | 
		
	
		
			
				|  |  |  |  |         if (likely(exc_type == t)) return 1; | 
		
	
		
			
				|  |  |  |  |         #endif | 
		
	
		
			
				|  |  |  |  |         if (likely(PyExceptionClass_Check(t))) { | 
		
	
		
			
				|  |  |  |  |             if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1; | 
		
	
		
			
				|  |  |  |  |         } else { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return 0; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) { | 
		
	
		
			
				|  |  |  |  |     if (likely(err == exc_type)) return 1; | 
		
	
		
			
				|  |  |  |  |     if (likely(PyExceptionClass_Check(err))) { | 
		
	
		
			
				|  |  |  |  |         if (likely(PyExceptionClass_Check(exc_type))) { | 
		
	
		
			
				|  |  |  |  |             return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type); | 
		
	
		
			
				|  |  |  |  |         } else if (likely(PyTuple_Check(exc_type))) { | 
		
	
		
			
				|  |  |  |  |             return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type); | 
		
	
		
			
				|  |  |  |  |         } else { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return PyErr_GivenExceptionMatches(err, exc_type); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) { | 
		
	
		
			
				|  |  |  |  |     assert(PyExceptionClass_Check(exc_type1)); | 
		
	
		
			
				|  |  |  |  |     assert(PyExceptionClass_Check(exc_type2)); | 
		
	
		
			
				|  |  |  |  |     if (likely(err == exc_type1 || err == exc_type2)) return 1; | 
		
	
		
			
				|  |  |  |  |     if (likely(PyExceptionClass_Check(err))) { | 
		
	
		
			
				|  |  |  |  |         return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2)); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | /* UnpackUnboundCMethod */ | 
		
	
		
			
				|  |  |  |  | static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { | 
		
	
		
			
				|  |  |  |  |     PyObject *method; | 
		
	
	
		
			
				
					|  |  |  | @ -128823,6 +128717,106 @@ static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObjec | 
		
	
		
			
				|  |  |  |  |     return value; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | /* FastTypeChecks */ | 
		
	
		
			
				|  |  |  |  | #if CYTHON_COMPILING_IN_CPYTHON | 
		
	
		
			
				|  |  |  |  | static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { | 
		
	
		
			
				|  |  |  |  |     while (a) { | 
		
	
		
			
				|  |  |  |  |         a = a->tp_base; | 
		
	
		
			
				|  |  |  |  |         if (a == b) | 
		
	
		
			
				|  |  |  |  |             return 1; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return b == &PyBaseObject_Type; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { | 
		
	
		
			
				|  |  |  |  |     PyObject *mro; | 
		
	
		
			
				|  |  |  |  |     if (a == b) return 1; | 
		
	
		
			
				|  |  |  |  |     mro = a->tp_mro; | 
		
	
		
			
				|  |  |  |  |     if (likely(mro)) { | 
		
	
		
			
				|  |  |  |  |         Py_ssize_t i, n; | 
		
	
		
			
				|  |  |  |  |         n = PyTuple_GET_SIZE(mro); | 
		
	
		
			
				|  |  |  |  |         for (i = 0; i < n; i++) { | 
		
	
		
			
				|  |  |  |  |             if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) | 
		
	
		
			
				|  |  |  |  |                 return 1; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return __Pyx_InBases(a, b); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #if PY_MAJOR_VERSION == 2 | 
		
	
		
			
				|  |  |  |  | static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { | 
		
	
		
			
				|  |  |  |  |     PyObject *exception, *value, *tb; | 
		
	
		
			
				|  |  |  |  |     int res; | 
		
	
		
			
				|  |  |  |  |     __Pyx_PyThreadState_declare | 
		
	
		
			
				|  |  |  |  |     __Pyx_PyThreadState_assign | 
		
	
		
			
				|  |  |  |  |     __Pyx_ErrFetch(&exception, &value, &tb); | 
		
	
		
			
				|  |  |  |  |     res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; | 
		
	
		
			
				|  |  |  |  |     if (unlikely(res == -1)) { | 
		
	
		
			
				|  |  |  |  |         PyErr_WriteUnraisable(err); | 
		
	
		
			
				|  |  |  |  |         res = 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     if (!res) { | 
		
	
		
			
				|  |  |  |  |         res = PyObject_IsSubclass(err, exc_type2); | 
		
	
		
			
				|  |  |  |  |         if (unlikely(res == -1)) { | 
		
	
		
			
				|  |  |  |  |             PyErr_WriteUnraisable(err); | 
		
	
		
			
				|  |  |  |  |             res = 0; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     __Pyx_ErrRestore(exception, value, tb); | 
		
	
		
			
				|  |  |  |  |     return res; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { | 
		
	
		
			
				|  |  |  |  |     int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; | 
		
	
		
			
				|  |  |  |  |     if (!res) { | 
		
	
		
			
				|  |  |  |  |         res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return res; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { | 
		
	
		
			
				|  |  |  |  |     Py_ssize_t i, n; | 
		
	
		
			
				|  |  |  |  |     assert(PyExceptionClass_Check(exc_type)); | 
		
	
		
			
				|  |  |  |  |     n = PyTuple_GET_SIZE(tuple); | 
		
	
		
			
				|  |  |  |  | #if PY_MAJOR_VERSION >= 3 | 
		
	
		
			
				|  |  |  |  |     for (i=0; i<n; i++) { | 
		
	
		
			
				|  |  |  |  |         if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  |     for (i=0; i<n; i++) { | 
		
	
		
			
				|  |  |  |  |         PyObject *t = PyTuple_GET_ITEM(tuple, i); | 
		
	
		
			
				|  |  |  |  |         #if PY_MAJOR_VERSION < 3 | 
		
	
		
			
				|  |  |  |  |         if (likely(exc_type == t)) return 1; | 
		
	
		
			
				|  |  |  |  |         #endif | 
		
	
		
			
				|  |  |  |  |         if (likely(PyExceptionClass_Check(t))) { | 
		
	
		
			
				|  |  |  |  |             if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1; | 
		
	
		
			
				|  |  |  |  |         } else { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return 0; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) { | 
		
	
		
			
				|  |  |  |  |     if (likely(err == exc_type)) return 1; | 
		
	
		
			
				|  |  |  |  |     if (likely(PyExceptionClass_Check(err))) { | 
		
	
		
			
				|  |  |  |  |         if (likely(PyExceptionClass_Check(exc_type))) { | 
		
	
		
			
				|  |  |  |  |             return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type); | 
		
	
		
			
				|  |  |  |  |         } else if (likely(PyTuple_Check(exc_type))) { | 
		
	
		
			
				|  |  |  |  |             return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type); | 
		
	
		
			
				|  |  |  |  |         } else { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return PyErr_GivenExceptionMatches(err, exc_type); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) { | 
		
	
		
			
				|  |  |  |  |     assert(PyExceptionClass_Check(exc_type1)); | 
		
	
		
			
				|  |  |  |  |     assert(PyExceptionClass_Check(exc_type2)); | 
		
	
		
			
				|  |  |  |  |     if (likely(err == exc_type1 || err == exc_type2)) return 1; | 
		
	
		
			
				|  |  |  |  |     if (likely(PyExceptionClass_Check(err))) { | 
		
	
		
			
				|  |  |  |  |         return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2)); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | /* RaiseTooManyValuesToUnpack */ | 
		
	
		
			
				|  |  |  |  | static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { | 
		
	
		
			
				|  |  |  |  |     PyErr_Format(PyExc_ValueError, | 
		
	
	
		
			
				
					|  |  |  | 
 |