Cython: c_di.pyx

Generated by Cython 0.29.10

Yellow lines hint at Python interaction.
Click on a line that starts with a "`+`" to see the C code that Cython generated for it.

Raw output: c_di.c

     001: # cython: language_level=3

     002: from ..components.c_components cimport Components, ComponentLookupError

     003:

    +004: import sys

      __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +005: import collections

      __pyx_t_1 = __Pyx_Import(__pyx_n_s_collections, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_collections, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +006: import functools

      __pyx_t_1 = __Pyx_Import(__pyx_n_s_functools, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_functools, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +007: import inspect

      __pyx_t_1 = __Pyx_patch_inspect(__Pyx_Import(__pyx_n_s_inspect, 0, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_inspect, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +008: import itertools

      __pyx_t_1 = __Pyx_Import(__pyx_n_s_itertools, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_itertools, __pyx_t_1) < 0) __PYX_ERR(0, 8, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +009: import typing

      __pyx_t_1 = __Pyx_Import(__pyx_n_s_typing, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_typing, __pyx_t_1) < 0) __PYX_ERR(0, 9, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     010:

     011: # import typing_inspect

     012:

    +013: from buvar import context

      __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_n_s_context);
      __Pyx_GIVEREF(__pyx_n_s_context);
      PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_context);
      __pyx_t_2 = __Pyx_Import(__pyx_n_s_buvar, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_context); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_context, __pyx_t_1) < 0) __PYX_ERR(0, 13, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

     014:

    +015: from .. import util

      __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_n_s_util);
      __Pyx_GIVEREF(__pyx_n_s_util);
      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_util);
      __pyx_t_1 = __Pyx_Import(__pyx_n_s__2, __pyx_t_2, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_util); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_util, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     016:

    +017: missing = object()

      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_builtin_object); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 17, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_missing, __pyx_t_1) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     018:

     019:

    +020: class ResolveError(Exception):

      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      __Pyx_GIVEREF(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_ResolveError, __pyx_n_s_ResolveError, (PyObject *) NULL, __pyx_n_s_buvar_di_c_di, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_ResolveError, __pyx_t_1, __pyx_t_3, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 20, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_ResolveError, __pyx_t_4) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __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;

     021:     pass

     022:

     023:

    +024: def _extract_optional_type(hint):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_1_extract_optional_type(PyObject *__pyx_self, PyObject *__pyx_v_hint); /*proto*/
    static PyMethodDef __pyx_mdef_5buvar_2di_4c_di_1_extract_optional_type = {"_extract_optional_type", (PyCFunction)__pyx_pw_5buvar_2di_4c_di_1_extract_optional_type, METH_O, 0};
    static PyObject *__pyx_pw_5buvar_2di_4c_di_1_extract_optional_type(PyObject *__pyx_self, PyObject *__pyx_v_hint) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("_extract_optional_type (wrapper)", 0);
      __pyx_r = __pyx_pf_5buvar_2di_4c_di__extract_optional_type(__pyx_self, ((PyObject *)__pyx_v_hint));

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di__extract_optional_type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_hint) {
      PyTypeObject *__pyx_v_none = NULL;
      PyObject *__pyx_v_h = NULL;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("_extract_optional_type", 0);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_6);
      __Pyx_AddTraceback("buvar.di.c_di._extract_optional_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_none);
      __Pyx_XDECREF(__pyx_v_h);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
      __pyx_tuple__3 = PyTuple_Pack(3, __pyx_n_s_hint, __pyx_n_s_none, __pyx_n_s_h); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 24, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_tuple__3);
      __Pyx_GIVEREF(__pyx_tuple__3);
    /* … */
      __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5buvar_2di_4c_di_1_extract_optional_type, NULL, __pyx_n_s_buvar_di_c_di); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_extract_optional_type, __pyx_t_1) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__3, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_buvar_di_c_di_pyx, __pyx_n_s_extract_optional_type, 24, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 24, __pyx_L1_error)

    +025:     none = type(None)

      __Pyx_INCREF(((PyObject *)Py_TYPE(Py_None)));
      __pyx_v_none = ((PyTypeObject*)((PyObject *)Py_TYPE(Py_None)));

    +026:     if (

      if (__pyx_t_1) {
    /* … */
      }

    +027:         hint is typing.Union

      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_typing); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 27, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Union); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_4 = (__pyx_v_hint == __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_5 = (__pyx_t_4 != 0);
      if (!__pyx_t_5) {
      } else {
        __pyx_t_1 = __pyx_t_5;
        goto __pyx_L4_bool_binop_done;
      }

    +028:         or isinstance(hint, typing._GenericAlias)

      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_typing); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_GenericAlias); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_5 = PyObject_IsInstance(__pyx_v_hint, __pyx_t_2); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 28, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_4 = (__pyx_t_5 != 0);
      if (__pyx_t_4) {
      } else {
        __pyx_t_1 = __pyx_t_4;
        goto __pyx_L4_bool_binop_done;
      }

    +029:         and hint.__origin__ is typing.Union

      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_hint, __pyx_n_s_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_typing); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Union); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 29, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_4 = (__pyx_t_2 == __pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_5 = (__pyx_t_4 != 0);
      __pyx_t_1 = __pyx_t_5;
      __pyx_L4_bool_binop_done:;

     030:     ):

    +031:         if none in hint.__args__ and len(hint.__args__) == 2:

        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_hint, __pyx_n_s_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 31, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = (__Pyx_PySequence_ContainsTF(((PyObject *)__pyx_v_none), __pyx_t_6, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 31, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_4 = (__pyx_t_5 != 0);
        if (__pyx_t_4) {
        } else {
          __pyx_t_1 = __pyx_t_4;
          goto __pyx_L8_bool_binop_done;
        }
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_hint, __pyx_n_s_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 31, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 31, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_4 = ((__pyx_t_7 == 2) != 0);
        __pyx_t_1 = __pyx_t_4;
        __pyx_L8_bool_binop_done:;
        if (__pyx_t_1) {
    /* … */
        }

    +032:             for h in hint.__args__:

          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_hint, __pyx_n_s_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
            __pyx_t_2 = __pyx_t_6; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = 0;
            __pyx_t_8 = NULL;
          } else {
            __pyx_t_7 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 32, __pyx_L1_error)
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          for (;;) {
            if (likely(!__pyx_t_8)) {
              if (likely(PyList_CheckExact(__pyx_t_2))) {
                if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_2)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_6 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 32, __pyx_L1_error)
                #else
                __pyx_t_6 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_6);
                #endif
              } else {
                if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 32, __pyx_L1_error)
                #else
                __pyx_t_6 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_6);
                #endif
              }
            } else {
              __pyx_t_6 = __pyx_t_8(__pyx_t_2);
              if (unlikely(!__pyx_t_6)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 32, __pyx_L1_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_6);
            }
            __Pyx_XDECREF_SET(__pyx_v_h, __pyx_t_6);
            __pyx_t_6 = 0;
    /* … */
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +033:                 if h is not none:

            __pyx_t_1 = (__pyx_v_h != ((PyObject *)__pyx_v_none));
            __pyx_t_4 = (__pyx_t_1 != 0);
            if (__pyx_t_4) {
    /* … */
            }

    +034:                     return h

              __Pyx_XDECREF(__pyx_r);
              __Pyx_INCREF(__pyx_v_h);
              __pyx_r = __pyx_v_h;
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              goto __pyx_L0;

    +035:     return hint

      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_hint);
      __pyx_r = __pyx_v_hint;
      goto __pyx_L0;

     036:     # if typing_inspect.is_optional_type(hint):

     037:     #     hint, _ = typing_inspect.get_args(hint)

     038:     #     return hint

     039:     # return hint

     040:

     041:

    +042: def assert_annotated(spec):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_3assert_annotated(PyObject *__pyx_self, PyObject *__pyx_v_spec); /*proto*/
    static PyMethodDef __pyx_mdef_5buvar_2di_4c_di_3assert_annotated = {"assert_annotated", (PyCFunction)__pyx_pw_5buvar_2di_4c_di_3assert_annotated, METH_O, 0};
    static PyObject *__pyx_pw_5buvar_2di_4c_di_3assert_annotated(PyObject *__pyx_self, PyObject *__pyx_v_spec) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("assert_annotated (wrapper)", 0);
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_2assert_annotated(__pyx_self, ((PyObject *)__pyx_v_spec));

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_2assert_annotated(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_spec) {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("assert_annotated", 0);
    /* … */
      /* 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_4);
      __Pyx_AddTraceback("buvar.di.c_di.assert_annotated", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
      __pyx_tuple__5 = PyTuple_Pack(1, __pyx_n_s_spec); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 42, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_tuple__5);
      __Pyx_GIVEREF(__pyx_tuple__5);
    /* … */
      __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5buvar_2di_4c_di_3assert_annotated, NULL, __pyx_n_s_buvar_di_c_di); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_assert_annotated, __pyx_t_1) < 0) __PYX_ERR(0, 42, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__5, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_buvar_di_c_di_pyx, __pyx_n_s_assert_annotated, 42, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(0, 42, __pyx_L1_error)

    +043:     assert set(spec.args + spec.kwonlyargs).issubset(

      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_args_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_kwonlyargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 43, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PySet_New(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 43, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_issubset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /* … */
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 43, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_5)) {
          PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_An_adapter_must_annotate_all_of);
          __PYX_ERR(0, 43, __pyx_L1_error)
        }
      }
      #endif

    +044:         set(spec.annotations)

        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_annotations); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 44, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_2 = PySet_New(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

     045:     ), "An adapter must annotate all of its arguments."

     046:

     047:

    +048: def collect_defaults(spec):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_5collect_defaults(PyObject *__pyx_self, PyObject *__pyx_v_spec); /*proto*/
    static PyMethodDef __pyx_mdef_5buvar_2di_4c_di_5collect_defaults = {"collect_defaults", (PyCFunction)__pyx_pw_5buvar_2di_4c_di_5collect_defaults, METH_O, 0};
    static PyObject *__pyx_pw_5buvar_2di_4c_di_5collect_defaults(PyObject *__pyx_self, PyObject *__pyx_v_spec) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("collect_defaults (wrapper)", 0);
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_4collect_defaults(__pyx_self, ((PyObject *)__pyx_v_spec));

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_4collect_defaults(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_spec) {
      PyObject *__pyx_v_defaults = NULL;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("collect_defaults", 0);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_7);
      __Pyx_AddTraceback("buvar.di.c_di.collect_defaults", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_defaults);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
      __pyx_tuple__7 = PyTuple_Pack(2, __pyx_n_s_spec, __pyx_n_s_defaults); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 48, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_tuple__7);
      __Pyx_GIVEREF(__pyx_tuple__7);
    /* … */
      __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5buvar_2di_4c_di_5collect_defaults, NULL, __pyx_n_s_buvar_di_c_di); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_collect_defaults, __pyx_t_1) < 0) __PYX_ERR(0, 48, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_buvar_di_c_di_pyx, __pyx_n_s_collect_defaults, 48, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) __PYX_ERR(0, 48, __pyx_L1_error)

    +049:     defaults = dict(

      __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 49, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_defaults = ((PyObject*)__pyx_t_3);
      __pyx_t_3 = 0;

    +050:         itertools.chain(

      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_itertools); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_chain); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +051:             zip(reversed(spec.args or []), reversed(spec.defaults or [])),

      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_args_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 51, __pyx_L1_error)
      if (!__pyx_t_5) {
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_2 = __pyx_t_4;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        goto __pyx_L3_bool_binop_done;
      }
      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_2 = __pyx_t_4;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_L3_bool_binop_done:;
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_reversed, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_defaults); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 51, __pyx_L1_error)
      if (!__pyx_t_5) {
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_2 = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L5_bool_binop_done;
      }
      __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_2 = __pyx_t_6;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_L5_bool_binop_done:;
      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_reversed, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
      __pyx_t_4 = 0;
      __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_2, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +052:             (spec.kwonlydefaults or {}).items(),

      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_kwonlydefaults); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 52, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 52, __pyx_L1_error)
      if (!__pyx_t_5) {
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_4 = __pyx_t_7;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        goto __pyx_L7_bool_binop_done;
      }
      __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 52, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_4 = __pyx_t_7;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_L7_bool_binop_done:;
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_items); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 52, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_8 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_t_2};
        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_t_2};
        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else
      #endif
      {
        __pyx_t_4 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (__pyx_t_7) {
          __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7); __pyx_t_7 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_8, __pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_8, __pyx_t_2);
        __pyx_t_6 = 0;
        __pyx_t_2 = 0;
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

     053:         )

     054:     )

    +055:     return defaults

      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_defaults);
      __pyx_r = __pyx_v_defaults;
      goto __pyx_L0;

     056:

     057:

    +058: cdef class Adapter:

    struct __pyx_obj_5buvar_2di_4c_di_Adapter {
      PyObject_HEAD
      struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapter *__pyx_vtab;
      PyObject *func;
      PyObject *args;
      PyObject *locals;
      PyObject *globals;
      PyObject *owner;
      PyObject *name;
      PyObject *implements;
      PyObject *defaults;
      PyObject *_annotations;
    };
    /* … */
    struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapter {
      PyObject *(*get_hints)(struct __pyx_obj_5buvar_2di_4c_di_Adapter *);
      PyObject *(*__pyx___annotations)(struct __pyx_obj_5buvar_2di_4c_di_Adapter *);
    };
    static struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapter *__pyx_vtabptr_5buvar_2di_4c_di_Adapter;

     059:     cdef func

     060:     cdef list args

     061:     cdef dict locals

     062:     cdef dict globals

     063:     cdef owner

     064:     cdef name

     065:     cdef object implements

     066:     cdef dict defaults

     067:     cdef _annotations

     068:

    +069:     def __init__(

    /* Python wrapper */
    static int __pyx_pw_5buvar_2di_4c_di_7Adapter_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static int __pyx_pw_5buvar_2di_4c_di_7Adapter_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      PyObject *__pyx_v_func = 0;
      PyObject *__pyx_v_args = 0;
      PyObject *__pyx_v_locals = 0;
      PyObject *__pyx_v_globals = 0;
      PyObject *__pyx_v_owner = 0;
      PyObject *__pyx_v_name = 0;
      PyObject *__pyx_v_implements = 0;
      PyObject *__pyx_v_defaults = 0;
      int __pyx_r;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
      {
        static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_args_2,&__pyx_n_s_locals,&__pyx_n_s_globals,&__pyx_n_s_owner,&__pyx_n_s_name,&__pyx_n_s_implements,&__pyx_n_s_defaults,0};
        PyObject* values[8] = {0,0,0,0,0,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  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
            CYTHON_FALLTHROUGH;
            case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
            CYTHON_FALLTHROUGH;
            case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
            CYTHON_FALLTHROUGH;
            case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
            CYTHON_FALLTHROUGH;
            case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
            CYTHON_FALLTHROUGH;
            case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
            CYTHON_FALLTHROUGH;
            case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
            CYTHON_FALLTHROUGH;
            case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
            CYTHON_FALLTHROUGH;
            case  0: break;
            default: goto __pyx_L5_argtuple_error;
          }
          kw_args = PyDict_Size(__pyx_kwds);
          switch (pos_args) {
            case  0:
            if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--;
            else goto __pyx_L5_argtuple_error;
            CYTHON_FALLTHROUGH;
            case  1:
            if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args_2)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 1); __PYX_ERR(0, 69, __pyx_L3_error)
            }
            CYTHON_FALLTHROUGH;
            case  2:
            if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_locals)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 2); __PYX_ERR(0, 69, __pyx_L3_error)
            }
            CYTHON_FALLTHROUGH;
            case  3:
            if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_globals)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 3); __PYX_ERR(0, 69, __pyx_L3_error)
            }
            CYTHON_FALLTHROUGH;
            case  4:
            if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_owner)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 4); __PYX_ERR(0, 69, __pyx_L3_error)
            }
            CYTHON_FALLTHROUGH;
            case  5:
            if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 5); __PYX_ERR(0, 69, __pyx_L3_error)
            }
            CYTHON_FALLTHROUGH;
            case  6:
            if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_implements)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 6); __PYX_ERR(0, 69, __pyx_L3_error)
            }
            CYTHON_FALLTHROUGH;
            case  7:
            if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 7); __PYX_ERR(0, 69, __pyx_L3_error)
            }
          }
          if (unlikely(kw_args > 0)) {
            if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 69, __pyx_L3_error)
          }
        } else if (PyTuple_GET_SIZE(__pyx_args) != 8) {
          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);
          values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
          values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
          values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
          values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
          values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        }
        __pyx_v_func = values[0];
        __pyx_v_args = values[1];
        __pyx_v_locals = values[2];
        __pyx_v_globals = values[3];
        __pyx_v_owner = values[4];
        __pyx_v_name = values[5];
        __pyx_v_implements = values[6];
        __pyx_v_defaults = values[7];
      }
      goto __pyx_L4_argument_unpacking_done;
      __pyx_L5_argtuple_error:;
      __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 69, __pyx_L3_error)
      __pyx_L3_error:;
      __Pyx_AddTraceback("buvar.di.c_di.Adapter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __Pyx_RefNannyFinishContext();
      return -1;
      __pyx_L4_argument_unpacking_done:;
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_7Adapter___init__(((struct __pyx_obj_5buvar_2di_4c_di_Adapter *)__pyx_v_self), __pyx_v_func, __pyx_v_args, __pyx_v_locals, __pyx_v_globals, __pyx_v_owner, __pyx_v_name, __pyx_v_implements, __pyx_v_defaults);

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static int __pyx_pf_5buvar_2di_4c_di_7Adapter___init__(struct __pyx_obj_5buvar_2di_4c_di_Adapter *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_args, PyObject *__pyx_v_locals, PyObject *__pyx_v_globals, PyObject *__pyx_v_owner, PyObject *__pyx_v_name, PyObject *__pyx_v_implements, PyObject *__pyx_v_defaults) {
      int __pyx_r;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__init__", 0);
    /* … */
      /* function exit code */
      __pyx_r = 0;
      goto __pyx_L0;
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_AddTraceback("buvar.di.c_di.Adapter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = -1;
      __pyx_L0:;
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

     070:         self,

     071:         func,

     072:         args,

     073:         locals,

     074:         globals,

     075:         owner,

     076:         name,

     077:         implements,

     078:         defaults,

     079:     ):

    +080:         self.func = func

      __Pyx_INCREF(__pyx_v_func);
      __Pyx_GIVEREF(__pyx_v_func);
      __Pyx_GOTREF(__pyx_v_self->func);
      __Pyx_DECREF(__pyx_v_self->func);
      __pyx_v_self->func = __pyx_v_func;

    +081:         self.args = args

      if (!(likely(PyList_CheckExact(__pyx_v_args))||((__pyx_v_args) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_args)->tp_name), 0))) __PYX_ERR(0, 81, __pyx_L1_error)
      __pyx_t_1 = __pyx_v_args;
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->args);
      __Pyx_DECREF(__pyx_v_self->args);
      __pyx_v_self->args = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;

    +082:         self.locals = locals

      if (!(likely(PyDict_CheckExact(__pyx_v_locals))||((__pyx_v_locals) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_locals)->tp_name), 0))) __PYX_ERR(0, 82, __pyx_L1_error)
      __pyx_t_1 = __pyx_v_locals;
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->locals);
      __Pyx_DECREF(__pyx_v_self->locals);
      __pyx_v_self->locals = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;

    +083:         self.globals = globals

      if (!(likely(PyDict_CheckExact(__pyx_v_globals))||((__pyx_v_globals) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_globals)->tp_name), 0))) __PYX_ERR(0, 83, __pyx_L1_error)
      __pyx_t_1 = __pyx_v_globals;
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->globals);
      __Pyx_DECREF(__pyx_v_self->globals);
      __pyx_v_self->globals = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;

    +084:         self.owner = owner

      __Pyx_INCREF(__pyx_v_owner);
      __Pyx_GIVEREF(__pyx_v_owner);
      __Pyx_GOTREF(__pyx_v_self->owner);
      __Pyx_DECREF(__pyx_v_self->owner);
      __pyx_v_self->owner = __pyx_v_owner;

    +085:         self.name = name

      __Pyx_INCREF(__pyx_v_name);
      __Pyx_GIVEREF(__pyx_v_name);
      __Pyx_GOTREF(__pyx_v_self->name);
      __Pyx_DECREF(__pyx_v_self->name);
      __pyx_v_self->name = __pyx_v_name;

    +086:         self.implements = implements

      __Pyx_INCREF(__pyx_v_implements);
      __Pyx_GIVEREF(__pyx_v_implements);
      __Pyx_GOTREF(__pyx_v_self->implements);
      __Pyx_DECREF(__pyx_v_self->implements);
      __pyx_v_self->implements = __pyx_v_implements;

    +087:         self.defaults = defaults

      if (!(likely(PyDict_CheckExact(__pyx_v_defaults))||((__pyx_v_defaults) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_defaults)->tp_name), 0))) __PYX_ERR(0, 87, __pyx_L1_error)
      __pyx_t_1 = __pyx_v_defaults;
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->defaults);
      __Pyx_DECREF(__pyx_v_self->defaults);
      __pyx_v_self->defaults = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;

    +088:         self._annotations = None

      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_self->_annotations);
      __Pyx_DECREF(__pyx_v_self->_annotations);
      __pyx_v_self->_annotations = Py_None;

     089:

    +090:     cdef get_hints(self):

    static PyObject *__pyx_f_5buvar_2di_4c_di_7Adapter_get_hints(struct __pyx_obj_5buvar_2di_4c_di_Adapter *__pyx_v_self) {
      PyObject *__pyx_v_f_locals = NULL;
      PyObject *__pyx_v_hints = NULL;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("get_hints", 0);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_9);
      __Pyx_AddTraceback("buvar.di.c_di.Adapter.get_hints", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = 0;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_f_locals);
      __Pyx_XDECREF(__pyx_v_hints);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +091:         f_locals = dict(self.locals)

      if (unlikely(__pyx_v_self->locals == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
        __PYX_ERR(0, 91, __pyx_L1_error)
      }
      __pyx_t_1 = PyDict_Copy(__pyx_v_self->locals); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_f_locals = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;

    +092:         if isinstance(self.implements, str) and self.implements not in f_locals:

      __pyx_t_1 = __pyx_v_self->implements;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = PyUnicode_Check(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_4 = (__pyx_t_3 != 0);
      if (__pyx_t_4) {
      } else {
        __pyx_t_2 = __pyx_t_4;
        goto __pyx_L4_bool_binop_done;
      }
      __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_v_self->implements, __pyx_v_f_locals, Py_NE)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_4 != 0);
      __pyx_t_2 = __pyx_t_3;
      __pyx_L4_bool_binop_done:;
      if (__pyx_t_2) {
    /* … */
      }

    +093:             f_locals[self.implements] = self.owner

        __pyx_t_1 = __pyx_v_self->owner;
        __Pyx_INCREF(__pyx_t_1);
        if (unlikely(PyDict_SetItem(__pyx_v_f_locals, __pyx_v_self->implements, __pyx_t_1) < 0)) __PYX_ERR(0, 93, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +094:         hints = typing.get_type_hints(

      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_typing); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 94, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get_type_hints); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 94, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    +095:             self.func.__init__ if isinstance(self.func, type) else self.func,

      __pyx_t_7 = __pyx_v_self->func;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_2 = PyType_Check(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if ((__pyx_t_2 != 0)) {
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->func, __pyx_n_s_init); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 95, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_5 = __pyx_t_7;
        __pyx_t_7 = 0;
      } else {
        __Pyx_INCREF(__pyx_v_self->func);
        __pyx_t_5 = __pyx_v_self->func;
      }

     096:             self.globals,

    +097:             f_locals,

      __pyx_t_7 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
          __pyx_t_8 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_t_5, __pyx_v_self->globals, __pyx_v_f_locals};
        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_t_5, __pyx_v_self->globals, __pyx_v_f_locals};
        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      {
        __pyx_t_9 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 94, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (__pyx_t_7) {
          __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_5);
        __Pyx_INCREF(__pyx_v_self->globals);
        __Pyx_GIVEREF(__pyx_v_self->globals);
        PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_self->globals);
        __Pyx_INCREF(__pyx_v_f_locals);
        __Pyx_GIVEREF(__pyx_v_f_locals);
        PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_8, __pyx_v_f_locals);
        __pyx_t_5 = 0;
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_hints = __pyx_t_1;
      __pyx_t_1 = 0;

     098:         )

     099:

    +100:         return hints

      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_hints);
      __pyx_r = __pyx_v_hints;
      goto __pyx_L0;

     101:

    +102:     cdef __annotations(self):

    static PyObject *__pyx_f_5buvar_2di_4c_di_7Adapter___annotations(struct __pyx_obj_5buvar_2di_4c_di_Adapter *__pyx_v_self) {
      PyObject *__pyx_v_hints = 0;
      PyObject *__pyx_7genexpr__pyx_v_arg = NULL;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__annotations", 0);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_9);
      __Pyx_AddTraceback("buvar.di.c_di.Adapter.__annotations", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = 0;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_hints);
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_arg);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +103:         if self._annotations is not None:

      __pyx_t_1 = (__pyx_v_self->_annotations != Py_None);
      __pyx_t_2 = (__pyx_t_1 != 0);
      if (__pyx_t_2) {
    /* … */
      }

    +104:             return self._annotations

        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_self->_annotations);
        __pyx_r = __pyx_v_self->_annotations;
        goto __pyx_L0;

     105:

    +106:         cdef dict hints = self.get_hints()

      __pyx_t_3 = ((struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapter *)__pyx_v_self->__pyx_vtab)->get_hints(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 106, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 106, __pyx_L1_error)
      __pyx_v_hints = ((PyObject*)__pyx_t_3);
      __pyx_t_3 = 0;

    +107:         self._annotations = {

      { /* enter inner scope */
        __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 107, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
    /* … */
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_v_self->_annotations);
      __Pyx_DECREF(__pyx_v_self->_annotations);
      __pyx_v_self->_annotations = __pyx_t_3;
      __pyx_t_3 = 0;

    +108:             arg: _extract_optional_type(hints[arg])

          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_extract_optional_type); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 108, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (unlikely(__pyx_v_hints == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 108, __pyx_L6_error)
          }
          __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_hints, __pyx_7genexpr__pyx_v_arg); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 108, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_7, function);
            }
          }
          __pyx_t_6 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_9, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 108, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(PyDict_SetItem(__pyx_t_3, (PyObject*)__pyx_7genexpr__pyx_v_arg, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 108, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

    +109:             for arg in self.args

        if (unlikely(__pyx_v_self->args == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 109, __pyx_L6_error)
        }
        __pyx_t_4 = __pyx_v_self->args; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
        for (;;) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 109, __pyx_L6_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
          __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_arg, __pyx_t_6);
          __pyx_t_6 = 0;
    /* … */
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_7genexpr__pyx_v_arg); __pyx_7genexpr__pyx_v_arg = 0;
        goto __pyx_L9_exit_scope;
        __pyx_L6_error:;
        __Pyx_XDECREF(__pyx_7genexpr__pyx_v_arg); __pyx_7genexpr__pyx_v_arg = 0;
        goto __pyx_L1_error;
        __pyx_L9_exit_scope:;
      } /* exit inner scope */

     110:         }

     111:

    +112:         return self._annotations

      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_self->_annotations);
      __pyx_r = __pyx_v_self->_annotations;
      goto __pyx_L0;

     113:

     114:     @property

    +115:     def annotations(self):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_7Adapter_11annotations_1__get__(PyObject *__pyx_v_self); /*proto*/
    static PyObject *__pyx_pw_5buvar_2di_4c_di_7Adapter_11annotations_1__get__(PyObject *__pyx_v_self) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_7Adapter_11annotations___get__(((struct __pyx_obj_5buvar_2di_4c_di_Adapter *)__pyx_v_self));

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_7Adapter_11annotations___get__(struct __pyx_obj_5buvar_2di_4c_di_Adapter *__pyx_v_self) {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__get__", 0);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_AddTraceback("buvar.di.c_di.Adapter.annotations.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    static PyObject *__pyx_gb_5buvar_2di_4c_di_7Adapter_4generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

    +116:         return self.__annotations()

      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = ((struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapter *)__pyx_v_self->__pyx_vtab)->__pyx___annotations(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 116, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L0;

     117:

    +118:     async def create(self, *args, **kwargs):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_7Adapter_3create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static char __pyx_doc_5buvar_2di_4c_di_7Adapter_2create[] = "Create the target instance.";
    static PyObject *__pyx_pw_5buvar_2di_4c_di_7Adapter_3create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      PyObject *__pyx_v_args = 0;
      PyObject *__pyx_v_kwargs = 0;
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("create (wrapper)", 0);
      if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "create", 1))) return NULL;
      if (unlikely(__pyx_kwds)) {
        __pyx_v_kwargs = PyDict_Copy(__pyx_kwds); if (unlikely(!__pyx_v_kwargs)) return NULL;
        __Pyx_GOTREF(__pyx_v_kwargs);
      } else {
        __pyx_v_kwargs = NULL;
      }
      __Pyx_INCREF(__pyx_args);
      __pyx_v_args = __pyx_args;
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_7Adapter_2create(((struct __pyx_obj_5buvar_2di_4c_di_Adapter *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs);

      /* function exit code */
      __Pyx_XDECREF(__pyx_v_args);
      __Pyx_XDECREF(__pyx_v_kwargs);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_7Adapter_2create(struct __pyx_obj_5buvar_2di_4c_di_Adapter *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) {
      struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct__create *__pyx_cur_scope;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("create", 0);
      __pyx_cur_scope = (struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct__create *)__pyx_tp_new_5buvar_2di_4c_di___pyx_scope_struct__create(__pyx_ptype_5buvar_2di_4c_di___pyx_scope_struct__create, __pyx_empty_tuple, NULL);
      if (unlikely(!__pyx_cur_scope)) {
        __pyx_cur_scope = ((struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct__create *)Py_None);
        __Pyx_INCREF(Py_None);
        __PYX_ERR(0, 118, __pyx_L1_error)
      } else {
        __Pyx_GOTREF(__pyx_cur_scope);
      }
      __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
      __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
      __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
      __pyx_cur_scope->__pyx_v_args = __pyx_v_args;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_args);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_args);
      __pyx_cur_scope->__pyx_v_kwargs = __pyx_v_kwargs;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_kwargs);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_kwargs);
      {
        __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_5buvar_2di_4c_di_7Adapter_4generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_create, __pyx_n_s_Adapter_create, __pyx_n_s_buvar_di_c_di); if (unlikely(!gen)) __PYX_ERR(0, 118, __pyx_L1_error)
        __Pyx_DECREF(__pyx_cur_scope);
        __Pyx_RefNannyFinishContext();
        return (PyObject *) gen;
      }

      /* function exit code */
      __pyx_L1_error:;
      __Pyx_AddTraceback("buvar.di.c_di.Adapter.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_gb_5buvar_2di_4c_di_7Adapter_4generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
    {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("create", 0);
      __pyx_L3_first_run:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 118, __pyx_L1_error)
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_7);
      __Pyx_AddTraceback("create", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
      #if !CYTHON_USE_EXC_INFO_STACK
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      #endif
      __pyx_generator->resume_label = -1;
      __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
    struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct__create {
      PyObject_HEAD
      PyObject *__pyx_v_adapted;
      PyObject *__pyx_v_args;
      PyObject *__pyx_v_func;
      PyObject *__pyx_v_kwargs;
      struct __pyx_obj_5buvar_2di_4c_di_Adapter *__pyx_v_self;
    };

     119:         """Create the target instance."""

    +120:         func = functools.partial(self.func, self.owner) if self.owner else self.func

      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_self->owner); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 120, __pyx_L1_error)
      if (__pyx_t_2) {
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_functools); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 120, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_partial); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 120, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
            __pyx_t_6 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_5)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_self->func, __pyx_cur_scope->__pyx_v_self->owner};
          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_3);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_self->func, __pyx_cur_scope->__pyx_v_self->owner};
          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_3);
        } else
        #endif
        {
          __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 120, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->func);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self->func);
          PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_cur_scope->__pyx_v_self->func);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->owner);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self->owner);
          PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_cur_scope->__pyx_v_self->owner);
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_1 = __pyx_t_3;
        __pyx_t_3 = 0;
      } else {
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->func);
        __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->func;
      }
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_v_func = __pyx_t_1;
      __pyx_t_1 = 0;

    +121:         if inspect.iscoroutinefunction(self.func):

      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_inspect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 121, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_iscoroutinefunction); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 121, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_cur_scope->__pyx_v_self->func) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_self->func);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 121, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_2) {
    /* … */
        goto __pyx_L4;
      }

    +122:             adapted = await func(*args, **kwargs)

        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_cur_scope->__pyx_v_args, __pyx_cur_scope->__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 122, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XGOTREF(__pyx_r);
        if (likely(__pyx_r)) {
          __Pyx_XGIVEREF(__pyx_r);
          __Pyx_RefNannyFinishContext();
          __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
          /* return from generator, awaiting value */
          __pyx_generator->resume_label = 1;
          return __pyx_r;
          __pyx_L5_resume_from_await:;
          if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 122, __pyx_L1_error)
          __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
        } else {
          __pyx_t_1 = NULL;
          if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 122, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_GIVEREF(__pyx_t_1);
        __pyx_cur_scope->__pyx_v_adapted = __pyx_t_1;
        __pyx_t_1 = 0;

     123:         else:

    +124:             adapted = func(*args, **kwargs)

      /*else*/ {
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_cur_scope->__pyx_v_args, __pyx_cur_scope->__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        __pyx_cur_scope->__pyx_v_adapted = __pyx_t_1;
        __pyx_t_1 = 0;
      }
      __pyx_L4:;

    +125:         return adapted

      __Pyx_XDECREF(__pyx_r);
      __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_adapted);
      goto __pyx_L0;
      CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

     126:

     127:

    +128: cdef prepare_components(tuple targets, dict dependencies):

    static PyObject *__pyx_f_5buvar_2di_4c_di_prepare_components(CYTHON_UNUSED PyObject *__pyx_v_targets, PyObject *__pyx_v_dependencies) {
      struct __pyx_obj_5buvar_10components_12c_components_Components *__pyx_v_cmps = 0;
      PyObject *__pyx_v_name = NULL;
      PyObject *__pyx_v_dep = NULL;
      struct __pyx_obj_5buvar_10components_12c_components_Components *__pyx_v_current_context = 0;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("prepare_components", 0);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_9);
      __Pyx_AddTraceback("buvar.di.c_di.prepare_components", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = 0;
      __pyx_L0:;
      __Pyx_XDECREF((PyObject *)__pyx_v_cmps);
      __Pyx_XDECREF(__pyx_v_name);
      __Pyx_XDECREF(__pyx_v_dep);
      __Pyx_XDECREF((PyObject *)__pyx_v_current_context);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

     129:     # create components

    +130:     cdef Components cmps = Components()

      __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_5buvar_10components_12c_components_Components)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 130, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_cmps = ((struct __pyx_obj_5buvar_10components_12c_components_Components *)__pyx_t_1);
      __pyx_t_1 = 0;

     131:

     132:     # add default unnamed dependencies

     133:     # every non-default argument of the same type gets its value

     134:     # XXX is this good?

    +135:     for name, dep in dependencies.items():

      __pyx_t_2 = 0;
      if (unlikely(__pyx_v_dependencies == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 135, __pyx_L1_error)
      }
      __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_dependencies, 1, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_5;
      __pyx_t_5 = 0;
      while (1) {
        __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
        if (unlikely(__pyx_t_7 == 0)) break;
        if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 135, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_5);
        __pyx_t_5 = 0;
        __Pyx_XDECREF_SET(__pyx_v_dep, __pyx_t_6);
        __pyx_t_6 = 0;

    +136:         cmps.add(dep)

        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cmps), __pyx_n_s_add); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 136, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_8 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
          }
        }
        __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_8, __pyx_v_dep) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_dep);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 136, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     137:

    +138:     cdef Components current_context = context.current_context()

      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_context); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 138, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_current_context); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 138, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__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_1)) __PYX_ERR(0, 138, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5buvar_10components_12c_components_Components))))) __PYX_ERR(0, 138, __pyx_L1_error)
      __pyx_v_current_context = ((struct __pyx_obj_5buvar_10components_12c_components_Components *)__pyx_t_1);
      __pyx_t_1 = 0;

     139:

     140:     # add current context

    +141:     cmps = cmps.push(*current_context.stack)

      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cmps), __pyx_n_s_push); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = PySequence_Tuple(__pyx_v_current_context->stack); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 141, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 141, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5buvar_10components_12c_components_Components))))) __PYX_ERR(0, 141, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_cmps, ((struct __pyx_obj_5buvar_10components_12c_components_Components *)__pyx_t_6));
      __pyx_t_6 = 0;

     142:

     143:     # add default named dependencies

    +144:     cmps = cmps.push()

      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cmps), __pyx_n_s_push); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 144, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 144, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5buvar_10components_12c_components_Components))))) __PYX_ERR(0, 144, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_cmps, ((struct __pyx_obj_5buvar_10components_12c_components_Components *)__pyx_t_6));
      __pyx_t_6 = 0;

    +145:     for name, dep in dependencies.items():

      __pyx_t_3 = 0;
      if (unlikely(__pyx_v_dependencies == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 145, __pyx_L1_error)
      }
      __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_dependencies, 1, __pyx_n_s_items, (&__pyx_t_2), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 145, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_6);
      __pyx_t_6 = __pyx_t_5;
      __pyx_t_5 = 0;
      while (1) {
        __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_2, &__pyx_t_3, &__pyx_t_5, &__pyx_t_1, NULL, __pyx_t_4);
        if (unlikely(__pyx_t_7 == 0)) break;
        if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 145, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_5);
        __pyx_t_5 = 0;
        __Pyx_XDECREF_SET(__pyx_v_dep, __pyx_t_1);
        __pyx_t_1 = 0;

    +146:         cmps.add(dep, name=name)

        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cmps), __pyx_n_s_add); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_v_dep);
        __Pyx_GIVEREF(__pyx_v_dep);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dep);
        __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(0, 146, __pyx_L1_error)
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

     147:

    +148:     return cmps

      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(((PyObject *)__pyx_v_cmps));
      __pyx_r = ((PyObject *)__pyx_v_cmps);
      goto __pyx_L0;

     149:

     150:

    +151: cdef class _adapter:

    struct __pyx_obj_5buvar_2di_4c_di__adapter {
      PyObject_HEAD
      struct __pyx_obj_5buvar_2di_4c_di_Adapters *adapters;
      struct __pyx_obj_5buvar_2di_4c_di_Adapter *adapter;
    };

     152:     cdef Adapters adapters

     153:     cdef Adapter adapter

     154:

    +155:     def __init__(self, func, adapters):

    /* Python wrapper */
    static int __pyx_pw_5buvar_2di_4c_di_8_adapter_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static int __pyx_pw_5buvar_2di_4c_di_8_adapter_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      PyObject *__pyx_v_func = 0;
      PyObject *__pyx_v_adapters = 0;
      int __pyx_r;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
      {
        static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_adapters,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);
            CYTHON_FALLTHROUGH;
            case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
            CYTHON_FALLTHROUGH;
            case  0: break;
            default: goto __pyx_L5_argtuple_error;
          }
          kw_args = PyDict_Size(__pyx_kwds);
          switch (pos_args) {
            case  0:
            if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--;
            else goto __pyx_L5_argtuple_error;
            CYTHON_FALLTHROUGH;
            case  1:
            if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_adapters)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 155, __pyx_L3_error)
            }
          }
          if (unlikely(kw_args > 0)) {
            if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 155, __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_func = values[0];
        __pyx_v_adapters = values[1];
      }
      goto __pyx_L4_argument_unpacking_done;
      __pyx_L5_argtuple_error:;
      __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 155, __pyx_L3_error)
      __pyx_L3_error:;
      __Pyx_AddTraceback("buvar.di.c_di._adapter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __Pyx_RefNannyFinishContext();
      return -1;
      __pyx_L4_argument_unpacking_done:;
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8_adapter___init__(((struct __pyx_obj_5buvar_2di_4c_di__adapter *)__pyx_v_self), __pyx_v_func, __pyx_v_adapters);

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static int __pyx_pf_5buvar_2di_4c_di_8_adapter___init__(struct __pyx_obj_5buvar_2di_4c_di__adapter *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_adapters) {
      PyObject *__pyx_v_frame = NULL;
      PyObject *__pyx_v_spec = NULL;
      PyObject *__pyx_v_implements = NULL;
      PyObject *__pyx_v_args = NULL;
      int __pyx_r;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__init__", 0);
    /* … */
      /* function exit code */
      __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("buvar.di.c_di._adapter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = -1;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_frame);
      __Pyx_XDECREF(__pyx_v_spec);
      __Pyx_XDECREF(__pyx_v_implements);
      __Pyx_XDECREF(__pyx_v_args);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +156:         self.adapters = adapters

      if (!(likely(((__pyx_v_adapters) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_adapters, __pyx_ptype_5buvar_2di_4c_di_Adapters))))) __PYX_ERR(0, 156, __pyx_L1_error)
      __pyx_t_1 = __pyx_v_adapters;
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->adapters);
      __Pyx_DECREF(((PyObject *)__pyx_v_self->adapters));
      __pyx_v_self->adapters = ((struct __pyx_obj_5buvar_2di_4c_di_Adapters *)__pyx_t_1);
      __pyx_t_1 = 0;

    +157:         frame = sys._getframe(1)

      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 157, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_getframe); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 157, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_int_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_int_1);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_frame = __pyx_t_1;
      __pyx_t_1 = 0;

    +158:         spec = inspect.getfullargspec(func)

      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_inspect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_getfullargspec); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 158, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_func) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_func);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_spec = __pyx_t_1;
      __pyx_t_1 = 0;

     159:         # remove cls arg

    +160:         spec.args.pop(0)

      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_args_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_PopIndex(__pyx_t_1, __pyx_int_0, 0, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __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;

    +161:         implements = spec.annotations["return"]

      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_annotations); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 161, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_2, __pyx_n_u_return); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_implements = __pyx_t_1;
      __pyx_t_1 = 0;

     162:         # all arguments must be annotated

    +163:         assert_annotated(spec)

      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_assert_annotated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_spec) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_spec);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     164:

    +165:         args = spec.args + spec.kwonlyargs

      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_args_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_kwonlyargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 165, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 165, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_args = __pyx_t_3;
      __pyx_t_3 = 0;

     166:

    +167:         self.adapter = Adapter(

      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5buvar_2di_4c_di_Adapter), __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_v_self->adapter);
      __Pyx_DECREF(((PyObject *)__pyx_v_self->adapter));
      __pyx_v_self->adapter = ((struct __pyx_obj_5buvar_2di_4c_di_Adapter *)__pyx_t_2);
      __pyx_t_2 = 0;

    +168:             func=func,

      __pyx_t_3 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 168, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_func, __pyx_v_func) < 0) __PYX_ERR(0, 168, __pyx_L1_error)

    +169:             args=args,

      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_args_2, __pyx_v_args) < 0) __PYX_ERR(0, 168, __pyx_L1_error)

    +170:             locals=frame.f_locals,

      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_locals); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_locals, __pyx_t_2) < 0) __PYX_ERR(0, 168, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +171:             globals=frame.f_globals,

      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_globals); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_globals, __pyx_t_2) < 0) __PYX_ERR(0, 168, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +172:             owner=None,

      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_owner, Py_None) < 0) __PYX_ERR(0, 168, __pyx_L1_error)

    +173:             name=None,

      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_name, Py_None) < 0) __PYX_ERR(0, 168, __pyx_L1_error)

    +174:             defaults=collect_defaults(spec),

      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_collect_defaults); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_spec) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_spec);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_defaults, __pyx_t_2) < 0) __PYX_ERR(0, 168, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +175:             implements=implements,

      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_implements, __pyx_v_implements) < 0) __PYX_ERR(0, 168, __pyx_L1_error)

     176:         )

    +177:         adapters.add(implements, self.adapter)

      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_adapters, __pyx_n_s_add); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = NULL;
      __pyx_t_5 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_5 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_implements, ((PyObject *)__pyx_v_self->adapter)};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_implements, ((PyObject *)__pyx_v_self->adapter)};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      {
        __pyx_t_4 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_INCREF(__pyx_v_implements);
        __Pyx_GIVEREF(__pyx_v_implements);
        PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_5, __pyx_v_implements);
        __Pyx_INCREF(((PyObject *)__pyx_v_self->adapter));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_self->adapter));
        PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_5, ((PyObject *)__pyx_v_self->adapter));
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

     178:

    +179:     def __set_name__(self, owner, name):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8_adapter_3__set_name__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8_adapter_3__set_name__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      PyObject *__pyx_v_owner = 0;
      PyObject *__pyx_v_name = 0;
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__set_name__ (wrapper)", 0);
      {
        static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_owner,&__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);
            CYTHON_FALLTHROUGH;
            case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
            CYTHON_FALLTHROUGH;
            case  0: break;
            default: goto __pyx_L5_argtuple_error;
          }
          kw_args = PyDict_Size(__pyx_kwds);
          switch (pos_args) {
            case  0:
            if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_owner)) != 0)) kw_args--;
            else goto __pyx_L5_argtuple_error;
            CYTHON_FALLTHROUGH;
            case  1:
            if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("__set_name__", 1, 2, 2, 1); __PYX_ERR(0, 179, __pyx_L3_error)
            }
          }
          if (unlikely(kw_args > 0)) {
            if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__set_name__") < 0)) __PYX_ERR(0, 179, __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_owner = values[0];
        __pyx_v_name = values[1];
      }
      goto __pyx_L4_argument_unpacking_done;
      __pyx_L5_argtuple_error:;
      __Pyx_RaiseArgtupleInvalid("__set_name__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 179, __pyx_L3_error)
      __pyx_L3_error:;
      __Pyx_AddTraceback("buvar.di.c_di._adapter.__set_name__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __Pyx_RefNannyFinishContext();
      return NULL;
      __pyx_L4_argument_unpacking_done:;
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8_adapter_2__set_name__(((struct __pyx_obj_5buvar_2di_4c_di__adapter *)__pyx_v_self), __pyx_v_owner, __pyx_v_name);

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_8_adapter_2__set_name__(struct __pyx_obj_5buvar_2di_4c_di__adapter *__pyx_v_self, PyObject *__pyx_v_owner, PyObject *__pyx_v_name) {
      PyObject *__pyx_v_hints = NULL;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__set_name__", 0);
    /* … */
      /* function exit code */
      __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_9);
      __Pyx_AddTraceback("buvar.di.c_di._adapter.__set_name__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_hints);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +180:         self.adapter.owner = owner

      __Pyx_INCREF(__pyx_v_owner);
      __Pyx_GIVEREF(__pyx_v_owner);
      __Pyx_GOTREF(__pyx_v_self->adapter->owner);
      __Pyx_DECREF(__pyx_v_self->adapter->owner);
      __pyx_v_self->adapter->owner = __pyx_v_owner;

    +181:         self.adapter.name = name

      __Pyx_INCREF(__pyx_v_name);
      __Pyx_GIVEREF(__pyx_v_name);
      __Pyx_GOTREF(__pyx_v_self->adapter->name);
      __Pyx_DECREF(__pyx_v_self->adapter->name);
      __pyx_v_self->adapter->name = __pyx_v_name;

     182:

    +183:         try:

      {
        /*try:*/ {
    /* … */
        }
        __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;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    /* … */
        __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_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:;
      }

    +184:             hints = self.adapter.get_hints()

          __pyx_t_4 = ((struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapter *)__pyx_v_self->adapter->__pyx_vtab)->get_hints(__pyx_v_self->adapter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 184, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_v_hints = __pyx_t_4;
          __pyx_t_4 = 0;

    +185:             self.adapter.implements = hints["return"]

          __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_hints, __pyx_n_u_return); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          __Pyx_GOTREF(__pyx_v_self->adapter->implements);
          __Pyx_DECREF(__pyx_v_self->adapter->implements);
          __pyx_v_self->adapter->implements = __pyx_t_4;
          __pyx_t_4 = 0;

    +186:             self.adapters.add(hints["return"], self.adapter)

          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->adapters), __pyx_n_s_add); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 186, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_v_hints, __pyx_n_u_return); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 186, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = NULL;
          __pyx_t_8 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_7)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_7);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
              __pyx_t_8 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_5)) {
            PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, ((PyObject *)__pyx_v_self->adapter)};
            __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L3_error)
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
            PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, ((PyObject *)__pyx_v_self->adapter)};
            __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L3_error)
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          } else
          #endif
          {
            __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 186, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_9);
            if (__pyx_t_7) {
              __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
            }
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6);
            __Pyx_INCREF(((PyObject *)__pyx_v_self->adapter));
            __Pyx_GIVEREF(((PyObject *)__pyx_v_self->adapter));
            PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, ((PyObject *)__pyx_v_self->adapter));
            __pyx_t_6 = 0;
            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    +187:         except NameError:

        __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_NameError);
        if (__pyx_t_8) {
          __Pyx_ErrRestore(0,0,0);
          goto __pyx_L4_exception_handled;
        }
        goto __pyx_L5_except_error;
        __pyx_L5_except_error:;

     188:             pass

     189:

    +190:     def __get__(self, instance, owner):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8_adapter_5__get__(PyObject *__pyx_v_self, PyObject *__pyx_v_instance, PyObject *__pyx_v_owner); /*proto*/
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8_adapter_5__get__(PyObject *__pyx_v_self, PyObject *__pyx_v_instance, PyObject *__pyx_v_owner) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8_adapter_4__get__(((struct __pyx_obj_5buvar_2di_4c_di__adapter *)__pyx_v_self), ((PyObject *)__pyx_v_instance), ((PyObject *)__pyx_v_owner));

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_8_adapter_4__get__(struct __pyx_obj_5buvar_2di_4c_di__adapter *__pyx_v_self, PyObject *__pyx_v_instance, PyObject *__pyx_v_owner) {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__get__", 0);
      __Pyx_INCREF(__pyx_v_owner);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_7);
      __Pyx_AddTraceback("buvar.di.c_di._adapter.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_owner);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +191:         if owner is None:

      __pyx_t_1 = (__pyx_v_owner == Py_None);
      __pyx_t_2 = (__pyx_t_1 != 0);
      if (__pyx_t_2) {
    /* … */
      }

    +192:             owner = type(instance)

        __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_instance)));
        __Pyx_DECREF_SET(__pyx_v_owner, ((PyObject *)Py_TYPE(__pyx_v_instance)));

    +193:         return functools.partial(self.adapter.func, owner)

      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_functools); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 193, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_partial); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 193, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_6 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_self->adapter->func, __pyx_v_owner};
        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_3);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_self->adapter->func, __pyx_v_owner};
        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_3);
      } else
      #endif
      {
        __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 193, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (__pyx_t_4) {
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
        }
        __Pyx_INCREF(__pyx_v_self->adapter->func);
        __Pyx_GIVEREF(__pyx_v_self->adapter->func);
        PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_self->adapter->func);
        __Pyx_INCREF(__pyx_v_owner);
        __Pyx_GIVEREF(__pyx_v_owner);
        PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_owner);
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;

     194:

     195:

    +196: cdef class Adapters:

    struct __pyx_obj_5buvar_2di_4c_di_Adapters {
      PyObject_HEAD
      struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapters *__pyx_vtab;
      PyObject *_index;
    };
    /* … */
    struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapters {
      PyObject *(*_add)(struct __pyx_obj_5buvar_2di_4c_di_Adapters *, PyObject *, PyObject *);
    };
    static struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapters *__pyx_vtabptr_5buvar_2di_4c_di_Adapters;

     197:     cdef dict _index

    +198:     def __init__(self):

    /* Python wrapper */
    static int __pyx_pw_5buvar_2di_4c_di_8Adapters_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static int __pyx_pw_5buvar_2di_4c_di_8Adapters_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      int __pyx_r;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
      if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
        __Pyx_RaiseArgtupleInvalid("__init__", 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, "__init__", 0))) return -1;
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8Adapters___init__(((struct __pyx_obj_5buvar_2di_4c_di_Adapters *)__pyx_v_self));

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static int __pyx_pf_5buvar_2di_4c_di_8Adapters___init__(struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self) {
      int __pyx_r;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__init__", 0);
    /* … */
      /* function exit code */
      __pyx_r = 0;
      goto __pyx_L0;
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_AddTraceback("buvar.di.c_di.Adapters.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = -1;
      __pyx_L0:;
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +199:         self._index = {}

      __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->_index);
      __Pyx_DECREF(__pyx_v_self->_index);
      __pyx_v_self->_index = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;

     200:

     201:     @property

    +202:     def index(self):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_5index_1__get__(PyObject *__pyx_v_self); /*proto*/
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_5index_1__get__(PyObject *__pyx_v_self) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8Adapters_5index___get__(((struct __pyx_obj_5buvar_2di_4c_di_Adapters *)__pyx_v_self));

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_8Adapters_5index___get__(struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self) {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__get__", 0);
    /* … */
      /* function exit code */
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +203:         return self._index

      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_self->_index);
      __pyx_r = __pyx_v_self->_index;
      goto __pyx_L0;

     204:

    +205:     cdef _add(self, target, adapter):

    static PyObject *__pyx_f_5buvar_2di_4c_di_8Adapters__add(struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self, PyObject *__pyx_v_target, PyObject *__pyx_v_adapter) {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("_add", 0);
    /* … */
      /* function exit code */
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_3);
      __Pyx_AddTraceback("buvar.di.c_di.Adapters._add", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = 0;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +206:         if target in self._index:

      if (unlikely(__pyx_v_self->_index == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 206, __pyx_L1_error)
      }
      __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_target, __pyx_v_self->_index, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 206, __pyx_L1_error)
      __pyx_t_2 = (__pyx_t_1 != 0);
      if (__pyx_t_2) {
    /* … */
        goto __pyx_L3;
      }

    +207:             self._index[target].append(adapter)

        if (unlikely(__pyx_v_self->_index == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 207, __pyx_L1_error)
        }
        __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->_index, __pyx_v_target); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 207, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = __Pyx_PyObject_Append(__pyx_t_3, __pyx_v_adapter); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 207, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

     208:         else:

    +209:             self._index[target] = [adapter]

      /*else*/ {
        __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_v_adapter);
        __Pyx_GIVEREF(__pyx_v_adapter);
        PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_adapter);
        if (unlikely(__pyx_v_self->_index == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 209, __pyx_L1_error)
        }
        if (unlikely(PyDict_SetItem(__pyx_v_self->_index, __pyx_v_target, __pyx_t_3) < 0)) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __pyx_L3:;

     210:

    +211:     def add(self, target, adapter):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_3add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_3add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      PyObject *__pyx_v_target = 0;
      PyObject *__pyx_v_adapter = 0;
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("add (wrapper)", 0);
      {
        static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_target,&__pyx_n_s_adapter,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);
            CYTHON_FALLTHROUGH;
            case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
            CYTHON_FALLTHROUGH;
            case  0: break;
            default: goto __pyx_L5_argtuple_error;
          }
          kw_args = PyDict_Size(__pyx_kwds);
          switch (pos_args) {
            case  0:
            if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target)) != 0)) kw_args--;
            else goto __pyx_L5_argtuple_error;
            CYTHON_FALLTHROUGH;
            case  1:
            if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_adapter)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("add", 1, 2, 2, 1); __PYX_ERR(0, 211, __pyx_L3_error)
            }
          }
          if (unlikely(kw_args > 0)) {
            if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add") < 0)) __PYX_ERR(0, 211, __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_target = values[0];
        __pyx_v_adapter = values[1];
      }
      goto __pyx_L4_argument_unpacking_done;
      __pyx_L5_argtuple_error:;
      __Pyx_RaiseArgtupleInvalid("add", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 211, __pyx_L3_error)
      __pyx_L3_error:;
      __Pyx_AddTraceback("buvar.di.c_di.Adapters.add", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __Pyx_RefNannyFinishContext();
      return NULL;
      __pyx_L4_argument_unpacking_done:;
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8Adapters_2add(((struct __pyx_obj_5buvar_2di_4c_di_Adapters *)__pyx_v_self), __pyx_v_target, __pyx_v_adapter);

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_8Adapters_2add(struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self, PyObject *__pyx_v_target, PyObject *__pyx_v_adapter) {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("add", 0);
    /* … */
      /* function exit code */
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_AddTraceback("buvar.di.c_di.Adapters.add", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +212:         self._add(target, adapter)

      __pyx_t_1 = ((struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapters *)__pyx_v_self->__pyx_vtab)->_add(__pyx_v_self, __pyx_v_target, __pyx_v_adapter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     213:

    +214:     def adapter_classmethod(self, func):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_5adapter_classmethod(PyObject *__pyx_v_self, PyObject *__pyx_v_func); /*proto*/
    static char __pyx_doc_5buvar_2di_4c_di_8Adapters_4adapter_classmethod[] = "Register a classmethod to adapt its arguments into its return type.";
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_5adapter_classmethod(PyObject *__pyx_v_self, PyObject *__pyx_v_func) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("adapter_classmethod (wrapper)", 0);
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8Adapters_4adapter_classmethod(((struct __pyx_obj_5buvar_2di_4c_di_Adapters *)__pyx_v_self), ((PyObject *)__pyx_v_func));

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_8Adapters_4adapter_classmethod(struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self, PyObject *__pyx_v_func) {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("adapter_classmethod", 0);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_2);
      __Pyx_AddTraceback("buvar.di.c_di.Adapters.adapter_classmethod", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

     215:         """Register a classmethod to adapt its arguments into its return type."""

    +216:         return _adapter(func, self)

      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_func);
      __Pyx_GIVEREF(__pyx_v_func);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_func);
      __Pyx_INCREF(((PyObject *)__pyx_v_self));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
      PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self));
      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5buvar_2di_4c_di__adapter), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 216, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;

     217:

    +218:     def adapter(self, func):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_7adapter(PyObject *__pyx_v_self, PyObject *__pyx_v_func); /*proto*/
    static char __pyx_doc_5buvar_2di_4c_di_8Adapters_6adapter[] = "Register a class or function to adapt arguments either into its\n        class or return type";
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_7adapter(PyObject *__pyx_v_self, PyObject *__pyx_v_func) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("adapter (wrapper)", 0);
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8Adapters_6adapter(((struct __pyx_obj_5buvar_2di_4c_di_Adapters *)__pyx_v_self), ((PyObject *)__pyx_v_func));

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_8Adapters_6adapter(struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self, PyObject *__pyx_v_func) {
      PyObject *__pyx_v_frame = NULL;
      PyObject *__pyx_v_spec = NULL;
      PyObject *__pyx_v_implements = NULL;
      PyObject *__pyx_v_args = NULL;
      struct __pyx_obj_5buvar_2di_4c_di_Adapter *__pyx_v_adapter = NULL;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("adapter", 0);
    /* … */
      /* function exit code */
      __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("buvar.di.c_di.Adapters.adapter", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_frame);
      __Pyx_XDECREF(__pyx_v_spec);
      __Pyx_XDECREF(__pyx_v_implements);
      __Pyx_XDECREF(__pyx_v_args);
      __Pyx_XDECREF((PyObject *)__pyx_v_adapter);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    static PyObject *__pyx_gb_5buvar_2di_4c_di_8Adapters_10generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

     219:         """Register a class or function to adapt arguments either into its

     220:         class or return type"""

    +221:         frame = sys._getframe(0)

      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_getframe); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 221, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_int_0);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_frame = __pyx_t_1;
      __pyx_t_1 = 0;

    +222:         spec = inspect.getfullargspec(func)

      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_inspect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_getfullargspec); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_func) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_func);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_spec = __pyx_t_1;
      __pyx_t_1 = 0;

     223:         # remove self arg

    +224:         if isinstance(func, type):

      __pyx_t_4 = PyType_Check(__pyx_v_func);
      __pyx_t_5 = (__pyx_t_4 != 0);
      if (__pyx_t_5) {
    /* … */
        goto __pyx_L3;
      }

    +225:             spec.args.pop(0)

        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_args_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = __Pyx_PyObject_PopIndex(__pyx_t_1, __pyx_int_0, 0, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __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;

    +226:             implements = func

        __Pyx_INCREF(__pyx_v_func);
        __pyx_v_implements = __pyx_v_func;

     227:         else:

    +228:             implements = spec.annotations["return"]

      /*else*/ {
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_annotations); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_t_2, __pyx_n_u_return); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_v_implements = __pyx_t_1;
        __pyx_t_1 = 0;
      }
      __pyx_L3:;

     229:         # all arguments must be annotated

    +230:         assert_annotated(spec)

      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_assert_annotated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_spec) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_spec);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     231:

    +232:         args = spec.args + spec.kwonlyargs

      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_args_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_kwonlyargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_args = __pyx_t_3;
      __pyx_t_3 = 0;

    +233:         adapter = Adapter(

      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5buvar_2di_4c_di_Adapter), __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_adapter = ((struct __pyx_obj_5buvar_2di_4c_di_Adapter *)__pyx_t_2);
      __pyx_t_2 = 0;

    +234:             func=func,

      __pyx_t_3 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 234, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_func, __pyx_v_func) < 0) __PYX_ERR(0, 234, __pyx_L1_error)

    +235:             args=args,

      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_args_2, __pyx_v_args) < 0) __PYX_ERR(0, 234, __pyx_L1_error)

    +236:             locals=frame.f_locals,

      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_locals); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 236, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_locals, __pyx_t_2) < 0) __PYX_ERR(0, 234, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +237:             globals=frame.f_globals,

      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_globals); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_globals, __pyx_t_2) < 0) __PYX_ERR(0, 234, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +238:             owner=None,

      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_owner, Py_None) < 0) __PYX_ERR(0, 234, __pyx_L1_error)

    +239:             name=None,

      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_name, Py_None) < 0) __PYX_ERR(0, 234, __pyx_L1_error)

    +240:             defaults=collect_defaults(spec),

      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_collect_defaults); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_v_spec) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_spec);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_defaults, __pyx_t_2) < 0) __PYX_ERR(0, 234, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +241:             implements=implements,

      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_implements, __pyx_v_implements) < 0) __PYX_ERR(0, 234, __pyx_L1_error)

     242:         )

    +243:         self.add(implements, adapter)

      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_add); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 243, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_implements, ((PyObject *)__pyx_v_adapter)};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_implements, ((PyObject *)__pyx_v_adapter)};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      {
        __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 243, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_INCREF(__pyx_v_implements);
        __Pyx_GIVEREF(__pyx_v_implements);
        PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_v_implements);
        __Pyx_INCREF(((PyObject *)__pyx_v_adapter));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_adapter));
        PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_7, ((PyObject *)__pyx_v_adapter));
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +244:         return func

      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_func);
      __pyx_r = __pyx_v_func;
      goto __pyx_L0;

     245:

    +246:     async def nject(self, *targets, **dependencies):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_9nject(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static char __pyx_doc_5buvar_2di_4c_di_8Adapters_8nject[] = "Resolve all dependencies and return the created component.";
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_9nject(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      PyObject *__pyx_v_targets = 0;
      PyObject *__pyx_v_dependencies = 0;
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("nject (wrapper)", 0);
      if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "nject", 1))) return NULL;
      __pyx_v_dependencies = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); if (unlikely(!__pyx_v_dependencies)) return NULL;
      __Pyx_GOTREF(__pyx_v_dependencies);
      __Pyx_INCREF(__pyx_args);
      __pyx_v_targets = __pyx_args;
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8Adapters_8nject(((struct __pyx_obj_5buvar_2di_4c_di_Adapters *)__pyx_v_self), __pyx_v_targets, __pyx_v_dependencies);

      /* function exit code */
      __Pyx_XDECREF(__pyx_v_targets);
      __Pyx_XDECREF(__pyx_v_dependencies);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    static PyObject *__pyx_gb_5buvar_2di_4c_di_8Adapters_5nject_8genexpr1_2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
    /* … */
    static PyObject *__pyx_pf_5buvar_2di_4c_di_8Adapters_8nject(struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self, PyObject *__pyx_v_targets, PyObject *__pyx_v_dependencies) {
      struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_1_nject *__pyx_cur_scope;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("nject", 0);
      __pyx_cur_scope = (struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_1_nject *)__pyx_tp_new_5buvar_2di_4c_di___pyx_scope_struct_1_nject(__pyx_ptype_5buvar_2di_4c_di___pyx_scope_struct_1_nject, __pyx_empty_tuple, NULL);
      if (unlikely(!__pyx_cur_scope)) {
        __pyx_cur_scope = ((struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_1_nject *)Py_None);
        __Pyx_INCREF(Py_None);
        __PYX_ERR(0, 246, __pyx_L1_error)
      } else {
        __Pyx_GOTREF(__pyx_cur_scope);
      }
      __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
      __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
      __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
      __pyx_cur_scope->__pyx_v_targets = __pyx_v_targets;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_targets);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_targets);
      __pyx_cur_scope->__pyx_v_dependencies = __pyx_v_dependencies;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_dependencies);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_dependencies);
      {
        __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_5buvar_2di_4c_di_8Adapters_10generator1, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_nject, __pyx_n_s_Adapters_nject, __pyx_n_s_buvar_di_c_di); if (unlikely(!gen)) __PYX_ERR(0, 246, __pyx_L1_error)
        __Pyx_DECREF(__pyx_cur_scope);
        __Pyx_RefNannyFinishContext();
        return (PyObject *) gen;
      }

      /* function exit code */
      __pyx_L1_error:;
      __Pyx_AddTraceback("buvar.di.c_di.Adapters.nject", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_gb_5buvar_2di_4c_di_8Adapters_10generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
    {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("nject", 0);
      __pyx_L3_first_run:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 246, __pyx_L1_error)
    /* … */
      /* function exit code */
      __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_XDECREF(__pyx_t_8);
      __Pyx_AddTraceback("nject", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
      #if !CYTHON_USE_EXC_INFO_STACK
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      #endif
      __pyx_generator->resume_label = -1;
      __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
    struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_1_nject {
      PyObject_HEAD
      PyObject *__pyx_v__targets;
      struct __pyx_obj_5buvar_10components_12c_components_Components *__pyx_v_cmps;
      PyObject *__pyx_v_dependencies;
      PyObject *__pyx_v_genexpr;
      PyObject *__pyx_v_injected;
      PyObject *__pyx_8genexpr1__pyx_v_name;
      struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self;
      PyObject *__pyx_8genexpr1__pyx_v_target;
      PyObject *__pyx_v_targets;
      PyObject *__pyx_t_0;
      PyObject *__pyx_t_1;
      Py_ssize_t __pyx_t_2;
      PyObject *(*__pyx_t_3)(PyObject *);
    };

     247:         """Resolve all dependencies and return the created component."""

    +248:         cdef tuple _targets = targets

      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_targets);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_targets);
      __pyx_cur_scope->__pyx_v__targets = __pyx_cur_scope->__pyx_v_targets;

     249:

     250:         # create components

    +251:         cdef Components cmps = prepare_components(_targets, dependencies)

      __pyx_t_1 = __pyx_f_5buvar_2di_4c_di_prepare_components(__pyx_cur_scope->__pyx_v__targets, __pyx_cur_scope->__pyx_v_dependencies); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 251, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5buvar_10components_12c_components_Components))))) __PYX_ERR(0, 251, __pyx_L1_error)
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_v_cmps = ((struct __pyx_obj_5buvar_10components_12c_components_Components *)__pyx_t_1);
      __pyx_t_1 = 0;

     252:

     253:         # find the proper components to instantiate that class

    +254:         cdef list injected = [

      { /* enter inner scope */
        __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);

    +255:             await self.resolve_adapter(cmps, target, name=name)

          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_resolve_adapter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_cmps));
          __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_cmps));
          PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_cur_scope->__pyx_v_cmps));
          __Pyx_INCREF(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_target);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_target);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_cur_scope->__pyx_8genexpr1__pyx_v_target);
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_name, __pyx_cur_scope->__pyx_8genexpr1__pyx_v_name) < 0) __PYX_ERR(0, 255, __pyx_L1_error)
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XGOTREF(__pyx_r);
          if (likely(__pyx_r)) {
            __Pyx_XGIVEREF(__pyx_t_1);
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
            __Pyx_XGIVEREF(__pyx_t_3);
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_3;
            __pyx_cur_scope->__pyx_t_2 = __pyx_t_4;
            __pyx_cur_scope->__pyx_t_3 = __pyx_t_5;
            __Pyx_XGIVEREF(__pyx_r);
            __Pyx_RefNannyFinishContext();
            __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
            /* return from generator, awaiting value */
            __pyx_generator->resume_label = 1;
            return __pyx_r;
            __pyx_L8_resume_from_await:;
            __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
            __pyx_cur_scope->__pyx_t_0 = 0;
            __Pyx_XGOTREF(__pyx_t_1);
            __pyx_t_3 = __pyx_cur_scope->__pyx_t_1;
            __pyx_cur_scope->__pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_t_3);
            __pyx_t_4 = __pyx_cur_scope->__pyx_t_2;
            __pyx_t_5 = __pyx_cur_scope->__pyx_t_3;
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 255, __pyx_L1_error)
            __pyx_t_8 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_8);
          } else {
            __pyx_t_8 = NULL;
            if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_8) < 0) __PYX_ERR(0, 255, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 254, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    +256:             for name, target in ((None, target) for target in targets)

    static PyObject *__pyx_pf_5buvar_2di_4c_di_8Adapters_5nject_8genexpr1_genexpr(PyObject *__pyx_self) {
      struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_2_genexpr *__pyx_cur_scope;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("genexpr", 0);
      __pyx_cur_scope = (struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_2_genexpr *)__pyx_tp_new_5buvar_2di_4c_di___pyx_scope_struct_2_genexpr(__pyx_ptype_5buvar_2di_4c_di___pyx_scope_struct_2_genexpr, __pyx_empty_tuple, NULL);
      if (unlikely(!__pyx_cur_scope)) {
        __pyx_cur_scope = ((struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_2_genexpr *)Py_None);
        __Pyx_INCREF(Py_None);
        __PYX_ERR(0, 256, __pyx_L1_error)
      } else {
        __Pyx_GOTREF(__pyx_cur_scope);
      }
      __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_1_nject *) __pyx_self;
      __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
      {
        __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_5buvar_2di_4c_di_8Adapters_5nject_8genexpr1_2generator3, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_nject_locals_genexpr, __pyx_n_s_buvar_di_c_di); if (unlikely(!gen)) __PYX_ERR(0, 256, __pyx_L1_error)
        __Pyx_DECREF(__pyx_cur_scope);
        __Pyx_RefNannyFinishContext();
        return (PyObject *) gen;
      }

      /* function exit code */
      __pyx_L1_error:;
      __Pyx_AddTraceback("buvar.di.c_di.Adapters.nject.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_gb_5buvar_2di_4c_di_8Adapters_5nject_8genexpr1_2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
    {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("genexpr", 0);
      __pyx_L3_first_run:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 256, __pyx_L1_error)
      if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_targets)) { __Pyx_RaiseClosureNameError("targets"); __PYX_ERR(0, 256, __pyx_L1_error) }
      if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_targets == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 256, __pyx_L1_error)
      }
      __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_targets; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
      for (;;) {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __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_ERR(0, 256, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 256, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_target);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_target, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 256, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None);
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_target);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_target);
        PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_cur_scope->__pyx_v_target);
        __pyx_r = __pyx_t_3;
        __pyx_t_3 = 0;
        __Pyx_XGIVEREF(__pyx_t_1);
        __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
        __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
        __Pyx_XGIVEREF(__pyx_r);
        __Pyx_RefNannyFinishContext();
        __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
        /* return from generator, yielding value */
        __pyx_generator->resume_label = 1;
        return __pyx_r;
        __pyx_L6_resume_from_yield:;
        __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
        __pyx_cur_scope->__pyx_t_0 = 0;
        __Pyx_XGOTREF(__pyx_t_1);
        __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
        if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 256, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

      /* function exit code */
      PyErr_SetNone(PyExc_StopIteration);
      goto __pyx_L0;
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_3);
      __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
      #if !CYTHON_USE_EXC_INFO_STACK
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      #endif
      __pyx_generator->resume_label = -1;
      __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
        __pyx_t_2 = __pyx_pf_5buvar_2di_4c_di_8Adapters_5nject_8genexpr1_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
          __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
          __pyx_t_5 = NULL;
        } else {
          __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 256, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 256, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        for (;;) {
          if (likely(!__pyx_t_5)) {
            if (likely(PyList_CheckExact(__pyx_t_3))) {
              if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 256, __pyx_L1_error)
              #else
              __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
              #endif
            } else {
              if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 256, __pyx_L1_error)
              #else
              __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
              #endif
            }
          } else {
            __pyx_t_2 = __pyx_t_5(__pyx_t_3);
            if (unlikely(!__pyx_t_2)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 256, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_2);
          }
          if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
            PyObject* sequence = __pyx_t_2;
            Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
            if (unlikely(size != 2)) {
              if (size > 2) __Pyx_RaiseTooManyValuesError(2);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 256, __pyx_L1_error)
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            if (likely(PyTuple_CheckExact(sequence))) {
              __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0);
              __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1);
            } else {
              __pyx_t_6 = PyList_GET_ITEM(sequence, 0);
              __pyx_t_7 = PyList_GET_ITEM(sequence, 1);
            }
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            #else
            __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          } else {
            Py_ssize_t index = -1;
            __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
            index = 0; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_6);
            index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_7);
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 256, __pyx_L1_error)
            __pyx_t_9 = NULL;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            goto __pyx_L7_unpacking_done;
            __pyx_L6_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_t_9 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 256, __pyx_L1_error)
            __pyx_L7_unpacking_done:;
          }
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_name);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_name, __pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_6);
          __pyx_t_6 = 0;
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_target);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_target, __pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_7);
          __pyx_t_7 = 0;
    /* … */
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } /* exit inner scope */
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_v_injected = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
    /* … */
    struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_2_genexpr {
      PyObject_HEAD
      struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_1_nject *__pyx_outer_scope;
      PyObject *__pyx_v_target;
      PyObject *__pyx_t_0;
      Py_ssize_t __pyx_t_1;
    };

     257:         ]

    +258:         if len(targets) == 1:

      __pyx_t_1 = __pyx_cur_scope->__pyx_v_targets;
      __Pyx_INCREF(__pyx_t_1);
      if (unlikely(__pyx_t_1 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(0, 258, __pyx_L1_error)
      }
      __pyx_t_4 = PyTuple_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 258, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = ((__pyx_t_4 == 1) != 0);
      if (__pyx_t_10) {
    /* … */
      }

    +259:             return injected[0]

        __Pyx_XDECREF(__pyx_r);
        __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_cur_scope->__pyx_v_injected, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = 0;
        goto __pyx_L0;

    +260:         return injected

      __Pyx_XDECREF(__pyx_r);
      __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_injected);
      goto __pyx_L0;
      CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

     261:

    +262:     def find_string_target_adapters(self, type target):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_12find_string_target_adapters(PyObject *__pyx_v_self, PyObject *__pyx_v_target); /*proto*/
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_12find_string_target_adapters(PyObject *__pyx_v_self, PyObject *__pyx_v_target) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("find_string_target_adapters (wrapper)", 0);
      if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_target), (&PyType_Type), 1, "target", 1))) __PYX_ERR(0, 262, __pyx_L1_error)
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8Adapters_11find_string_target_adapters(((struct __pyx_obj_5buvar_2di_4c_di_Adapters *)__pyx_v_self), ((PyTypeObject*)__pyx_v_target));

      /* function exit code */
      goto __pyx_L0;
      __pyx_L1_error:;
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_8Adapters_11find_string_target_adapters(struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self, PyTypeObject *__pyx_v_target) {
      PyObject *__pyx_v_name = 0;
      PyObject *__pyx_v_adapter_list = 0;
      PyObject *__pyx_v_string_adapters = 0;
      struct __pyx_obj_5buvar_2di_4c_di_Adapter *__pyx_v_adptr = 0;
      PyObject *__pyx_v_hints = NULL;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("find_string_target_adapters", 0);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_4);
      __Pyx_AddTraceback("buvar.di.c_di.Adapters.find_string_target_adapters", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_name);
      __Pyx_XDECREF(__pyx_v_adapter_list);
      __Pyx_XDECREF(__pyx_v_string_adapters);
      __Pyx_XDECREF((PyObject *)__pyx_v_adptr);
      __Pyx_XDECREF(__pyx_v_hints);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    static PyObject *__pyx_gb_5buvar_2di_4c_di_8Adapters_15generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

    +263:         cdef str name = target.__name__

      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_target), __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 263, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 263, __pyx_L1_error)
      __pyx_v_name = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;

    +264:         cdef list adapter_list = []

      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_adapter_list = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;

     265:

     266:         # search for string and match

    +267:         cdef list string_adapters = self._index.get(name)

      if (unlikely(__pyx_v_self->_index == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
        __PYX_ERR(0, 267, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_self->_index, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __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 %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 267, __pyx_L1_error)
      __pyx_v_string_adapters = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;

     268:         cdef Adapter adptr

     269:         # find target name in string adapter types and find target in adapter

    +270:         if string_adapters:

      __pyx_t_2 = (__pyx_v_string_adapters != Py_None)&&(PyList_GET_SIZE(__pyx_v_string_adapters) != 0);
      if (__pyx_t_2) {
    /* … */
      }

    +271:             for adptr in string_adapters:

        if (unlikely(__pyx_v_string_adapters == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 271, __pyx_L1_error)
        }
        __pyx_t_1 = __pyx_v_string_adapters; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0;
        for (;;) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 271, __pyx_L1_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 271, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5buvar_2di_4c_di_Adapter))))) __PYX_ERR(0, 271, __pyx_L1_error)
          __Pyx_XDECREF_SET(__pyx_v_adptr, ((struct __pyx_obj_5buvar_2di_4c_di_Adapter *)__pyx_t_4));
          __pyx_t_4 = 0;
    /* … */
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +272:                 hints = adptr.get_hints()

          __pyx_t_4 = ((struct __pyx_vtabstruct_5buvar_2di_4c_di_Adapter *)__pyx_v_adptr->__pyx_vtab)->get_hints(__pyx_v_adptr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 272, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_XDECREF_SET(__pyx_v_hints, __pyx_t_4);
          __pyx_t_4 = 0;

    +273:                 if hints["return"] is target:

          __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_hints, __pyx_n_u_return); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = (__pyx_t_4 == ((PyObject *)__pyx_v_target));
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_5 = (__pyx_t_2 != 0);
          if (__pyx_t_5) {
    /* … */
          }

    +274:                     adapter_list.append(adptr)

            __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_adapter_list, ((PyObject *)__pyx_v_adptr)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 274, __pyx_L1_error)

    +275:         return adapter_list

      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_adapter_list);
      __pyx_r = __pyx_v_adapter_list;
      goto __pyx_L0;

     276:

    +277:     async def resolve_adapter(self, Components cmps, object target, *, name=None, default=missing):

    /* Python wrapper */
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_14resolve_adapter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static PyObject *__pyx_pw_5buvar_2di_4c_di_8Adapters_14resolve_adapter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      struct __pyx_obj_5buvar_10components_12c_components_Components *__pyx_v_cmps = 0;
      PyObject *__pyx_v_target = 0;
      PyObject *__pyx_v_name = 0;
      PyObject *__pyx_v_default = 0;
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("resolve_adapter (wrapper)", 0);
      {
        static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cmps,&__pyx_n_s_target,&__pyx_n_s_name,&__pyx_n_s_default,0};
        PyObject* values[4] = {0,0,0,0};
        values[2] = ((PyObject *)Py_None);
        values[3] = __pyx_k_;
        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);
            CYTHON_FALLTHROUGH;
            case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
            CYTHON_FALLTHROUGH;
            case  0: break;
            default: goto __pyx_L5_argtuple_error;
          }
          kw_args = PyDict_Size(__pyx_kwds);
          switch (pos_args) {
            case  0:
            if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cmps)) != 0)) kw_args--;
            else goto __pyx_L5_argtuple_error;
            CYTHON_FALLTHROUGH;
            case  1:
            if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("resolve_adapter", 1, 2, 2, 1); __PYX_ERR(0, 277, __pyx_L3_error)
            }
          }
          if (kw_args > 0 && likely(kw_args <= 2)) {
            Py_ssize_t index;
            for (index = 2; index < 4 && kw_args > 0; index++) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, *__pyx_pyargnames[index]);
              if (value) { values[index] = value; kw_args--; }
            }
          }
          if (unlikely(kw_args > 0)) {
            if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "resolve_adapter") < 0)) __PYX_ERR(0, 277, __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_cmps = ((struct __pyx_obj_5buvar_10components_12c_components_Components *)values[0]);
        __pyx_v_target = values[1];
        __pyx_v_name = values[2];
        __pyx_v_default = values[3];
      }
      goto __pyx_L4_argument_unpacking_done;
      __pyx_L5_argtuple_error:;
      __Pyx_RaiseArgtupleInvalid("resolve_adapter", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 277, __pyx_L3_error)
      __pyx_L3_error:;
      __Pyx_AddTraceback("buvar.di.c_di.Adapters.resolve_adapter", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __Pyx_RefNannyFinishContext();
      return NULL;
      __pyx_L4_argument_unpacking_done:;
      if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cmps), __pyx_ptype_5buvar_10components_12c_components_Components, 1, "cmps", 0))) __PYX_ERR(0, 277, __pyx_L1_error)
      __pyx_r = __pyx_pf_5buvar_2di_4c_di_8Adapters_13resolve_adapter(((struct __pyx_obj_5buvar_2di_4c_di_Adapters *)__pyx_v_self), __pyx_v_cmps, __pyx_v_target, __pyx_v_name, __pyx_v_default);

      /* function exit code */
      goto __pyx_L0;
      __pyx_L1_error:;
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_pf_5buvar_2di_4c_di_8Adapters_13resolve_adapter(struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self, struct __pyx_obj_5buvar_10components_12c_components_Components *__pyx_v_cmps, PyObject *__pyx_v_target, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
      struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_3_resolve_adapter *__pyx_cur_scope;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("resolve_adapter", 0);
      __pyx_cur_scope = (struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_3_resolve_adapter *)__pyx_tp_new_5buvar_2di_4c_di___pyx_scope_struct_3_resolve_adapter(__pyx_ptype_5buvar_2di_4c_di___pyx_scope_struct_3_resolve_adapter, __pyx_empty_tuple, NULL);
      if (unlikely(!__pyx_cur_scope)) {
        __pyx_cur_scope = ((struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_3_resolve_adapter *)Py_None);
        __Pyx_INCREF(Py_None);
        __PYX_ERR(0, 277, __pyx_L1_error)
      } else {
        __Pyx_GOTREF(__pyx_cur_scope);
      }
      __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
      __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
      __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
      __pyx_cur_scope->__pyx_v_cmps = __pyx_v_cmps;
      __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_cmps);
      __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_cmps);
      __pyx_cur_scope->__pyx_v_target = __pyx_v_target;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_target);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_target);
      __pyx_cur_scope->__pyx_v_name = __pyx_v_name;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_name);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_name);
      __pyx_cur_scope->__pyx_v_default = __pyx_v_default;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_default);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_default);
      {
        __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_5buvar_2di_4c_di_8Adapters_15generator2, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_resolve_adapter, __pyx_n_s_Adapters_resolve_adapter, __pyx_n_s_buvar_di_c_di); if (unlikely(!gen)) __PYX_ERR(0, 277, __pyx_L1_error)
        __Pyx_DECREF(__pyx_cur_scope);
        __Pyx_RefNannyFinishContext();
        return (PyObject *) gen;
      }

      /* function exit code */
      __pyx_L1_error:;
      __Pyx_AddTraceback("buvar.di.c_di.Adapters.resolve_adapter", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    static PyObject *__pyx_gb_5buvar_2di_4c_di_8Adapters_15generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
    {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("resolve_adapter", 0);
      __pyx_L3_first_run:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 277, __pyx_L1_error)
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10);
      __Pyx_XDECREF(__pyx_t_15);
      __Pyx_XDECREF(__pyx_t_17);
      __Pyx_XDECREF(__pyx_t_18);
      __Pyx_XDECREF(__pyx_t_19);
      __Pyx_AddTraceback("resolve_adapter", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
      #if !CYTHON_USE_EXC_INFO_STACK
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      #endif
      __pyx_generator->resume_label = -1;
      __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_missing); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 277, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_k_ = __pyx_t_1;
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_1 = 0;
    /* … */
    struct __pyx_obj_5buvar_2di_4c_di___pyx_scope_struct_3_resolve_adapter {
      PyObject_HEAD
      PyObject *__pyx_v_adapter_args;
      struct __pyx_obj_5buvar_2di_4c_di_Adapter *__pyx_v_adptr;
      struct __pyx_obj_5buvar_10components_12c_components_Components *__pyx_v_cmps;
      PyObject *__pyx_v_component;
      PyObject *__pyx_v_default;
      PyObject *__pyx_8genexpr3__pyx_v_dependency_target;
      PyObject *__pyx_v_ex;
      PyObject *__pyx_8genexpr3__pyx_v_name;
      PyObject *__pyx_v_name;
      PyObject *__pyx_v_possible_adapters;
      PyObject *__pyx_v_resolve_errors;
      struct __pyx_obj_5buvar_2di_4c_di_Adapters *__pyx_v_self;
      PyObject *__pyx_v_target;
      PyObject *__pyx_t_0;
      PyObject *__pyx_t_1;
      PyObject *__pyx_t_2;
      int __pyx_t_3;
      PyObject *__pyx_t_4;
      PyObject *__pyx_t_5;
      PyObject *__pyx_t_6;
      Py_ssize_t __pyx_t_7;
      Py_ssize_t __pyx_t_8;
      Py_ssize_t __pyx_t_9;
    };

     278:         cdef object component

     279:         # find in components

    +280:         try:

      {
        /*try:*/ {
    /* … */
        }
        __pyx_L4_error:;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    /* … */
        __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_L8_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_L5_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);
      }

    +281:             component = _get_name_or_default(cmps, target, name)

          __pyx_t_5.__pyx_n = 1;
          __pyx_t_5.name = __pyx_cur_scope->__pyx_v_name;
          __pyx_t_4 = __pyx_f_5buvar_2di_4c_di__get_name_or_default(__pyx_cur_scope->__pyx_v_cmps, __pyx_cur_scope->__pyx_v_target, &__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          __pyx_cur_scope->__pyx_v_component = __pyx_t_4;
          __pyx_t_4 = 0;

    +282:             return component

          __Pyx_XDECREF(__pyx_r);
          __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_component);
          goto __pyx_L8_try_return;

    +283:         except ComponentLookupError:

        __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)__pyx_ptype_5buvar_10components_12c_components_ComponentLookupError));
        if (__pyx_t_6) {
          __Pyx_ErrRestore(0,0,0);
          goto __pyx_L5_exception_handled;
        }
        goto __pyx_L6_except_error;
        __pyx_L6_except_error:;

     284:             pass

     285:

     286:         # try to adapt

     287:         cdef list possible_adapters = (

    +288:             self._index.get(target) or []

      if (unlikely(__pyx_cur_scope->__pyx_v_self->_index == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
        __PYX_ERR(0, 288, __pyx_L1_error)
      }
      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_self->_index, __pyx_cur_scope->__pyx_v_target, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 288, __pyx_L1_error)
      if (!__pyx_t_8) {
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_4 = __pyx_t_7;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        goto __pyx_L10_bool_binop_done;
      }
      __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_4 = __pyx_t_7;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_L10_bool_binop_done:;

    +289:         ) + self.find_string_target_adapters(target)

      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_find_string_target_adapters); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_cur_scope->__pyx_v_target) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_cur_scope->__pyx_v_target);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyNumber_Add(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_9)->tp_name), 0))) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GIVEREF(__pyx_t_9);
      __pyx_cur_scope->__pyx_v_possible_adapters = ((PyObject*)__pyx_t_9);
      __pyx_t_9 = 0;

     290:

    +291:         cdef list resolve_errors = []

      __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 291, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      __pyx_cur_scope->__pyx_v_resolve_errors = ((PyObject*)__pyx_t_9);
      __pyx_t_9 = 0;

    +292:         if possible_adapters is None:

      __pyx_t_8 = (__pyx_cur_scope->__pyx_v_possible_adapters == ((PyObject*)Py_None));
      __pyx_t_11 = (__pyx_t_8 != 0);
      if (__pyx_t_11) {
    /* … */
      }

    +293:             if default is missing:

        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_missing); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 293, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_11 = (__pyx_cur_scope->__pyx_v_default == __pyx_t_9);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_8 = (__pyx_t_11 != 0);
        if (unlikely(__pyx_t_8)) {
    /* … */
        }

    +294:                 raise ResolveError("No possible adapter found", target, resolve_errors)

          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_ResolveError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 294, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = NULL;
          __pyx_t_6 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
            __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
            if (likely(__pyx_t_4)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
              __Pyx_INCREF(__pyx_t_4);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_7, function);
              __pyx_t_6 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_7)) {
            PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_kp_u_No_possible_adapter_found, __pyx_cur_scope->__pyx_v_target, __pyx_cur_scope->__pyx_v_resolve_errors};
            __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 294, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_GOTREF(__pyx_t_9);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
            PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_kp_u_No_possible_adapter_found, __pyx_cur_scope->__pyx_v_target, __pyx_cur_scope->__pyx_v_resolve_errors};
            __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 294, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_GOTREF(__pyx_t_9);
          } else
          #endif
          {
            __pyx_t_10 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 294, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_10);
            if (__pyx_t_4) {
              __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4); __pyx_t_4 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u_No_possible_adapter_found);
            __Pyx_GIVEREF(__pyx_kp_u_No_possible_adapter_found);
            PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_6, __pyx_kp_u_No_possible_adapter_found);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_target);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_target);
            PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_6, __pyx_cur_scope->__pyx_v_target);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_resolve_errors);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_resolve_errors);
            PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_6, __pyx_cur_scope->__pyx_v_resolve_errors);
            __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 294, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          }
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_Raise(__pyx_t_9, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __PYX_ERR(0, 294, __pyx_L1_error)

    +295:             return default

        __Pyx_XDECREF(__pyx_r);
        __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_default);
        goto __pyx_L0;

     296:         cdef Adapter adptr

     297:         cdef dict adapter_args

    +298:         for adptr in possible_adapters:

      if (unlikely(__pyx_cur_scope->__pyx_v_possible_adapters == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 298, __pyx_L1_error)
      }
      __pyx_t_9 = __pyx_cur_scope->__pyx_v_possible_adapters; __Pyx_INCREF(__pyx_t_9); __pyx_t_12 = 0;
      for (;;) {
        if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_9)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_12); __Pyx_INCREF(__pyx_t_7); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 298, __pyx_L1_error)
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_9, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 298, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        #endif
        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5buvar_2di_4c_di_Adapter))))) __PYX_ERR(0, 298, __pyx_L1_error)
        __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_adptr));
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_adptr, ((struct __pyx_obj_5buvar_2di_4c_di_Adapter *)__pyx_t_7));
        __Pyx_GIVEREF(__pyx_t_7);
        __pyx_t_7 = 0;
    /* … */
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    +299:             try:

        {
          /*try:*/ {
    /* … */
          }
    /* … */
          __Pyx_XGIVEREF(__pyx_t_3);
          __Pyx_XGIVEREF(__pyx_t_2);
          __Pyx_XGIVEREF(__pyx_t_1);
          __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
          goto __pyx_L1_error;
          __pyx_L19_except_return:;
          __Pyx_XGIVEREF(__pyx_t_3);
          __Pyx_XGIVEREF(__pyx_t_2);
          __Pyx_XGIVEREF(__pyx_t_1);
          __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
          goto __pyx_L0;
          __pyx_L17_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_3);
          __Pyx_XGIVEREF(__pyx_t_2);
          __Pyx_XGIVEREF(__pyx_t_1);
          __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
        }

    +300:                 adapter_args = {

            { /* enter inner scope */
              __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 300, __pyx_L16_error)
              __Pyx_GOTREF(__pyx_t_7);

    +301:                     name: await self.resolve_adapter(

                __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_resolve_adapter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 301, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_4);
    /* … */
                __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 301, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_15);
                __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_cmps));
                __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_cmps));
                PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)__pyx_cur_scope->__pyx_v_cmps));
                __Pyx_INCREF(__pyx_cur_scope->__pyx_8genexpr3__pyx_v_dependency_target);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_8genexpr3__pyx_v_dependency_target);
                PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_cur_scope->__pyx_8genexpr3__pyx_v_dependency_target);
    /* … */
                __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_15, __pyx_t_17); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 301, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_19);
                __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_19);
                __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                __Pyx_XGOTREF(__pyx_r);
                if (likely(__pyx_r)) {
                  __Pyx_XGIVEREF(__pyx_t_1);
                  __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
                  __Pyx_XGIVEREF(__pyx_t_2);
                  __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
                  __Pyx_XGIVEREF(__pyx_t_3);
                  __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
                  __pyx_cur_scope->__pyx_t_3 = __pyx_t_6;
                  __Pyx_XGIVEREF(__pyx_t_7);
                  __pyx_cur_scope->__pyx_t_4 = __pyx_t_7;
                  __Pyx_XGIVEREF(__pyx_t_9);
                  __pyx_cur_scope->__pyx_t_5 = __pyx_t_9;
                  __Pyx_XGIVEREF(__pyx_t_10);
                  __pyx_cur_scope->__pyx_t_6 = __pyx_t_10;
                  __pyx_cur_scope->__pyx_t_7 = __pyx_t_12;
                  __pyx_cur_scope->__pyx_t_8 = __pyx_t_13;
                  __pyx_cur_scope->__pyx_t_9 = __pyx_t_14;
                  __Pyx_XGIVEREF(__pyx_r);
                  __Pyx_RefNannyFinishContext();
                  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                  /* return from generator, awaiting value */
                  __pyx_generator->resume_label = 1;
                  return __pyx_r;
                  __pyx_L26_resume_from_await:;
                  __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
                  __pyx_cur_scope->__pyx_t_0 = 0;
                  __Pyx_XGOTREF(__pyx_t_1);
                  __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
                  __pyx_cur_scope->__pyx_t_1 = 0;
                  __Pyx_XGOTREF(__pyx_t_2);
                  __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
                  __pyx_cur_scope->__pyx_t_2 = 0;
                  __Pyx_XGOTREF(__pyx_t_3);
                  __pyx_t_6 = __pyx_cur_scope->__pyx_t_3;
                  __pyx_t_7 = __pyx_cur_scope->__pyx_t_4;
                  __pyx_cur_scope->__pyx_t_4 = 0;
                  __Pyx_XGOTREF(__pyx_t_7);
                  __pyx_t_9 = __pyx_cur_scope->__pyx_t_5;
                  __pyx_cur_scope->__pyx_t_5 = 0;
                  __Pyx_XGOTREF(__pyx_t_9);
                  __pyx_t_10 = __pyx_cur_scope->__pyx_t_6;
                  __pyx_cur_scope->__pyx_t_6 = 0;
                  __Pyx_XGOTREF(__pyx_t_10);
                  __pyx_t_12 = __pyx_cur_scope->__pyx_t_7;
                  __pyx_t_13 = __pyx_cur_scope->__pyx_t_8;
                  __pyx_t_14 = __pyx_cur_scope->__pyx_t_9;
                  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 301, __pyx_L16_error)
                  __pyx_t_19 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_19);
                } else {
                  __pyx_t_19 = NULL;
                  if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_19) < 0) __PYX_ERR(0, 301, __pyx_L16_error)
                  __Pyx_GOTREF(__pyx_t_19);
                }
                if (unlikely(PyDict_SetItem(__pyx_t_7, (PyObject*)__pyx_cur_scope->__pyx_8genexpr3__pyx_v_name, (PyObject*)__pyx_t_19))) __PYX_ERR(0, 301, __pyx_L16_error)
                __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              }
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            } /* exit inner scope */
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_adapter_args);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_adapter_args, ((PyObject*)__pyx_t_7));
            __Pyx_GIVEREF(__pyx_t_7);
            __pyx_t_7 = 0;

     302:                         cmps,

     303:                         dependency_target,

    +304:                         name=name,

                __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 304, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_17);
                if (PyDict_SetItem(__pyx_t_17, __pyx_n_s_name, __pyx_cur_scope->__pyx_8genexpr3__pyx_v_name) < 0) __PYX_ERR(0, 304, __pyx_L16_error)

    +305:                         default=adptr.defaults.get(name, missing),

                if (unlikely(__pyx_cur_scope->__pyx_v_adptr->defaults == Py_None)) {
                  PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
                  __PYX_ERR(0, 305, __pyx_L16_error)
                }
                __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_missing); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 305, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_18);
                __pyx_t_19 = __Pyx_PyDict_GetItemDefault(__pyx_cur_scope->__pyx_v_adptr->defaults, __pyx_cur_scope->__pyx_8genexpr3__pyx_v_name, __pyx_t_18); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 305, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_19);
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                if (PyDict_SetItem(__pyx_t_17, __pyx_n_s_default, __pyx_t_19) < 0) __PYX_ERR(0, 304, __pyx_L16_error)
                __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;

     306:                     )

    +307:                     for name, dependency_target in adptr.annotations.items()

              __pyx_t_13 = 0;
              __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_adptr), __pyx_n_s_annotations); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 307, __pyx_L16_error)
              __Pyx_GOTREF(__pyx_t_4);
              if (unlikely(__pyx_t_4 == Py_None)) {
                PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
                __PYX_ERR(0, 307, __pyx_L16_error)
              }
              __pyx_t_15 = __Pyx_dict_iterator(__pyx_t_4, 0, __pyx_n_s_items, (&__pyx_t_14), (&__pyx_t_6)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 307, __pyx_L16_error)
              __Pyx_GOTREF(__pyx_t_15);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_10);
              __pyx_t_10 = __pyx_t_15;
              __pyx_t_15 = 0;
              while (1) {
                __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_10, __pyx_t_14, &__pyx_t_13, &__pyx_t_15, &__pyx_t_4, NULL, __pyx_t_6);
                if (unlikely(__pyx_t_16 == 0)) break;
                if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 307, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_15);
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_8genexpr3__pyx_v_name);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_8genexpr3__pyx_v_name, __pyx_t_15);
                __Pyx_GIVEREF(__pyx_t_15);
                __pyx_t_15 = 0;
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_8genexpr3__pyx_v_dependency_target);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_8genexpr3__pyx_v_dependency_target, __pyx_t_4);
                __Pyx_GIVEREF(__pyx_t_4);
                __pyx_t_4 = 0;

     308:                 }

    +309:             except ResolveError as ex:

          __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_7, &__pyx_t_19);
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_ResolveError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 309, __pyx_L18_except_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_6 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_10, __pyx_t_17);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_ErrRestore(__pyx_t_10, __pyx_t_7, __pyx_t_19);
          __pyx_t_10 = 0; __pyx_t_7 = 0; __pyx_t_19 = 0;
          if (__pyx_t_6) {
            __Pyx_AddTraceback("buvar.di.c_di.Adapters.resolve_adapter", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_19, &__pyx_t_7, &__pyx_t_10) < 0) __PYX_ERR(0, 309, __pyx_L18_except_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_7);
            __pyx_cur_scope->__pyx_v_ex = __pyx_t_7;
            /*try:*/ {
    /* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_ex);
                __Pyx_DECREF(__pyx_cur_scope->__pyx_v_ex);
                __pyx_cur_scope->__pyx_v_ex = NULL;
                goto __pyx_L34;
              }
              __pyx_L33_error:;
              /*exception exit:*/{
                __Pyx_PyThreadState_assign
                __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
                __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27);
                if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
                __Pyx_XGOTREF(__pyx_t_22);
                __Pyx_XGOTREF(__pyx_t_23);
                __Pyx_XGOTREF(__pyx_t_24);
                __Pyx_XGOTREF(__pyx_t_25);
                __Pyx_XGOTREF(__pyx_t_26);
                __Pyx_XGOTREF(__pyx_t_27);
                __pyx_t_6 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
                {
                  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_ex);
                  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_ex);
                  __pyx_cur_scope->__pyx_v_ex = NULL;
                }
                if (PY_MAJOR_VERSION >= 3) {
                  __Pyx_XGIVEREF(__pyx_t_25);
                  __Pyx_XGIVEREF(__pyx_t_26);
                  __Pyx_XGIVEREF(__pyx_t_27);
                  __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27);
                }
                __Pyx_XGIVEREF(__pyx_t_22);
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_ErrRestore(__pyx_t_22, __pyx_t_23, __pyx_t_24);
                __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
                __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_21;
                goto __pyx_L18_except_error;
              }
              __pyx_L34:;
            }
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            goto __pyx_L17_exception_handled;
          }
          goto __pyx_L18_except_error;
          __pyx_L18_except_error:;

     310:                 # try next adapter

    +311:                 resolve_errors.append(ex)

              __pyx_t_20 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_resolve_errors, __pyx_cur_scope->__pyx_v_ex); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 311, __pyx_L33_error)
            }

     312:             else:

    +313:                 component = await adptr.create(**adapter_args)

          /*else:*/ {
            __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_adptr), __pyx_n_s_create); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 313, __pyx_L18_except_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_cur_scope->__pyx_v_adapter_args); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 313, __pyx_L18_except_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_10);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XGOTREF(__pyx_r);
            if (likely(__pyx_r)) {
              __Pyx_XGIVEREF(__pyx_t_1);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
              __Pyx_XGIVEREF(__pyx_t_2);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
              __Pyx_XGIVEREF(__pyx_t_3);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
              __Pyx_XGIVEREF(__pyx_t_9);
              __pyx_cur_scope->__pyx_t_4 = __pyx_t_9;
              __pyx_cur_scope->__pyx_t_7 = __pyx_t_12;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, awaiting value */
              __pyx_generator->resume_label = 2;
              return __pyx_r;
              __pyx_L27_resume_from_await:;
              __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_1);
              __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_2);
              __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_3);
              __pyx_t_9 = __pyx_cur_scope->__pyx_t_4;
              __pyx_cur_scope->__pyx_t_4 = 0;
              __Pyx_XGOTREF(__pyx_t_9);
              __pyx_t_12 = __pyx_cur_scope->__pyx_t_7;
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 313, __pyx_L18_except_error)
              __pyx_t_10 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_10);
            } else {
              __pyx_t_10 = NULL;
              if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_10) < 0) __PYX_ERR(0, 313, __pyx_L18_except_error)
              __Pyx_GOTREF(__pyx_t_10);
            }
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_component);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_component, __pyx_t_10);
            __Pyx_GIVEREF(__pyx_t_10);
            __pyx_t_10 = 0;

     314:                 # we do not use the name

    +315:                 cmps.add(component)

            __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_cmps), __pyx_n_s_add); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 315, __pyx_L18_except_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_19 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
              __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_7);
              if (likely(__pyx_t_19)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
                __Pyx_INCREF(__pyx_t_19);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_7, function);
              }
            }
            __pyx_t_10 = (__pyx_t_19) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_19, __pyx_cur_scope->__pyx_v_component) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_cur_scope->__pyx_v_component);
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 315, __pyx_L18_except_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;

    +316:                 return component

            __Pyx_XDECREF(__pyx_r);
            __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_component);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            goto __pyx_L19_except_return;
          }
          __pyx_L16_error:;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;

    +317:         if default is missing:

      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_missing); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 317, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = (__pyx_cur_scope->__pyx_v_default == __pyx_t_9);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_11 = (__pyx_t_8 != 0);
      if (unlikely(__pyx_t_11)) {
    /* … */
      }

    +318:             raise ResolveError("No adapter dependencies found", target, resolve_errors)

        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_ResolveError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 318, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_7 = NULL;
        __pyx_t_16 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
            __pyx_t_16 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_kp_u_No_adapter_dependencies_found, __pyx_cur_scope->__pyx_v_target, __pyx_cur_scope->__pyx_v_resolve_errors};
          __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 318, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_9);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_kp_u_No_adapter_dependencies_found, __pyx_cur_scope->__pyx_v_target, __pyx_cur_scope->__pyx_v_resolve_errors};
          __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 318, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_9);
        } else
        #endif
        {
          __pyx_t_19 = PyTuple_New(3+__pyx_t_16); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 318, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_19);
          if (__pyx_t_7) {
            __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_7); __pyx_t_7 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_u_No_adapter_dependencies_found);
          __Pyx_GIVEREF(__pyx_kp_u_No_adapter_dependencies_found);
          PyTuple_SET_ITEM(__pyx_t_19, 0+__pyx_t_16, __pyx_kp_u_No_adapter_dependencies_found);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_target);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_target);
          PyTuple_SET_ITEM(__pyx_t_19, 1+__pyx_t_16, __pyx_cur_scope->__pyx_v_target);
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_resolve_errors);
          __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_resolve_errors);
          PyTuple_SET_ITEM(__pyx_t_19, 2+__pyx_t_16, __pyx_cur_scope->__pyx_v_resolve_errors);
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_19, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 318, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        }
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_Raise(__pyx_t_9, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __PYX_ERR(0, 318, __pyx_L1_error)

    +319:         return default

      __Pyx_XDECREF(__pyx_r);
      __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_default);
      goto __pyx_L0;
      CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

     320:

     321:

    +322: cdef _get_name_or_default(Components cmps, object target, name=None):

    static PyObject *__pyx_f_5buvar_2di_4c_di__get_name_or_default(struct __pyx_obj_5buvar_10components_12c_components_Components *__pyx_v_cmps, PyObject *__pyx_v_target, struct __pyx_opt_args_5buvar_2di_4c_di__get_name_or_default *__pyx_optional_args) {
      PyObject *__pyx_v_name = ((PyObject *)Py_None);
      PyObject *__pyx_v_component = NULL;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("_get_name_or_default", 0);
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_name = __pyx_optional_args->name;
        }
      }
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_9);
      __Pyx_AddTraceback("buvar.di.c_di._get_name_or_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = 0;
      __pyx_L0:;
      __Pyx_XDECREF(__pyx_v_component);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
    struct __pyx_opt_args_5buvar_2di_4c_di__get_name_or_default {
      int __pyx_n;
      PyObject *name;
    };

     323:     # find in components

    +324:     if name is not None:

      __pyx_t_1 = (__pyx_v_name != Py_None);
      __pyx_t_2 = (__pyx_t_1 != 0);
      if (__pyx_t_2) {
    /* … */
      }

    +325:         try:

        {
          /*try:*/ {
    /* … */
          }
          __pyx_L4_error:;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    /* … */
          __Pyx_XGIVEREF(__pyx_t_3);
          __Pyx_XGIVEREF(__pyx_t_4);
          __Pyx_XGIVEREF(__pyx_t_5);
          __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
          goto __pyx_L1_error;
          __pyx_L8_try_return:;
          __Pyx_XGIVEREF(__pyx_t_3);
          __Pyx_XGIVEREF(__pyx_t_4);
          __Pyx_XGIVEREF(__pyx_t_5);
          __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
          goto __pyx_L0;
          __pyx_L5_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_3);
          __Pyx_XGIVEREF(__pyx_t_4);
          __Pyx_XGIVEREF(__pyx_t_5);
          __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
        }

    +326:             component = cmps.get(target, name=name)

            __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cmps), __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 326, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 326, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_INCREF(__pyx_v_target);
            __Pyx_GIVEREF(__pyx_v_target);
            PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_target);
            __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 326, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_8);
            if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(0, 326, __pyx_L4_error)
            __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 326, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_v_component = __pyx_t_9;
            __pyx_t_9 = 0;

    +327:             return component

            __Pyx_XDECREF(__pyx_r);
            __Pyx_INCREF(__pyx_v_component);
            __pyx_r = __pyx_v_component;
            goto __pyx_L8_try_return;

    +328:         except ComponentLookupError:

          __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)__pyx_ptype_5buvar_10components_12c_components_ComponentLookupError));
          if (__pyx_t_10) {
            __Pyx_ErrRestore(0,0,0);
            goto __pyx_L5_exception_handled;
          }
          goto __pyx_L6_except_error;
          __pyx_L6_except_error:;

     329:             pass

     330:

    +331:     component = cmps.get(target, name=None)

      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cmps), __pyx_n_s_get); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 331, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 331, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_v_target);
      __Pyx_GIVEREF(__pyx_v_target);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_target);
      __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 331, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_name, Py_None) < 0) __PYX_ERR(0, 331, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 331, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_v_component, __pyx_t_6);
      __pyx_t_6 = 0;

    +332:     return component

      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_component);
      __pyx_r = __pyx_v_component;
      goto __pyx_L0;