Cython: digestfast.pyx

Generated by Cython 0.29.15

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: digestfast.c

    +001: # cython: linetrace=True

      __Pyx_TraceLine(1,0,__PYX_ERR(0, 1, __pyx_L1_error))
      __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     002: # cython: binding=True

     003: # distutils: language = c++

     004: # distutils: define_macros=CYTHON_TRACE=1

     005: cdef extern from "<algorithm>" namespace "std":

     006:     Iter find[Iter, T](Iter first, Iter last, const T& value)

     007:

     008:

     009: # cythonize -a -i digestfast.pyx

     010:

     011: from libcpp.vector cimport vector

     012: from libcpp.set cimport set as c_set

     013:

    +014: import itertools

      __Pyx_TraceLine(14,0,__PYX_ERR(0, 14, __pyx_L1_error))
      __pyx_t_1 = __Pyx_Import(__pyx_n_s_itertools, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_itertools, __pyx_t_1) < 0) __PYX_ERR(0, 14, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +015: import sys

      __Pyx_TraceLine(15,0,__PYX_ERR(0, 15, __pyx_L1_error))
      __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     016:

     017: # method for generating the list of peptides

    +018: def getDigestedPeptides(seq, int min_len = 6, int max_len = 50, pre2 = ['K', 'R'], not_post2 = ['P'], digestion = 'full', int miscleavages = 0, methionineCleavage = True):

    static PyObject *__pyx_pf_3bin_9__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
      PyObject *__pyx_r = NULL;
      __Pyx_TraceDeclarations
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__defaults__", 0);
      __Pyx_TraceCall("__defaults__", __pyx_f[0], 18, 0, __PYX_ERR(0, 18, __pyx_L1_error));
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = __Pyx_PyInt_From_int(((int)6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyInt_From_int(((int)50)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyInt_From_int(((int)0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_New(7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
      __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_pre2);
      __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_pre2);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_pre2);
      __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_not_post2);
      __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_not_post2);
      PyTuple_SET_ITEM(__pyx_t_4, 3, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_not_post2);
      __Pyx_INCREF(((PyObject*)__pyx_n_s_full));
      __Pyx_GIVEREF(((PyObject*)__pyx_n_s_full));
      PyTuple_SET_ITEM(__pyx_t_4, 4, ((PyObject*)__pyx_n_s_full));
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_4, 5, __pyx_t_3);
      __Pyx_INCREF(((PyObject *)Py_True));
      __Pyx_GIVEREF(((PyObject *)Py_True));
      PyTuple_SET_ITEM(__pyx_t_4, 6, ((PyObject *)Py_True));
      __pyx_t_1 = 0;
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_3, 1, Py_None);
      __pyx_t_4 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* 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_AddTraceback("bin.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_TraceReturn(__pyx_r, 0);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    /* Python wrapper */
    static PyObject *__pyx_pw_3bin_1getDigestedPeptides(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static PyMethodDef __pyx_mdef_3bin_1getDigestedPeptides = {"getDigestedPeptides", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3bin_1getDigestedPeptides, METH_VARARGS|METH_KEYWORDS, 0};
    static PyObject *__pyx_pw_3bin_1getDigestedPeptides(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      PyObject *__pyx_v_seq = 0;
      int __pyx_v_min_len;
      int __pyx_v_max_len;
      PyObject *__pyx_v_pre2 = 0;
      PyObject *__pyx_v_not_post2 = 0;
      PyObject *__pyx_v_digestion = 0;
      int __pyx_v_miscleavages;
      PyObject *__pyx_v_methionineCleavage = 0;
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("getDigestedPeptides (wrapper)", 0);
      {
        static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seq,&__pyx_n_s_min_len,&__pyx_n_s_max_len,&__pyx_n_s_pre2,&__pyx_n_s_not_post2,&__pyx_n_s_digestion,&__pyx_n_s_miscleavages,&__pyx_n_s_methionineCleavage,0};
        PyObject* values[8] = {0,0,0,0,0,0,0,0};
        __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self);
        values[3] = __pyx_dynamic_args->__pyx_arg_pre2;
        values[4] = __pyx_dynamic_args->__pyx_arg_not_post2;
        values[5] = ((PyObject *)((PyObject*)__pyx_n_s_full));
        values[7] = ((PyObject *)((PyObject *)Py_True));
        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_seq)) != 0)) kw_args--;
            else goto __pyx_L5_argtuple_error;
            CYTHON_FALLTHROUGH;
            case  1:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_min_len);
              if (value) { values[1] = value; kw_args--; }
            }
            CYTHON_FALLTHROUGH;
            case  2:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_len);
              if (value) { values[2] = value; kw_args--; }
            }
            CYTHON_FALLTHROUGH;
            case  3:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pre2);
              if (value) { values[3] = value; kw_args--; }
            }
            CYTHON_FALLTHROUGH;
            case  4:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_not_post2);
              if (value) { values[4] = value; kw_args--; }
            }
            CYTHON_FALLTHROUGH;
            case  5:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_digestion);
              if (value) { values[5] = value; kw_args--; }
            }
            CYTHON_FALLTHROUGH;
            case  6:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_miscleavages);
              if (value) { values[6] = value; kw_args--; }
            }
            CYTHON_FALLTHROUGH;
            case  7:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_methionineCleavage);
              if (value) { values[7] = value; kw_args--; }
            }
          }
          if (unlikely(kw_args > 0)) {
            if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDigestedPeptides") < 0)) __PYX_ERR(0, 18, __pyx_L3_error)
          }
        } else {
          switch (PyTuple_GET_SIZE(__pyx_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);
            break;
            default: goto __pyx_L5_argtuple_error;
          }
        }
        __pyx_v_seq = values[0];
        if (values[1]) {
          __pyx_v_min_len = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_min_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 18, __pyx_L3_error)
        } else {
          __pyx_v_min_len = ((int)((int)6));
        }
        if (values[2]) {
          __pyx_v_max_len = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_max_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 18, __pyx_L3_error)
        } else {
          __pyx_v_max_len = ((int)((int)50));
        }
        __pyx_v_pre2 = values[3];
        __pyx_v_not_post2 = values[4];
        __pyx_v_digestion = values[5];
        if (values[6]) {
          __pyx_v_miscleavages = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_miscleavages == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 18, __pyx_L3_error)
        } else {
          __pyx_v_miscleavages = ((int)((int)0));
        }
        __pyx_v_methionineCleavage = values[7];
      }
      goto __pyx_L4_argument_unpacking_done;
      __pyx_L5_argtuple_error:;
      __Pyx_RaiseArgtupleInvalid("getDigestedPeptides", 0, 1, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 18, __pyx_L3_error)
      __pyx_L3_error:;
      __Pyx_AddTraceback("bin.getDigestedPeptides", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __Pyx_RefNannyFinishContext();
      return NULL;
      __pyx_L4_argument_unpacking_done:;
      __pyx_r = __pyx_pf_3bin_getDigestedPeptides(__pyx_self, __pyx_v_seq, __pyx_v_min_len, __pyx_v_max_len, __pyx_v_pre2, __pyx_v_not_post2, __pyx_v_digestion, __pyx_v_miscleavages, __pyx_v_methionineCleavage);

      /* function exit code */
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
    static PyObject *__pyx_pf_3bin_getDigestedPeptides(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seq, int __pyx_v_min_len, int __pyx_v_max_len, PyObject *__pyx_v_pre2, PyObject *__pyx_v_not_post2, PyObject *__pyx_v_digestion, int __pyx_v_miscleavages, PyObject *__pyx_v_methionineCleavage) {
      struct __pyx_obj_3bin___pyx_scope_struct__getDigestedPeptides *__pyx_cur_scope;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("getDigestedPeptides", 0);
      __pyx_cur_scope = (struct __pyx_obj_3bin___pyx_scope_struct__getDigestedPeptides *)__pyx_tp_new_3bin___pyx_scope_struct__getDigestedPeptides(__pyx_ptype_3bin___pyx_scope_struct__getDigestedPeptides, __pyx_empty_tuple, NULL);
      if (unlikely(!__pyx_cur_scope)) {
        __pyx_cur_scope = ((struct __pyx_obj_3bin___pyx_scope_struct__getDigestedPeptides *)Py_None);
        __Pyx_INCREF(Py_None);
        __PYX_ERR(0, 18, __pyx_L1_error)
      } else {
        __Pyx_GOTREF(__pyx_cur_scope);
      }
      __pyx_cur_scope->__pyx_v_seq = __pyx_v_seq;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_seq);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_seq);
      __pyx_cur_scope->__pyx_v_min_len = __pyx_v_min_len;
      __pyx_cur_scope->__pyx_v_max_len = __pyx_v_max_len;
      __pyx_cur_scope->__pyx_v_pre2 = __pyx_v_pre2;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pre2);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pre2);
      __pyx_cur_scope->__pyx_v_not_post2 = __pyx_v_not_post2;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_not_post2);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_not_post2);
      __pyx_cur_scope->__pyx_v_digestion = __pyx_v_digestion;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_digestion);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_digestion);
      __pyx_cur_scope->__pyx_v_miscleavages = __pyx_v_miscleavages;
      __pyx_cur_scope->__pyx_v_methionineCleavage = __pyx_v_methionineCleavage;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_methionineCleavage);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_methionineCleavage);
      {
        __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_3bin_2generator, __pyx_codeobj__2, (PyObject *) __pyx_cur_scope, __pyx_n_s_getDigestedPeptides, __pyx_n_s_getDigestedPeptides, __pyx_n_s_bin); if (unlikely(!gen)) __PYX_ERR(0, 18, __pyx_L1_error)
        __Pyx_DECREF(__pyx_cur_scope);
        __Pyx_RefNannyFinishContext();
        return (PyObject *) gen;
      }

      /* function exit code */
      __pyx_L1_error:;
      __Pyx_AddTraceback("bin.getDigestedPeptides", __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_3bin_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
    {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("getDigestedPeptides", 0);
      __Pyx_TraceDeclarations
      __Pyx_TraceFrameInit(__pyx_codeobj__2)
      __pyx_L3_first_run:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 18, __pyx_L1_error)
    /* … */
      /* function exit code */
      PyErr_SetNone(PyExc_StopIteration);
      goto __pyx_L0;
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_7);
      __Pyx_AddTraceback("getDigestedPeptides", __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_TraceReturn(__pyx_r, 0);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    static PyObject *__pyx_gb_3bin_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
    /* … */
      __pyx_tuple__10 = PyTuple_Pack(25, __pyx_n_s_seq, __pyx_n_s_min_len, __pyx_n_s_max_len, __pyx_n_s_pre2, __pyx_n_s_not_post2, __pyx_n_s_digestion, __pyx_n_s_miscleavages, __pyx_n_s_methionineCleavage, __pyx_n_s_cleavageSites, __pyx_n_s_starts, __pyx_n_s_i, __pyx_n_s_lenS, __pyx_n_s_lenP, __pyx_n_s_start, __pyx_n_s_methionineCleaved, __pyx_n_s_one, __pyx_n_s_c, __pyx_n_s_pre, __pyx_n_s_not_post, __pyx_n_s_p, __pyx_n_s_length_accepted, __pyx_n_s_j, __pyx_n_s_isCleavageSite, __pyx_n_s_isMethionineCleavageSite, __pyx_n_s_hasMethionineCleavage); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_tuple__10);
      __Pyx_GIVEREF(__pyx_tuple__10);
    /* … */
      __Pyx_TraceLine(18,0,__PYX_ERR(0, 18, __pyx_L1_error))
      __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3bin_1getDigestedPeptides, 0, __pyx_n_s_getDigestedPeptides, NULL, __pyx_n_s_bin, __pyx_d, ((PyObject *)__pyx_codeobj__2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_CyFunction_InitDefaults(__pyx_t_1, sizeof(__pyx_defaults), 2)) __PYX_ERR(0, 18, __pyx_L1_error)
      __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_n_s_K);
      __Pyx_GIVEREF(__pyx_n_s_K);
      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_K);
      __Pyx_INCREF(__pyx_n_s_R);
      __Pyx_GIVEREF(__pyx_n_s_R);
      PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_R);
      __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_1)->__pyx_arg_pre2 = __pyx_t_2;
      __Pyx_GIVEREF(__pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_n_s_P);
      __Pyx_GIVEREF(__pyx_n_s_P);
      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_P);
      __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_1)->__pyx_arg_not_post2 = __pyx_t_2;
      __Pyx_GIVEREF(__pyx_t_2);
      __pyx_t_2 = 0;
      __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_1, __pyx_pf_3bin_9__defaults__);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_getDigestedPeptides, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(8, 0, 25, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_bin_digestfast_pyx, __pyx_n_s_getDigestedPeptides, 18, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 18, __pyx_L1_error)
    /* … */
    struct __pyx_obj_3bin___pyx_scope_struct__getDigestedPeptides {
      PyObject_HEAD
      int __pyx_v_c;
      std::vector<int>  __pyx_v_cleavageSites;
      PyObject *__pyx_v_digestion;
      int __pyx_v_hasMethionineCleavage;
      int __pyx_v_i;
      PyObject *__pyx_v_isCleavageSite;
      PyObject *__pyx_v_isMethionineCleavageSite;
      PyObject *__pyx_v_j;
      int __pyx_v_lenP;
      int __pyx_v_lenS;
      PyObject *__pyx_v_length_accepted;
      int __pyx_v_max_len;
      PyObject *__pyx_v_methionineCleavage;
      int __pyx_v_methionineCleaved;
      int __pyx_v_min_len;
      int __pyx_v_miscleavages;
      std::set<int>  __pyx_v_not_post;
      PyObject *__pyx_v_not_post2;
      int __pyx_v_one;
      PyObject *__pyx_v_p;
      std::set<int>  __pyx_v_pre;
      PyObject *__pyx_v_pre2;
      PyObject *__pyx_v_seq;
      int __pyx_v_start;
      std::vector<int>  __pyx_v_starts;
      Py_ssize_t __pyx_t_0;
      PyObject *(*__pyx_t_1)(PyObject *);
      PyObject *__pyx_t_2;
      long __pyx_t_3;
      long __pyx_t_4;
      int __pyx_t_5;
      std::vector<int> ::iterator __pyx_t_6;
      std::vector<int> ::iterator __pyx_t_7;
    };

     019:   cdef vector[int] cleavageSites, starts

     020:   cdef int i, lenS, lenP, start, methionineCleaved, one, c

     021:   cdef c_set[int] pre, not_post

     022:

    +023:   one = 1

      __Pyx_TraceLine(23,0,__PYX_ERR(0, 23, __pyx_L1_error))
      __pyx_cur_scope->__pyx_v_one = 1;

     024:

    +025:   for p in pre2:

      __Pyx_TraceLine(25,0,__PYX_ERR(0, 25, __pyx_L1_error))
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_pre2)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_pre2)) {
        __pyx_t_1 = __pyx_cur_scope->__pyx_v_pre2; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
        __pyx_t_3 = NULL;
      } else {
        __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_pre2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_3)) {
          if (likely(PyList_CheckExact(__pyx_t_1))) {
            if (__pyx_t_2 >= 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_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 25, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          } else {
            if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 25, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          }
        } else {
          __pyx_t_4 = __pyx_t_3(__pyx_t_1);
          if (unlikely(!__pyx_t_4)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 25, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_p);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_p, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_4);
        __pyx_t_4 = 0;
    /* … */
        __Pyx_TraceLine(25,0,__PYX_ERR(0, 25, __pyx_L1_error))
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +026:     pre.insert(ord(p))

        __Pyx_TraceLine(26,0,__PYX_ERR(0, 26, __pyx_L1_error))
        __pyx_t_5 = __Pyx_PyObject_Ord(__pyx_cur_scope->__pyx_v_p); if (unlikely(__pyx_t_5 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 26, __pyx_L1_error)
        try {
          __pyx_cur_scope->__pyx_v_pre.insert(__pyx_t_5);
        } catch(...) {
          __Pyx_CppExn2PyErr();
          __PYX_ERR(0, 26, __pyx_L1_error)
        }

     027:

    +028:   for p in not_post2:

      __Pyx_TraceLine(28,0,__PYX_ERR(0, 28, __pyx_L1_error))
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_not_post2)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_not_post2)) {
        __pyx_t_1 = __pyx_cur_scope->__pyx_v_not_post2; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
        __pyx_t_3 = NULL;
      } else {
        __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_not_post2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_3)) {
          if (likely(PyList_CheckExact(__pyx_t_1))) {
            if (__pyx_t_2 >= 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_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 28, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          } else {
            if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 28, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          }
        } else {
          __pyx_t_4 = __pyx_t_3(__pyx_t_1);
          if (unlikely(!__pyx_t_4)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 28, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_p);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_p, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_4);
        __pyx_t_4 = 0;
    /* … */
        __Pyx_TraceLine(28,0,__PYX_ERR(0, 28, __pyx_L1_error))
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +029:     not_post.insert(ord(p))

        __Pyx_TraceLine(29,0,__PYX_ERR(0, 29, __pyx_L1_error))
        __pyx_t_5 = __Pyx_PyObject_Ord(__pyx_cur_scope->__pyx_v_p); if (unlikely(__pyx_t_5 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 29, __pyx_L1_error)
        try {
          __pyx_cur_scope->__pyx_v_not_post.insert(__pyx_t_5);
        } catch(...) {
          __Pyx_CppExn2PyErr();
          __PYX_ERR(0, 29, __pyx_L1_error)
        }

     030:

    +031:   lenS = len(seq)

      __Pyx_TraceLine(31,0,__PYX_ERR(0, 31, __pyx_L1_error))
      __pyx_t_2 = PyObject_Length(__pyx_cur_scope->__pyx_v_seq); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 31, __pyx_L1_error)
      __pyx_cur_scope->__pyx_v_lenS = __pyx_t_2;

    +032:   starts.push_back(0)

      __Pyx_TraceLine(32,0,__PYX_ERR(0, 32, __pyx_L1_error))
      try {
        __pyx_cur_scope->__pyx_v_starts.push_back(0);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(0, 32, __pyx_L1_error)
      }

    +033:   length_accepted = lambda x : x >= min_len and x <= max_len

    /* Python wrapper */
    static PyObject *__pyx_pw_3bin_19getDigestedPeptides_lambda(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/
    static PyMethodDef __pyx_mdef_3bin_19getDigestedPeptides_lambda = {"lambda", (PyCFunction)__pyx_pw_3bin_19getDigestedPeptides_lambda, METH_O, 0};
    static PyObject *__pyx_pw_3bin_19getDigestedPeptides_lambda(PyObject *__pyx_self, PyObject *__pyx_v_x) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("lambda (wrapper)", 0);
      __pyx_r = __pyx_lambda_funcdef_lambda(__pyx_self, ((PyObject *)__pyx_v_x));

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

    static PyObject *__pyx_lambda_funcdef_lambda(PyObject *__pyx_self, PyObject *__pyx_v_x) {
      struct __pyx_obj_3bin___pyx_scope_struct__getDigestedPeptides *__pyx_cur_scope;
      struct __pyx_obj_3bin___pyx_scope_struct__getDigestedPeptides *__pyx_outer_scope;
      PyObject *__pyx_r = NULL;
      __Pyx_TraceDeclarations
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("lambda", 0);
      __pyx_outer_scope = (struct __pyx_obj_3bin___pyx_scope_struct__getDigestedPeptides *) __Pyx_CyFunction_GetClosure(__pyx_self);
      __pyx_cur_scope = __pyx_outer_scope;
      __Pyx_TraceCall("lambda", __pyx_f[0], 33, 0, __PYX_ERR(0, 33, __pyx_L1_error));
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_min_len); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyObject_RichCompare(__pyx_v_x, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 33, __pyx_L1_error)
      if (__pyx_t_4) {
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_3);
        __pyx_t_1 = __pyx_t_3;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L3_bool_binop_done;
      }
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_max_len); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PyObject_RichCompare(__pyx_v_x, __pyx_t_3, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_L3_bool_binop_done:;
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L0;

      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_3);
      __Pyx_AddTraceback("bin.getDigestedPeptides.lambda", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_TraceReturn(__pyx_r, 0);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
      __Pyx_TraceLine(33,0,__PYX_ERR(0, 33, __pyx_L1_error))
      __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3bin_19getDigestedPeptides_lambda, 0, __pyx_n_s_getDigestedPeptides_locals_lambd, ((PyObject*)__pyx_cur_scope), __pyx_n_s_bin, __pyx_d, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_v_length_accepted = __pyx_t_1;
      __pyx_t_1 = 0;

    +034:   methionineCleavage = methionineCleavage and seq[0] == "M"

      __Pyx_TraceLine(34,0,__PYX_ERR(0, 34, __pyx_L1_error))
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_methionineCleavage); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 34, __pyx_L1_error)
      if (__pyx_t_6) {
      } else {
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_methionineCleavage);
        __pyx_t_1 = __pyx_cur_scope->__pyx_v_methionineCleavage;
        goto __pyx_L8_bool_binop_done;
      }
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_seq, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 34, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_7 = PyObject_RichCompare(__pyx_t_4, __pyx_n_s_M, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_1 = __pyx_t_7;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_L8_bool_binop_done:;
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_methionineCleavage);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_methionineCleavage, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_1 = 0;

     035:

    +036:   if digestion == 'none':

      __Pyx_TraceLine(36,0,__PYX_ERR(0, 36, __pyx_L1_error))
      __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_cur_scope->__pyx_v_digestion, __pyx_n_s_none, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 36, __pyx_L1_error)
      if (__pyx_t_6) {
    /* … */
        goto __pyx_L10;
      }

    +037:     for i in range(lenS + 1):

        __Pyx_TraceLine(37,0,__PYX_ERR(0, 37, __pyx_L1_error))
        __pyx_t_5 = (__pyx_cur_scope->__pyx_v_lenS + 1);
        __pyx_t_8 = __pyx_t_5;
        for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
          __pyx_cur_scope->__pyx_v_i = __pyx_t_9;

    +038:       for j in range(i + min_len, i + max_len + 1):

          __Pyx_TraceLine(38,0,__PYX_ERR(0, 38, __pyx_L1_error))
          __pyx_t_1 = __Pyx_PyInt_From_int((__pyx_cur_scope->__pyx_v_i + __pyx_cur_scope->__pyx_v_min_len)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_7 = __Pyx_PyInt_From_long(((__pyx_cur_scope->__pyx_v_i + __pyx_cur_scope->__pyx_v_max_len) + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 38, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 38, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7);
          __pyx_t_1 = 0;
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 38, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) {
            __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_2 = 0;
            __pyx_t_3 = NULL;
          } else {
            __pyx_t_2 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 38, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_3 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error)
          }
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          for (;;) {
            if (likely(!__pyx_t_3)) {
              if (likely(PyList_CheckExact(__pyx_t_4))) {
                if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_4)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_7); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 38, __pyx_L1_error)
                #else
                __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 38, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_7);
                #endif
              } else {
                if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_7); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 38, __pyx_L1_error)
                #else
                __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 38, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_7);
                #endif
              }
            } else {
              __pyx_t_7 = __pyx_t_3(__pyx_t_4);
              if (unlikely(!__pyx_t_7)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 38, __pyx_L1_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_7);
            }
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_j);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_j, __pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_7);
            __pyx_t_7 = 0;
    /* … */
            __Pyx_TraceLine(38,0,__PYX_ERR(0, 38, __pyx_L1_error))
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }

    +039:         if j < lenS:

            __Pyx_TraceLine(39,0,__PYX_ERR(0, 39, __pyx_L1_error))
            __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_lenS); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 39, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_1 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_j, __pyx_t_7, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 39, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 39, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (__pyx_t_6) {
    /* … */
            }

    +040:           yield seq[i:j]

              __Pyx_TraceLine(40,0,__PYX_ERR(0, 40, __pyx_L1_error))
              __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_cur_scope->__pyx_v_seq, __pyx_cur_scope->__pyx_v_i, 0, NULL, &__pyx_cur_scope->__pyx_v_j, NULL, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_r = __pyx_t_1;
              __pyx_t_1 = 0;
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_3;
              __Pyx_XGIVEREF(__pyx_t_4);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_4;
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_5;
              __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
              __pyx_cur_scope->__pyx_t_5 = __pyx_t_9;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_TraceReturn(__pyx_r, 0);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, yielding value */
              __pyx_generator->resume_label = 1;
              return __pyx_r;
              __pyx_L16_resume_from_yield:;
              __pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
              __pyx_t_3 = __pyx_cur_scope->__pyx_t_1;
              __pyx_t_4 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_4);
              __pyx_t_5 = __pyx_cur_scope->__pyx_t_3;
              __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
              __pyx_t_9 = __pyx_cur_scope->__pyx_t_5;
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 40, __pyx_L1_error)

    +041:   elif digestion == 'semi':

      __Pyx_TraceLine(41,0,__PYX_ERR(0, 41, __pyx_L1_error))
      __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_cur_scope->__pyx_v_digestion, __pyx_n_s_semi, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 41, __pyx_L1_error)
      if (__pyx_t_6) {
    /* … */
        goto __pyx_L10;
      }

    +042:     for i in range(lenS + 1):

        __Pyx_TraceLine(42,0,__PYX_ERR(0, 42, __pyx_L1_error))
        __pyx_t_5 = (__pyx_cur_scope->__pyx_v_lenS + 1);
        __pyx_t_8 = __pyx_t_5;
        for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
          __pyx_cur_scope->__pyx_v_i = __pyx_t_9;

    +043:       isCleavageSite = (seq[min([lenS-1,i])] in pre2 and seq[min([lenS-1,i+1])] not in not_post2)

          __Pyx_TraceLine(43,0,__PYX_ERR(0, 43, __pyx_L1_error))
          __pyx_t_10 = __pyx_cur_scope->__pyx_v_i;
          __pyx_t_11 = (__pyx_cur_scope->__pyx_v_lenS - 1);
          if (((__pyx_t_10 < __pyx_t_11) != 0)) {
            __pyx_t_12 = __pyx_t_10;
          } else {
            __pyx_t_12 = __pyx_t_11;
          }
          __pyx_t_11 = __pyx_t_12;
          __pyx_t_1 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_seq, __pyx_t_11, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_cur_scope->__pyx_v_pre2, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 43, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (__pyx_t_6) {
          } else {
            __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_4 = __pyx_t_1;
            __pyx_t_1 = 0;
            goto __pyx_L19_bool_binop_done;
          }
          __pyx_t_11 = (__pyx_cur_scope->__pyx_v_i + 1);
          __pyx_t_12 = (__pyx_cur_scope->__pyx_v_lenS - 1);
          if (((__pyx_t_11 < __pyx_t_12) != 0)) {
            __pyx_t_13 = __pyx_t_11;
          } else {
            __pyx_t_13 = __pyx_t_12;
          }
          __pyx_t_11 = __pyx_t_13;
          __pyx_t_1 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_seq, __pyx_t_11, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_cur_scope->__pyx_v_not_post2, Py_NE)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 43, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = __pyx_t_1;
          __pyx_t_1 = 0;
          __pyx_L19_bool_binop_done:;
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_isCleavageSite);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_isCleavageSite, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          __pyx_t_4 = 0;

    +044:       isMethionineCleavageSite = (i == 0 and methionineCleavage)

          __Pyx_TraceLine(44,0,__PYX_ERR(0, 44, __pyx_L1_error))
          __pyx_t_6 = (__pyx_cur_scope->__pyx_v_i == 0);
          if (__pyx_t_6) {
          } else {
            __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_4 = __pyx_t_1;
            __pyx_t_1 = 0;
            goto __pyx_L21_bool_binop_done;
          }
          __Pyx_INCREF(__pyx_cur_scope->__pyx_v_methionineCleavage);
          __pyx_t_4 = __pyx_cur_scope->__pyx_v_methionineCleavage;
          __pyx_L21_bool_binop_done:;
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_isMethionineCleavageSite);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_isMethionineCleavageSite, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          __pyx_t_4 = 0;

    +045:       if i == lenS or isCleavageSite or isMethionineCleavageSite:

          __Pyx_TraceLine(45,0,__PYX_ERR(0, 45, __pyx_L1_error))
          __pyx_t_14 = ((__pyx_cur_scope->__pyx_v_i == __pyx_cur_scope->__pyx_v_lenS) != 0);
          if (!__pyx_t_14) {
          } else {
            __pyx_t_6 = __pyx_t_14;
            goto __pyx_L24_bool_binop_done;
          }
          __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_isCleavageSite); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 45, __pyx_L1_error)
          if (!__pyx_t_14) {
          } else {
            __pyx_t_6 = __pyx_t_14;
            goto __pyx_L24_bool_binop_done;
          }
          __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_isMethionineCleavageSite); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 45, __pyx_L1_error)
          __pyx_t_6 = __pyx_t_14;
          __pyx_L24_bool_binop_done:;
          if (__pyx_t_6) {
    /* … */
            goto __pyx_L23;
          }

     046:         # peptides with enzymatic C-terminal (both enzymatic and non-enzymatic N-terminal)

    +047:         start = starts[0]

            __Pyx_TraceLine(47,0,__PYX_ERR(0, 47, __pyx_L1_error))
            __pyx_cur_scope->__pyx_v_start = (__pyx_cur_scope->__pyx_v_starts[0]);

    +048:         for j in range(start, min([i+1, lenS])):

            __Pyx_TraceLine(48,0,__PYX_ERR(0, 48, __pyx_L1_error))
            __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 48, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_10 = __pyx_cur_scope->__pyx_v_lenS;
            __pyx_t_11 = (__pyx_cur_scope->__pyx_v_i + 1);
            if (((__pyx_t_10 < __pyx_t_11) != 0)) {
              __pyx_t_13 = __pyx_t_10;
            } else {
              __pyx_t_13 = __pyx_t_11;
            }
            __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 48, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
            __pyx_t_4 = 0;
            __pyx_t_1 = 0;
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
              __pyx_t_7 = __pyx_t_1; __Pyx_INCREF(__pyx_t_7); __pyx_t_2 = 0;
              __pyx_t_3 = NULL;
            } else {
              __pyx_t_2 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 48, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_7);
              __pyx_t_3 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 48, __pyx_L1_error)
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            for (;;) {
              if (likely(!__pyx_t_3)) {
                if (likely(PyList_CheckExact(__pyx_t_7))) {
                  if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_7)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_1 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 48, __pyx_L1_error)
                  #else
                  __pyx_t_1 = PySequence_ITEM(__pyx_t_7, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  #endif
                } else {
                  if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 48, __pyx_L1_error)
                  #else
                  __pyx_t_1 = PySequence_ITEM(__pyx_t_7, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  #endif
                }
              } else {
                __pyx_t_1 = __pyx_t_3(__pyx_t_7);
                if (unlikely(!__pyx_t_1)) {
                  PyObject* exc_type = PyErr_Occurred();
                  if (exc_type) {
                    if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                    else __PYX_ERR(0, 48, __pyx_L1_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_1);
              }
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_j);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_j, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
    /* … */
              __Pyx_TraceLine(48,0,__PYX_ERR(0, 48, __pyx_L1_error))
            }
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

    +049:           lenP = min([i, lenS - 1]) - j + 1

              __Pyx_TraceLine(49,0,__PYX_ERR(0, 49, __pyx_L1_error))
              __pyx_t_13 = (__pyx_cur_scope->__pyx_v_lenS - 1);
              __pyx_t_10 = __pyx_cur_scope->__pyx_v_i;
              if (((__pyx_t_13 < __pyx_t_10) != 0)) {
                __pyx_t_11 = __pyx_t_13;
              } else {
                __pyx_t_11 = __pyx_t_10;
              }
              __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_4 = PyNumber_Subtract(__pyx_t_1, __pyx_cur_scope->__pyx_v_j); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 49, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_4, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 49, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_cur_scope->__pyx_v_lenP = __pyx_t_10;

    +050:           if length_accepted(lenP):

              __Pyx_TraceLine(50,0,__PYX_ERR(0, 50, __pyx_L1_error))
              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_lenP); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_4 = __pyx_lambda_funcdef_lambda(__pyx_cur_scope->__pyx_v_length_accepted, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 50, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              if (__pyx_t_6) {
    /* … */
              }

    +051:             yield (seq[j : i + 1])

                __Pyx_TraceLine(51,0,__PYX_ERR(0, 51, __pyx_L1_error))
                __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_cur_scope->__pyx_v_seq, 0, (__pyx_cur_scope->__pyx_v_i + 1), &__pyx_cur_scope->__pyx_v_j, NULL, NULL, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_4);
                __pyx_r = __pyx_t_4;
                __pyx_t_4 = 0;
                __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
                __pyx_cur_scope->__pyx_t_1 = __pyx_t_3;
                __pyx_cur_scope->__pyx_t_3 = __pyx_t_5;
                __Pyx_XGIVEREF(__pyx_t_7);
                __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
                __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
                __pyx_cur_scope->__pyx_t_5 = __pyx_t_9;
                __Pyx_XGIVEREF(__pyx_r);
                __Pyx_TraceReturn(__pyx_r, 0);
                __Pyx_RefNannyFinishContext();
                __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                /* return from generator, yielding value */
                __pyx_generator->resume_label = 2;
                return __pyx_r;
                __pyx_L30_resume_from_yield:;
                __pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
                __pyx_t_3 = __pyx_cur_scope->__pyx_t_1;
                __pyx_t_5 = __pyx_cur_scope->__pyx_t_3;
                __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
                __pyx_cur_scope->__pyx_t_2 = 0;
                __Pyx_XGOTREF(__pyx_t_7);
                __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
                __pyx_t_9 = __pyx_cur_scope->__pyx_t_5;
                if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 51, __pyx_L1_error)

    +052:         starts.push_back(i + 1)

            __Pyx_TraceLine(52,0,__PYX_ERR(0, 52, __pyx_L1_error))
            try {
              __pyx_cur_scope->__pyx_v_starts.push_back((__pyx_cur_scope->__pyx_v_i + 1));
            } catch(...) {
              __Pyx_CppExn2PyErr();
              __PYX_ERR(0, 52, __pyx_L1_error)
            }

    +053:         methionineCleaved = int(methionineCleavage and starts[0] == 0)

            __Pyx_TraceLine(53,0,__PYX_ERR(0, 53, __pyx_L1_error))
            __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_methionineCleavage); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 53, __pyx_L1_error)
            if (__pyx_t_6) {
            } else {
              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_methionineCleavage);
              __pyx_t_7 = __pyx_cur_scope->__pyx_v_methionineCleavage;
              goto __pyx_L31_bool_binop_done;
            }
            __pyx_t_6 = ((__pyx_cur_scope->__pyx_v_starts[0]) == 0);
            __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 53, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_7 = __pyx_t_4;
            __pyx_t_4 = 0;
            __pyx_L31_bool_binop_done:;
            __pyx_t_4 = __Pyx_PyNumber_Int(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 53, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 53, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_cur_scope->__pyx_v_methionineCleaved = __pyx_t_10;

    +054:         if len(starts) > miscleavages + 1 + methionineCleaved or i == lenS:

            __Pyx_TraceLine(54,0,__PYX_ERR(0, 54, __pyx_L1_error))
            __pyx_t_4 = __pyx_convert_vector_to_py_int(__pyx_cur_scope->__pyx_v_starts); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 54, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_2 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 54, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_14 = ((__pyx_t_2 > ((__pyx_cur_scope->__pyx_v_miscleavages + 1) + __pyx_cur_scope->__pyx_v_methionineCleaved)) != 0);
            if (!__pyx_t_14) {
            } else {
              __pyx_t_6 = __pyx_t_14;
              goto __pyx_L34_bool_binop_done;
            }
            __pyx_t_14 = ((__pyx_cur_scope->__pyx_v_i == __pyx_cur_scope->__pyx_v_lenS) != 0);
            __pyx_t_6 = __pyx_t_14;
            __pyx_L34_bool_binop_done:;
            if (__pyx_t_6) {
    /* … */
            }

    +055:           starts = starts[1 + methionineCleaved:]

              __Pyx_TraceLine(55,0,__PYX_ERR(0, 55, __pyx_L1_error))
              __pyx_t_4 = __pyx_convert_vector_to_py_int(__pyx_cur_scope->__pyx_v_starts); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 55, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, (1 + __pyx_cur_scope->__pyx_v_methionineCleaved), 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 55, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_t_15 = __pyx_convert_vector_from_py_int(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __pyx_cur_scope->__pyx_v_starts = __pyx_t_15;

     056:       else: # peptides with non enzymatic C-terminal

    +057:         for start in starts:

          __Pyx_TraceLine(57,0,__PYX_ERR(0, 57, __pyx_L1_error))
          /*else*/ {
            __pyx_t_16 = __pyx_cur_scope->__pyx_v_starts.begin();
            for (;;) {
              if (!(__pyx_t_16 != __pyx_cur_scope->__pyx_v_starts.end())) break;
              __pyx_t_10 = *__pyx_t_16;
              ++__pyx_t_16;
              __pyx_cur_scope->__pyx_v_start = __pyx_t_10;
    /* … */
              __Pyx_TraceLine(57,0,__PYX_ERR(0, 57, __pyx_L1_error))
            }
          }
          __pyx_L23:;
        }

    +058:           lenP = i - start + 1

              __Pyx_TraceLine(58,0,__PYX_ERR(0, 58, __pyx_L1_error))
              __pyx_cur_scope->__pyx_v_lenP = ((__pyx_cur_scope->__pyx_v_i - __pyx_cur_scope->__pyx_v_start) + 1);

    +059:           if length_accepted(lenP) and starts[-1] == i + 1:

              __Pyx_TraceLine(59,0,__PYX_ERR(0, 59, __pyx_L1_error))
              __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_lenP); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 59, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_7);
              __pyx_t_4 = __pyx_lambda_funcdef_lambda(__pyx_cur_scope->__pyx_v_length_accepted, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 59, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              if (__pyx_t_14) {
              } else {
                __pyx_t_6 = __pyx_t_14;
                goto __pyx_L39_bool_binop_done;
              }
              __pyx_t_14 = (((__pyx_cur_scope->__pyx_v_starts[-1L]) == (__pyx_cur_scope->__pyx_v_i + 1)) != 0);
              __pyx_t_6 = __pyx_t_14;
              __pyx_L39_bool_binop_done:;
              if (__pyx_t_6) {
    /* … */
              }

    +060:             yield (seq[start : i + 1])

                __Pyx_TraceLine(60,0,__PYX_ERR(0, 60, __pyx_L1_error))
                __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_cur_scope->__pyx_v_seq, __pyx_cur_scope->__pyx_v_start, (__pyx_cur_scope->__pyx_v_i + 1), NULL, NULL, NULL, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_4);
                __pyx_r = __pyx_t_4;
                __pyx_t_4 = 0;
                __pyx_cur_scope->__pyx_t_3 = __pyx_t_5;
                __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
                __pyx_cur_scope->__pyx_t_5 = __pyx_t_9;
                __pyx_cur_scope->__pyx_t_6 = __pyx_t_16;
                __Pyx_XGIVEREF(__pyx_r);
                __Pyx_TraceReturn(__pyx_r, 0);
                __Pyx_RefNannyFinishContext();
                __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                /* return from generator, yielding value */
                __pyx_generator->resume_label = 3;
                return __pyx_r;
                __pyx_L41_resume_from_yield:;
                __pyx_t_5 = __pyx_cur_scope->__pyx_t_3;
                __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
                __pyx_t_9 = __pyx_cur_scope->__pyx_t_5;
                __pyx_t_16 = __pyx_cur_scope->__pyx_t_6;
                if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 60, __pyx_L1_error)

     061:   else:

    +062:     hasMethionineCleavage = False

      __Pyx_TraceLine(62,0,__PYX_ERR(0, 62, __pyx_L1_error))
      /*else*/ {
        __pyx_cur_scope->__pyx_v_hasMethionineCleavage = 0;

    +063:     if methionineCleavage and seq[0] == 'M':

        __Pyx_TraceLine(63,0,__PYX_ERR(0, 63, __pyx_L1_error))
        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_methionineCleavage); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 63, __pyx_L1_error)
        if (__pyx_t_14) {
        } else {
          __pyx_t_6 = __pyx_t_14;
          goto __pyx_L43_bool_binop_done;
        }
        __pyx_t_4 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_seq, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_M, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 63, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_6 = __pyx_t_14;
        __pyx_L43_bool_binop_done:;
        if (__pyx_t_6) {
    /* … */
        }

    +064:       cleavageSites.push_back(0)

          __Pyx_TraceLine(64,0,__PYX_ERR(0, 64, __pyx_L1_error))
          try {
            __pyx_cur_scope->__pyx_v_cleavageSites.push_back(0);
          } catch(...) {
            __Pyx_CppExn2PyErr();
            __PYX_ERR(0, 64, __pyx_L1_error)
          }

    +065:       hasMethionineCleavage = True

          __Pyx_TraceLine(65,0,__PYX_ERR(0, 65, __pyx_L1_error))
          __pyx_cur_scope->__pyx_v_hasMethionineCleavage = 1;

    +066:     for i in range(lenS):

        __Pyx_TraceLine(66,0,__PYX_ERR(0, 66, __pyx_L1_error))
        __pyx_t_9 = __pyx_cur_scope->__pyx_v_lenS;
        __pyx_t_10 = __pyx_t_9;
        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_10; __pyx_t_17+=1) {
          __pyx_cur_scope->__pyx_v_i = __pyx_t_17;

    +067:       if pre.find(ord(seq[i])) != pre.end() and not_post.find(ord(seq[min([lenS-1,i+1])])) == not_post.end():

          __Pyx_TraceLine(67,0,__PYX_ERR(0, 67, __pyx_L1_error))
          __pyx_t_4 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_seq, __pyx_cur_scope->__pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 67, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = __Pyx_PyObject_Ord(__pyx_t_4); if (unlikely(__pyx_t_5 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 67, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_14 = ((__pyx_cur_scope->__pyx_v_pre.find(__pyx_t_5) != __pyx_cur_scope->__pyx_v_pre.end()) != 0);
          if (__pyx_t_14) {
          } else {
            __pyx_t_6 = __pyx_t_14;
            goto __pyx_L48_bool_binop_done;
          }
          __pyx_t_5 = (__pyx_cur_scope->__pyx_v_i + 1);
          __pyx_t_8 = (__pyx_cur_scope->__pyx_v_lenS - 1);
          if (((__pyx_t_5 < __pyx_t_8) != 0)) {
            __pyx_t_11 = __pyx_t_5;
          } else {
            __pyx_t_11 = __pyx_t_8;
          }
          __pyx_t_5 = __pyx_t_11;
          __pyx_t_4 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_seq, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 67, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = __Pyx_PyObject_Ord(__pyx_t_4); if (unlikely(__pyx_t_5 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 67, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_14 = ((__pyx_cur_scope->__pyx_v_not_post.find(__pyx_t_5) == __pyx_cur_scope->__pyx_v_not_post.end()) != 0);
          __pyx_t_6 = __pyx_t_14;
          __pyx_L48_bool_binop_done:;
          if (__pyx_t_6) {
    /* … */
          }
        }

    +068:         cleavageSites.push_back(i)

            __Pyx_TraceLine(68,0,__PYX_ERR(0, 68, __pyx_L1_error))
            try {
              __pyx_cur_scope->__pyx_v_cleavageSites.push_back(__pyx_cur_scope->__pyx_v_i);
            } catch(...) {
              __Pyx_CppExn2PyErr();
              __PYX_ERR(0, 68, __pyx_L1_error)
            }

    +069:     cleavageSites.push_back(lenS)

        __Pyx_TraceLine(69,0,__PYX_ERR(0, 69, __pyx_L1_error))
        try {
          __pyx_cur_scope->__pyx_v_cleavageSites.push_back(__pyx_cur_scope->__pyx_v_lenS);
        } catch(...) {
          __Pyx_CppExn2PyErr();
          __PYX_ERR(0, 69, __pyx_L1_error)
        }

    +070:     for i in cleavageSites:

        __Pyx_TraceLine(70,0,__PYX_ERR(0, 70, __pyx_L1_error))
        __pyx_t_16 = __pyx_cur_scope->__pyx_v_cleavageSites.begin();
        for (;;) {
          if (!(__pyx_t_16 != __pyx_cur_scope->__pyx_v_cleavageSites.end())) break;
          __pyx_t_9 = *__pyx_t_16;
          ++__pyx_t_16;
          __pyx_cur_scope->__pyx_v_i = __pyx_t_9;
    /* … */
          __Pyx_TraceLine(70,0,__PYX_ERR(0, 70, __pyx_L1_error))
        }
      }
      __pyx_L10:;
      CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

    +071:       for start in starts:

          __Pyx_TraceLine(71,0,__PYX_ERR(0, 71, __pyx_L1_error))
          __pyx_t_18 = __pyx_cur_scope->__pyx_v_starts.begin();
          for (;;) {
            if (!(__pyx_t_18 != __pyx_cur_scope->__pyx_v_starts.end())) break;
            __pyx_t_9 = *__pyx_t_18;
            ++__pyx_t_18;
            __pyx_cur_scope->__pyx_v_start = __pyx_t_9;
    /* … */
            __Pyx_TraceLine(71,0,__PYX_ERR(0, 71, __pyx_L1_error))
          }

    +072:         lenP = i - start + 1

            __Pyx_TraceLine(72,0,__PYX_ERR(0, 72, __pyx_L1_error))
            __pyx_cur_scope->__pyx_v_lenP = ((__pyx_cur_scope->__pyx_v_i - __pyx_cur_scope->__pyx_v_start) + 1);

    +073:         if lenP >= min_len and lenP <= max_len:

            __Pyx_TraceLine(73,0,__PYX_ERR(0, 73, __pyx_L1_error))
            __pyx_t_14 = ((__pyx_cur_scope->__pyx_v_lenP >= __pyx_cur_scope->__pyx_v_min_len) != 0);
            if (__pyx_t_14) {
            } else {
              __pyx_t_6 = __pyx_t_14;
              goto __pyx_L55_bool_binop_done;
            }
            __pyx_t_14 = ((__pyx_cur_scope->__pyx_v_lenP <= __pyx_cur_scope->__pyx_v_max_len) != 0);
            __pyx_t_6 = __pyx_t_14;
            __pyx_L55_bool_binop_done:;
            if (__pyx_t_6) {
    /* … */
            }

    +074:           yield (seq[start : i + 1])

              __Pyx_TraceLine(74,0,__PYX_ERR(0, 74, __pyx_L1_error))
              __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_cur_scope->__pyx_v_seq, __pyx_cur_scope->__pyx_v_start, (__pyx_cur_scope->__pyx_v_i + 1), NULL, NULL, NULL, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_r = __pyx_t_4;
              __pyx_t_4 = 0;
              __pyx_cur_scope->__pyx_t_6 = __pyx_t_16;
              __pyx_cur_scope->__pyx_t_7 = __pyx_t_18;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_TraceReturn(__pyx_r, 0);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, yielding value */
              __pyx_generator->resume_label = 4;
              return __pyx_r;
              __pyx_L57_resume_from_yield:;
              __pyx_t_16 = __pyx_cur_scope->__pyx_t_6;
              __pyx_t_18 = __pyx_cur_scope->__pyx_t_7;
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 74, __pyx_L1_error)

    +075:       starts.push_back(i + 1)

          __Pyx_TraceLine(75,0,__PYX_ERR(0, 75, __pyx_L1_error))
          try {
            __pyx_cur_scope->__pyx_v_starts.push_back((__pyx_cur_scope->__pyx_v_i + 1));
          } catch(...) {
            __Pyx_CppExn2PyErr();
            __PYX_ERR(0, 75, __pyx_L1_error)
          }

    +076:       methionineCleaved = int(starts[0] == 0 and hasMethionineCleavage)

          __Pyx_TraceLine(76,0,__PYX_ERR(0, 76, __pyx_L1_error))
          __pyx_t_6 = ((__pyx_cur_scope->__pyx_v_starts[0]) == 0);
          if (__pyx_t_6) {
          } else {
            __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 76, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_4 = __pyx_t_7;
            __pyx_t_7 = 0;
            goto __pyx_L58_bool_binop_done;
          }
          __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_cur_scope->__pyx_v_hasMethionineCleavage); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 76, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = __pyx_t_7;
          __pyx_t_7 = 0;
          __pyx_L58_bool_binop_done:;
          __pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 76, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 76, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_cur_scope->__pyx_v_methionineCleaved = __pyx_t_9;

    +077:       if starts.size() > miscleavages + one + methionineCleaved:

          __Pyx_TraceLine(77,0,__PYX_ERR(0, 77, __pyx_L1_error))
          __pyx_t_6 = ((__pyx_cur_scope->__pyx_v_starts.size() > ((__pyx_cur_scope->__pyx_v_miscleavages + __pyx_cur_scope->__pyx_v_one) + __pyx_cur_scope->__pyx_v_methionineCleaved)) != 0);
          if (__pyx_t_6) {
    /* … */
          }

    +078:         starts = starts[one + methionineCleaved:]

            __Pyx_TraceLine(78,0,__PYX_ERR(0, 78, __pyx_L1_error))
            __pyx_t_7 = __pyx_convert_vector_to_py_int(__pyx_cur_scope->__pyx_v_starts); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 78, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_7, (__pyx_cur_scope->__pyx_v_one + __pyx_cur_scope->__pyx_v_methionineCleaved), 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 78, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __pyx_t_15 = __pyx_convert_vector_from_py_int(__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_cur_scope->__pyx_v_starts = __pyx_t_15;

     079:

    +080: def readFastaMaxQuant(filePath, db = "target", parseId = lambda x : x.split(" ")[0], specialAAs = ['R', 'K']):

    /* Python wrapper */
    static PyObject *__pyx_pw_3bin_8lambda1(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/
    static PyMethodDef __pyx_mdef_3bin_8lambda1 = {"lambda1", (PyCFunction)__pyx_pw_3bin_8lambda1, METH_O, 0};
    static PyObject *__pyx_pw_3bin_8lambda1(PyObject *__pyx_self, PyObject *__pyx_v_x) {
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("lambda1 (wrapper)", 0);
      __pyx_r = __pyx_lambda_funcdef_3bin_lambda1(__pyx_self, ((PyObject *)__pyx_v_x));

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

    static PyObject *__pyx_lambda_funcdef_3bin_lambda1(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
      PyObject *__pyx_r = NULL;
      __Pyx_TraceDeclarations
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("lambda1", 0);
      __Pyx_TraceCall("lambda1", __pyx_f[0], 80, 0, __PYX_ERR(0, 80, __pyx_L1_error));
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __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;

      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_3);
      __Pyx_AddTraceback("bin.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_TraceReturn(__pyx_r, 0);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    static PyObject *__pyx_gb_3bin_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
    /* … */
    static PyObject *__pyx_pf_3bin_11__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
      PyObject *__pyx_r = NULL;
      __Pyx_TraceDeclarations
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("__defaults__", 0);
      __Pyx_TraceCall("__defaults__", __pyx_f[0], 80, 0, __PYX_ERR(0, 80, __pyx_L1_error));
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(((PyObject*)__pyx_n_s_target));
      __Pyx_GIVEREF(((PyObject*)__pyx_n_s_target));
      PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject*)__pyx_n_s_target));
      __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_parseId);
      __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_parseId);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_parseId);
      __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_specialAAs);
      __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_specialAAs);
      PyTuple_SET_ITEM(__pyx_t_1, 2, __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_specialAAs);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None);
      __pyx_t_1 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;

      /* function exit code */
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_2);
      __Pyx_AddTraceback("bin.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_TraceReturn(__pyx_r, 0);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    /* Python wrapper */
    static PyObject *__pyx_pw_3bin_4readFastaMaxQuant(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static PyMethodDef __pyx_mdef_3bin_4readFastaMaxQuant = {"readFastaMaxQuant", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3bin_4readFastaMaxQuant, METH_VARARGS|METH_KEYWORDS, 0};
    static PyObject *__pyx_pw_3bin_4readFastaMaxQuant(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      PyObject *__pyx_v_filePath = 0;
      PyObject *__pyx_v_db = 0;
      PyObject *__pyx_v_parseId = 0;
      PyObject *__pyx_v_specialAAs = 0;
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("readFastaMaxQuant (wrapper)", 0);
      {
        static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filePath,&__pyx_n_s_db,&__pyx_n_s_parseId,&__pyx_n_s_specialAAs,0};
        PyObject* values[4] = {0,0,0,0};
        __pyx_defaults1 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self);
        values[1] = ((PyObject *)((PyObject*)__pyx_n_s_target));
        values[2] = __pyx_dynamic_args->__pyx_arg_parseId;
        values[3] = __pyx_dynamic_args->__pyx_arg_specialAAs;
        if (unlikely(__pyx_kwds)) {
          Py_ssize_t kw_args;
          const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
          switch (pos_args) {
            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_filePath)) != 0)) kw_args--;
            else goto __pyx_L5_argtuple_error;
            CYTHON_FALLTHROUGH;
            case  1:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_db);
              if (value) { values[1] = value; kw_args--; }
            }
            CYTHON_FALLTHROUGH;
            case  2:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parseId);
              if (value) { values[2] = value; kw_args--; }
            }
            CYTHON_FALLTHROUGH;
            case  3:
            if (kw_args > 0) {
              PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_specialAAs);
              if (value) { values[3] = value; kw_args--; }
            }
          }
          if (unlikely(kw_args > 0)) {
            if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readFastaMaxQuant") < 0)) __PYX_ERR(0, 80, __pyx_L3_error)
          }
        } else {
          switch (PyTuple_GET_SIZE(__pyx_args)) {
            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);
            break;
            default: goto __pyx_L5_argtuple_error;
          }
        }
        __pyx_v_filePath = values[0];
        __pyx_v_db = values[1];
        __pyx_v_parseId = values[2];
        __pyx_v_specialAAs = values[3];
      }
      goto __pyx_L4_argument_unpacking_done;
      __pyx_L5_argtuple_error:;
      __Pyx_RaiseArgtupleInvalid("readFastaMaxQuant", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 80, __pyx_L3_error)
      __pyx_L3_error:;
      __Pyx_AddTraceback("bin.readFastaMaxQuant", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __Pyx_RefNannyFinishContext();
      return NULL;
      __pyx_L4_argument_unpacking_done:;
      __pyx_r = __pyx_pf_3bin_3readFastaMaxQuant(__pyx_self, __pyx_v_filePath, __pyx_v_db, __pyx_v_parseId, __pyx_v_specialAAs);

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

    static PyObject *__pyx_pf_3bin_3readFastaMaxQuant(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filePath, PyObject *__pyx_v_db, PyObject *__pyx_v_parseId, PyObject *__pyx_v_specialAAs) {
      struct __pyx_obj_3bin___pyx_scope_struct_1_readFastaMaxQuant *__pyx_cur_scope;
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("readFastaMaxQuant", 0);
      __pyx_cur_scope = (struct __pyx_obj_3bin___pyx_scope_struct_1_readFastaMaxQuant *)__pyx_tp_new_3bin___pyx_scope_struct_1_readFastaMaxQuant(__pyx_ptype_3bin___pyx_scope_struct_1_readFastaMaxQuant, __pyx_empty_tuple, NULL);
      if (unlikely(!__pyx_cur_scope)) {
        __pyx_cur_scope = ((struct __pyx_obj_3bin___pyx_scope_struct_1_readFastaMaxQuant *)Py_None);
        __Pyx_INCREF(Py_None);
        __PYX_ERR(0, 80, __pyx_L1_error)
      } else {
        __Pyx_GOTREF(__pyx_cur_scope);
      }
      __pyx_cur_scope->__pyx_v_filePath = __pyx_v_filePath;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_filePath);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_filePath);
      __pyx_cur_scope->__pyx_v_db = __pyx_v_db;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_db);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_db);
      __pyx_cur_scope->__pyx_v_parseId = __pyx_v_parseId;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_parseId);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_parseId);
      __pyx_cur_scope->__pyx_v_specialAAs = __pyx_v_specialAAs;
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_specialAAs);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_specialAAs);
      {
        __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_3bin_5generator1, __pyx_codeobj__3, (PyObject *) __pyx_cur_scope, __pyx_n_s_readFastaMaxQuant, __pyx_n_s_readFastaMaxQuant, __pyx_n_s_bin); if (unlikely(!gen)) __PYX_ERR(0, 80, __pyx_L1_error)
        __Pyx_DECREF(__pyx_cur_scope);
        __Pyx_RefNannyFinishContext();
        return (PyObject *) gen;
      }

      /* function exit code */
      __pyx_L1_error:;
      __Pyx_AddTraceback("bin.readFastaMaxQuant", __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_3bin_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
    {
      PyObject *__pyx_r = NULL;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("readFastaMaxQuant", 0);
      __Pyx_TraceDeclarations
      __Pyx_TraceFrameInit(__pyx_codeobj__3)
      __pyx_L3_first_run:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 80, __pyx_L1_error)
    /* … */
      /* function exit code */
      PyErr_SetNone(PyExc_StopIteration);
      goto __pyx_L0;
      __pyx_L1_error:;
      __Pyx_XDECREF(__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_17);
      __Pyx_XDECREF(__pyx_t_19);
      __Pyx_AddTraceback("readFastaMaxQuant", __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_TraceReturn(__pyx_r, 0);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
      __pyx_tuple__11 = PyTuple_Pack(10, __pyx_n_s_filePath, __pyx_n_s_db, __pyx_n_s_parseId, __pyx_n_s_specialAAs, __pyx_n_s_i, __pyx_n_s_hasSpecialAAs, __pyx_n_s_name_2, __pyx_n_s_seq, __pyx_n_s_fp, __pyx_n_s_line); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 80, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_tuple__11);
      __Pyx_GIVEREF(__pyx_tuple__11);
    /* … */
      __Pyx_TraceLine(80,0,__PYX_ERR(0, 80, __pyx_L1_error))
      __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3bin_4readFastaMaxQuant, 0, __pyx_n_s_readFastaMaxQuant, NULL, __pyx_n_s_bin, __pyx_d, ((PyObject *)__pyx_codeobj__3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_CyFunction_InitDefaults(__pyx_t_1, sizeof(__pyx_defaults1), 2)) __PYX_ERR(0, 80, __pyx_L1_error)
      __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3bin_8lambda1, 0, __pyx_n_s_readFastaMaxQuant_locals_lambda, NULL, __pyx_n_s_bin, __pyx_d, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_t_1)->__pyx_arg_parseId = __pyx_t_2;
      __Pyx_GIVEREF(__pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_n_s_R);
      __Pyx_GIVEREF(__pyx_n_s_R);
      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_R);
      __Pyx_INCREF(__pyx_n_s_K);
      __Pyx_GIVEREF(__pyx_n_s_K);
      PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_K);
      __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_t_1)->__pyx_arg_specialAAs = __pyx_t_2;
      __Pyx_GIVEREF(__pyx_t_2);
      __pyx_t_2 = 0;
      __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_1, __pyx_pf_3bin_11__defaults__);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_readFastaMaxQuant, __pyx_t_1) < 0) __PYX_ERR(0, 80, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_bin_digestfast_pyx, __pyx_n_s_readFastaMaxQuant, 80, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(0, 80, __pyx_L1_error)

     081:   cdef int i

    +082:   if db not in ["target", "decoy", "concat"]:

      __Pyx_TraceLine(82,0,__PYX_ERR(0, 82, __pyx_L1_error))
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_db);
      __pyx_t_1 = __pyx_cur_scope->__pyx_v_db;
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_target, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 82, __pyx_L1_error)
      if (__pyx_t_3) {
      } else {
        __pyx_t_2 = __pyx_t_3;
        goto __pyx_L5_bool_binop_done;
      }
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_decoy, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 82, __pyx_L1_error)
      if (__pyx_t_3) {
      } else {
        __pyx_t_2 = __pyx_t_3;
        goto __pyx_L5_bool_binop_done;
      }
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_concat, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 82, __pyx_L1_error)
      __pyx_t_2 = __pyx_t_3;
      __pyx_L5_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
    /* … */
      }

    +083:     sys.exit("unknown db mode: %s" % db)

        __Pyx_TraceLine(83,0,__PYX_ERR(0, 83, __pyx_L1_error))
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_sys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 83, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyString_FormatSafe(__pyx_kp_s_unknown_db_mode_s, __pyx_cur_scope->__pyx_v_db); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 83, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 83, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     084:

    +085:   hasSpecialAAs = len(specialAAs) > 0

      __Pyx_TraceLine(85,0,__PYX_ERR(0, 85, __pyx_L1_error))
      __pyx_t_7 = PyObject_Length(__pyx_cur_scope->__pyx_v_specialAAs); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 85, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_t_7 > 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_v_hasSpecialAAs = __pyx_t_1;
      __pyx_t_1 = 0;

    +086:   name, seq = None, []

      __Pyx_TraceLine(86,0,__PYX_ERR(0, 86, __pyx_L1_error))
      __pyx_t_1 = Py_None;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 86, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_v_name = __pyx_t_1;
      __pyx_t_1 = 0;
      __Pyx_GIVEREF(__pyx_t_5);
      __pyx_cur_scope->__pyx_v_seq = ((PyObject*)__pyx_t_5);
      __pyx_t_5 = 0;

    +087:   with open(filePath, 'r') as fp:

      __Pyx_TraceLine(87,0,__PYX_ERR(0, 87, __pyx_L1_error))
      /*with:*/ {
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_filePath);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_filePath);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_filePath);
        __Pyx_INCREF(__pyx_n_s_r);
        __Pyx_GIVEREF(__pyx_n_s_r);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_r);
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 87, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __pyx_t_5;
        __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        /*try:*/ {
          {
            /*try:*/ {
              __Pyx_GIVEREF(__pyx_t_4);
              __pyx_cur_scope->__pyx_v_fp = __pyx_t_4;
              __pyx_t_4 = 0;
    /* … */
            }
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            goto __pyx_L17_try_end;
            __pyx_L12_error:;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            /*except:*/ {
              __Pyx_AddTraceback("bin.readFastaMaxQuant", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_13, &__pyx_t_19) < 0) __PYX_ERR(0, 87, __pyx_L14_except_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_GOTREF(__pyx_t_19);
              __pyx_t_4 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_13, __pyx_t_19); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L14_except_error)
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_4, NULL);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 87, __pyx_L14_except_error)
              __Pyx_GOTREF(__pyx_t_21);
              __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_21);
              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
              if (__pyx_t_2 < 0) __PYX_ERR(0, 87, __pyx_L14_except_error)
              __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
              if (__pyx_t_3) {
                __Pyx_GIVEREF(__pyx_t_5);
                __Pyx_GIVEREF(__pyx_t_13);
                __Pyx_XGIVEREF(__pyx_t_19);
                __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_13, __pyx_t_19);
                __pyx_t_5 = 0; __pyx_t_13 = 0; __pyx_t_19 = 0;
                __PYX_ERR(0, 87, __pyx_L14_except_error)
              }
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              goto __pyx_L13_exception_handled;
            }
            __pyx_L14_except_error:;
            __Pyx_XGIVEREF(__pyx_t_9);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
            goto __pyx_L1_error;
            __pyx_L13_exception_handled:;
            __Pyx_XGIVEREF(__pyx_t_9);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
            __pyx_L17_try_end:;
          }
        }
        /*finally:*/ {
          /*normal exit:*/{
            if (__pyx_t_8) {
              __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__8, NULL);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 87, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            }
            goto __pyx_L11;
          }
          __pyx_L11:;
        }
        goto __pyx_L38;
        __pyx_L8_error:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L1_error;
        __pyx_L38:;
      }
      CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
    /* … */
      __pyx_tuple__8 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 87, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_tuple__8);
      __Pyx_GIVEREF(__pyx_tuple__8);

    +088:     for line in itertools.chain(fp, [">"]):

              __Pyx_TraceLine(88,0,__PYX_ERR(0, 88, __pyx_L12_error))
              __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_itertools); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L12_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_chain); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 88, __pyx_L12_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L12_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_INCREF(__pyx_kp_s__4);
              __Pyx_GIVEREF(__pyx_kp_s__4);
              PyList_SET_ITEM(__pyx_t_1, 0, __pyx_kp_s__4);
              __pyx_t_6 = NULL;
              __pyx_t_12 = 0;
              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_12 = 1;
                }
              }
              #if CYTHON_FAST_PYCALL
              if (PyFunction_Check(__pyx_t_5)) {
                PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_cur_scope->__pyx_v_fp, __pyx_t_1};
                __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 88, __pyx_L12_error)
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              } else
              #endif
              #if CYTHON_FAST_PYCCALL
              if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
                PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_cur_scope->__pyx_v_fp, __pyx_t_1};
                __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 88, __pyx_L12_error)
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              } else
              #endif
              {
                __pyx_t_13 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 88, __pyx_L12_error)
                __Pyx_GOTREF(__pyx_t_13);
                if (__pyx_t_6) {
                  __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_6); __pyx_t_6 = NULL;
                }
                __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fp);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fp);
                PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_12, __pyx_cur_scope->__pyx_v_fp);
                __Pyx_GIVEREF(__pyx_t_1);
                PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_12, __pyx_t_1);
                __pyx_t_1 = 0;
                __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 88, __pyx_L12_error)
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              }
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
                __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = 0;
                __pyx_t_14 = NULL;
              } else {
                __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 88, __pyx_L12_error)
                __Pyx_GOTREF(__pyx_t_5);
                __pyx_t_14 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 88, __pyx_L12_error)
              }
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              for (;;) {
                if (likely(!__pyx_t_14)) {
                  if (likely(PyList_CheckExact(__pyx_t_5))) {
                    if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_5)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 88, __pyx_L12_error)
                    #else
                    __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 88, __pyx_L12_error)
                    __Pyx_GOTREF(__pyx_t_4);
                    #endif
                  } else {
                    if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 88, __pyx_L12_error)
                    #else
                    __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 88, __pyx_L12_error)
                    __Pyx_GOTREF(__pyx_t_4);
                    #endif
                  }
                } else {
                  __pyx_t_4 = __pyx_t_14(__pyx_t_5);
                  if (unlikely(!__pyx_t_4)) {
                    PyObject* exc_type = PyErr_Occurred();
                    if (exc_type) {
                      if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                      else __PYX_ERR(0, 88, __pyx_L12_error)
                    }
                    break;
                  }
                  __Pyx_GOTREF(__pyx_t_4);
                }
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_line);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_line, __pyx_t_4);
                __Pyx_GIVEREF(__pyx_t_4);
                __pyx_t_4 = 0;
    /* … */
                __Pyx_TraceLine(88,0,__PYX_ERR(0, 88, __pyx_L12_error))
              }
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    +089:       line = line.rstrip()

                __Pyx_TraceLine(89,0,__PYX_ERR(0, 89, __pyx_L12_error))
                __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_line, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 89, __pyx_L12_error)
                __Pyx_GOTREF(__pyx_t_13);
                __pyx_t_1 = NULL;
                if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
                  __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
                  if (likely(__pyx_t_1)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
                    __Pyx_INCREF(__pyx_t_1);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_13, function);
                  }
                }
                __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_13);
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 89, __pyx_L12_error)
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_line);
                __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_line, __pyx_t_4);
                __Pyx_GIVEREF(__pyx_t_4);
                __pyx_t_4 = 0;

    +090:       if line.startswith(">"):

                __Pyx_TraceLine(90,0,__PYX_ERR(0, 90, __pyx_L12_error))
                __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_line, __pyx_n_s_startswith); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 90, __pyx_L12_error)
                __Pyx_GOTREF(__pyx_t_13);
                __pyx_t_1 = NULL;
                if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
                  __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
                  if (likely(__pyx_t_1)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
                    __Pyx_INCREF(__pyx_t_1);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_13, function);
                  }
                }
                __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_1, __pyx_kp_s__4) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__4);
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L12_error)
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 90, __pyx_L12_error)
                __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                if (__pyx_t_3) {
    /* … */
                  goto __pyx_L20;
                }

    +091:         if name:

                  __Pyx_TraceLine(91,0,__PYX_ERR(0, 91, __pyx_L12_error))
                  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_name); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 91, __pyx_L12_error)
                  if (__pyx_t_3) {
    /* … */
                  }

    +092:           if db in ["target", "concat"]:

                    __Pyx_TraceLine(92,0,__PYX_ERR(0, 92, __pyx_L12_error))
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_db);
                    __pyx_t_4 = __pyx_cur_scope->__pyx_v_db;
                    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_target, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 92, __pyx_L12_error)
                    if (!__pyx_t_2) {
                    } else {
                      __pyx_t_3 = __pyx_t_2;
                      goto __pyx_L23_bool_binop_done;
                    }
                    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_concat, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 92, __pyx_L12_error)
                    __pyx_t_3 = __pyx_t_2;
                    __pyx_L23_bool_binop_done:;
                    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                    __pyx_t_2 = (__pyx_t_3 != 0);
                    if (__pyx_t_2) {
    /* … */
                    }

    +093:             yield (name, "".join(seq))

                      __Pyx_TraceLine(93,0,__PYX_ERR(0, 93, __pyx_L12_error))
                      __pyx_t_4 = __Pyx_PyString_Join(__pyx_kp_s__5, __pyx_cur_scope->__pyx_v_seq); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L12_error)
                      __Pyx_GOTREF(__pyx_t_4);
                      __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 93, __pyx_L12_error)
                      __Pyx_GOTREF(__pyx_t_13);
                      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_name);
                      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_name);
                      PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_cur_scope->__pyx_v_name);
                      __Pyx_GIVEREF(__pyx_t_4);
                      PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_4);
                      __pyx_t_4 = 0;
                      __pyx_r = __pyx_t_13;
                      __pyx_t_13 = 0;
                      __Pyx_XGIVEREF(__pyx_t_5);
                      __pyx_cur_scope->__pyx_t_0 = __pyx_t_5;
                      __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
                      __Pyx_XGIVEREF(__pyx_t_8);
                      __pyx_cur_scope->__pyx_t_2 = __pyx_t_8;
                      __Pyx_XGIVEREF(__pyx_t_9);
                      __pyx_cur_scope->__pyx_t_3 = __pyx_t_9;
                      __Pyx_XGIVEREF(__pyx_t_10);
                      __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
                      __Pyx_XGIVEREF(__pyx_t_11);
                      __pyx_cur_scope->__pyx_t_5 = __pyx_t_11;
                      __pyx_cur_scope->__pyx_t_6 = __pyx_t_14;
                      __Pyx_XGIVEREF(__pyx_r);
                      __Pyx_TraceReturn(__pyx_r, 0);
                      __Pyx_RefNannyFinishContext();
                      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                      /* return from generator, yielding value */
                      __pyx_generator->resume_label = 1;
                      return __pyx_r;
                      __pyx_L25_resume_from_yield:;
                      __pyx_t_5 = __pyx_cur_scope->__pyx_t_0;
                      __pyx_cur_scope->__pyx_t_0 = 0;
                      __Pyx_XGOTREF(__pyx_t_5);
                      __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
                      __pyx_t_8 = __pyx_cur_scope->__pyx_t_2;
                      __pyx_cur_scope->__pyx_t_2 = 0;
                      __Pyx_XGOTREF(__pyx_t_8);
                      __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
                      __pyx_cur_scope->__pyx_t_3 = 0;
                      __Pyx_XGOTREF(__pyx_t_9);
                      __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
                      __pyx_cur_scope->__pyx_t_4 = 0;
                      __Pyx_XGOTREF(__pyx_t_10);
                      __pyx_t_11 = __pyx_cur_scope->__pyx_t_5;
                      __pyx_cur_scope->__pyx_t_5 = 0;
                      __Pyx_XGOTREF(__pyx_t_11);
                      __pyx_t_14 = __pyx_cur_scope->__pyx_t_6;
                      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 93, __pyx_L12_error)

     094:

    +095:           if db in ["decoy", "concat"]:

                    __Pyx_TraceLine(95,0,__PYX_ERR(0, 95, __pyx_L12_error))
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_db);
                    __pyx_t_13 = __pyx_cur_scope->__pyx_v_db;
                    __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_13, __pyx_n_s_decoy, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 95, __pyx_L12_error)
                    if (!__pyx_t_3) {
                    } else {
                      __pyx_t_2 = __pyx_t_3;
                      goto __pyx_L27_bool_binop_done;
                    }
                    __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_13, __pyx_n_s_concat, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 95, __pyx_L12_error)
                    __pyx_t_2 = __pyx_t_3;
                    __pyx_L27_bool_binop_done:;
                    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                    __pyx_t_3 = (__pyx_t_2 != 0);
                    if (__pyx_t_3) {
    /* … */
                    }

    +096:             seq = list("".join(seq)[::-1])

                      __Pyx_TraceLine(96,0,__PYX_ERR(0, 96, __pyx_L12_error))
                      __pyx_t_13 = __Pyx_PyString_Join(__pyx_kp_s__5, __pyx_cur_scope->__pyx_v_seq); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 96, __pyx_L12_error)
                      __Pyx_GOTREF(__pyx_t_13);
                      __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_slice__6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 96, __pyx_L12_error)
                      __Pyx_GOTREF(__pyx_t_4);
                      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                      __pyx_t_13 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 96, __pyx_L12_error)
                      __Pyx_GOTREF(__pyx_t_13);
                      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_seq);
                      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_seq, ((PyObject*)__pyx_t_13));
                      __Pyx_GIVEREF(__pyx_t_13);
                      __pyx_t_13 = 0;
    /* … */
      __pyx_slice__6 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__6)) __PYX_ERR(0, 96, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_slice__6);
      __Pyx_GIVEREF(__pyx_slice__6);

    +097:             if hasSpecialAAs:

                      __Pyx_TraceLine(97,0,__PYX_ERR(0, 97, __pyx_L12_error))
                      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_hasSpecialAAs); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 97, __pyx_L12_error)
                      if (__pyx_t_3) {
    /* … */
                      }

    +098:               for i in range(1, len(seq)):

                        __Pyx_TraceLine(98,0,__PYX_ERR(0, 98, __pyx_L12_error))
                        __pyx_t_15 = PyList_GET_SIZE(__pyx_cur_scope->__pyx_v_seq); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 98, __pyx_L12_error)
                        __pyx_t_16 = __pyx_t_15;
                        for (__pyx_t_12 = 1; __pyx_t_12 < __pyx_t_16; __pyx_t_12+=1) {
                          __pyx_cur_scope->__pyx_v_i = __pyx_t_12;

    +099:                 if seq[i] in specialAAs:

                          __Pyx_TraceLine(99,0,__PYX_ERR(0, 99, __pyx_L12_error))
                          __pyx_t_13 = __Pyx_GetItemInt_List(__pyx_cur_scope->__pyx_v_seq, __pyx_cur_scope->__pyx_v_i, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 99, __pyx_L12_error)
                          __Pyx_GOTREF(__pyx_t_13);
                          __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_t_13, __pyx_cur_scope->__pyx_v_specialAAs, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 99, __pyx_L12_error)
                          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                          __pyx_t_2 = (__pyx_t_3 != 0);
                          if (__pyx_t_2) {
    /* … */
                          }
                        }

    +100:                   swapPositions(seq, i, i-1)

                            __Pyx_TraceLine(100,0,__PYX_ERR(0, 100, __pyx_L12_error))
                            __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_swapPositions); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 100, __pyx_L12_error)
                            __Pyx_GOTREF(__pyx_t_4);
                            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L12_error)
                            __Pyx_GOTREF(__pyx_t_1);
                            __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_cur_scope->__pyx_v_i - 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 100, __pyx_L12_error)
                            __Pyx_GOTREF(__pyx_t_6);
                            __pyx_t_17 = NULL;
                            __pyx_t_18 = 0;
                            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
                              __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_4);
                              if (likely(__pyx_t_17)) {
                                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
                                __Pyx_INCREF(__pyx_t_17);
                                __Pyx_INCREF(function);
                                __Pyx_DECREF_SET(__pyx_t_4, function);
                                __pyx_t_18 = 1;
                              }
                            }
                            #if CYTHON_FAST_PYCALL
                            if (PyFunction_Check(__pyx_t_4)) {
                              PyObject *__pyx_temp[4] = {__pyx_t_17, __pyx_cur_scope->__pyx_v_seq, __pyx_t_1, __pyx_t_6};
                              __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_18, 3+__pyx_t_18); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 100, __pyx_L12_error)
                              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                              __Pyx_GOTREF(__pyx_t_13);
                              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                            } else
                            #endif
                            #if CYTHON_FAST_PYCCALL
                            if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
                              PyObject *__pyx_temp[4] = {__pyx_t_17, __pyx_cur_scope->__pyx_v_seq, __pyx_t_1, __pyx_t_6};
                              __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_18, 3+__pyx_t_18); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 100, __pyx_L12_error)
                              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                              __Pyx_GOTREF(__pyx_t_13);
                              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                            } else
                            #endif
                            {
                              __pyx_t_19 = PyTuple_New(3+__pyx_t_18); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 100, __pyx_L12_error)
                              __Pyx_GOTREF(__pyx_t_19);
                              if (__pyx_t_17) {
                                __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_17); __pyx_t_17 = NULL;
                              }
                              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_seq);
                              __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_seq);
                              PyTuple_SET_ITEM(__pyx_t_19, 0+__pyx_t_18, __pyx_cur_scope->__pyx_v_seq);
                              __Pyx_GIVEREF(__pyx_t_1);
                              PyTuple_SET_ITEM(__pyx_t_19, 1+__pyx_t_18, __pyx_t_1);
                              __Pyx_GIVEREF(__pyx_t_6);
                              PyTuple_SET_ITEM(__pyx_t_19, 2+__pyx_t_18, __pyx_t_6);
                              __pyx_t_1 = 0;
                              __pyx_t_6 = 0;
                              __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_19, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 100, __pyx_L12_error)
                              __Pyx_GOTREF(__pyx_t_13);
                              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                            }
                            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;

    +101:             yield ("REV__" + name, "".join(seq))

                      __Pyx_TraceLine(101,0,__PYX_ERR(0, 101, __pyx_L12_error))
                      __pyx_t_13 = PyNumber_Add(__pyx_n_s_REV, __pyx_cur_scope->__pyx_v_name); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 101, __pyx_L12_error)
                      __Pyx_GOTREF(__pyx_t_13);
                      __pyx_t_4 = __Pyx_PyString_Join(__pyx_kp_s__5, __pyx_cur_scope->__pyx_v_seq); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 101, __pyx_L12_error)
                      __Pyx_GOTREF(__pyx_t_4);
                      __pyx_t_19 = PyTuple_New(2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 101, __pyx_L12_error)
                      __Pyx_GOTREF(__pyx_t_19);
                      __Pyx_GIVEREF(__pyx_t_13);
                      PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_13);
                      __Pyx_GIVEREF(__pyx_t_4);
                      PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_t_4);
                      __pyx_t_13 = 0;
                      __pyx_t_4 = 0;
                      __pyx_r = __pyx_t_19;
                      __pyx_t_19 = 0;
                      __Pyx_XGIVEREF(__pyx_t_5);
                      __pyx_cur_scope->__pyx_t_0 = __pyx_t_5;
                      __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
                      __Pyx_XGIVEREF(__pyx_t_8);
                      __pyx_cur_scope->__pyx_t_2 = __pyx_t_8;
                      __Pyx_XGIVEREF(__pyx_t_9);
                      __pyx_cur_scope->__pyx_t_3 = __pyx_t_9;
                      __Pyx_XGIVEREF(__pyx_t_10);
                      __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
                      __Pyx_XGIVEREF(__pyx_t_11);
                      __pyx_cur_scope->__pyx_t_5 = __pyx_t_11;
                      __pyx_cur_scope->__pyx_t_6 = __pyx_t_14;
                      __Pyx_XGIVEREF(__pyx_r);
                      __Pyx_TraceReturn(__pyx_r, 0);
                      __Pyx_RefNannyFinishContext();
                      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                      /* return from generator, yielding value */
                      __pyx_generator->resume_label = 2;
                      return __pyx_r;
                      __pyx_L33_resume_from_yield:;
                      __pyx_t_5 = __pyx_cur_scope->__pyx_t_0;
                      __pyx_cur_scope->__pyx_t_0 = 0;
                      __Pyx_XGOTREF(__pyx_t_5);
                      __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
                      __pyx_t_8 = __pyx_cur_scope->__pyx_t_2;
                      __pyx_cur_scope->__pyx_t_2 = 0;
                      __Pyx_XGOTREF(__pyx_t_8);
                      __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
                      __pyx_cur_scope->__pyx_t_3 = 0;
                      __Pyx_XGOTREF(__pyx_t_9);
                      __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
                      __pyx_cur_scope->__pyx_t_4 = 0;
                      __Pyx_XGOTREF(__pyx_t_10);
                      __pyx_t_11 = __pyx_cur_scope->__pyx_t_5;
                      __pyx_cur_scope->__pyx_t_5 = 0;
                      __Pyx_XGOTREF(__pyx_t_11);
                      __pyx_t_14 = __pyx_cur_scope->__pyx_t_6;
                      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 101, __pyx_L12_error)

     102:

    +103:         if len(line) > 1:

                  __Pyx_TraceLine(103,0,__PYX_ERR(0, 103, __pyx_L12_error))
                  __pyx_t_15 = PyObject_Length(__pyx_cur_scope->__pyx_v_line); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 103, __pyx_L12_error)
                  __pyx_t_2 = ((__pyx_t_15 > 1) != 0);
                  if (__pyx_t_2) {
    /* … */
                  }

    +104:           name, seq = parseId(line[1:]), []

                    __Pyx_TraceLine(104,0,__PYX_ERR(0, 104, __pyx_L12_error))
                    __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_cur_scope->__pyx_v_line, 1, 0, NULL, NULL, &__pyx_slice__7, 1, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L12_error)
                    __Pyx_GOTREF(__pyx_t_4);
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_parseId);
                    __pyx_t_13 = __pyx_cur_scope->__pyx_v_parseId; __pyx_t_6 = NULL;
                    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
                      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_13);
                      if (likely(__pyx_t_6)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
                        __Pyx_INCREF(__pyx_t_6);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_13, function);
                      }
                    }
                    __pyx_t_19 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_4);
                    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                    if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 104, __pyx_L12_error)
                    __Pyx_GOTREF(__pyx_t_19);
                    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                    __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 104, __pyx_L12_error)
                    __Pyx_GOTREF(__pyx_t_13);
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_name);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_19);
                    __Pyx_GIVEREF(__pyx_t_19);
                    __pyx_t_19 = 0;
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_seq);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_seq, ((PyObject*)__pyx_t_13));
                    __Pyx_GIVEREF(__pyx_t_13);
                    __pyx_t_13 = 0;
    /* … */
      __pyx_slice__7 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__7)) __PYX_ERR(0, 104, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_slice__7);
      __Pyx_GIVEREF(__pyx_slice__7);

    +105:       else: seq.append(line)

                __Pyx_TraceLine(105,0,__PYX_ERR(0, 105, __pyx_L12_error))
                /*else*/ {
                  __pyx_t_20 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_seq, __pyx_cur_scope->__pyx_v_line); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 105, __pyx_L12_error)
                }
                __pyx_L20:;

     106:

    +107: def swapPositions(seq, pos1, pos2):

    /* Python wrapper */
    static PyObject *__pyx_pw_3bin_7swapPositions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    static PyMethodDef __pyx_mdef_3bin_7swapPositions = {"swapPositions", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3bin_7swapPositions, METH_VARARGS|METH_KEYWORDS, 0};
    static PyObject *__pyx_pw_3bin_7swapPositions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
      PyObject *__pyx_v_seq = 0;
      PyObject *__pyx_v_pos1 = 0;
      PyObject *__pyx_v_pos2 = 0;
      PyObject *__pyx_r = 0;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("swapPositions (wrapper)", 0);
      {
        static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seq,&__pyx_n_s_pos1,&__pyx_n_s_pos2,0};
        PyObject* values[3] = {0,0,0};
        if (unlikely(__pyx_kwds)) {
          Py_ssize_t kw_args;
          const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
          switch (pos_args) {
            case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
            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_seq)) != 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_pos1)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("swapPositions", 1, 3, 3, 1); __PYX_ERR(0, 107, __pyx_L3_error)
            }
            CYTHON_FALLTHROUGH;
            case  2:
            if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pos2)) != 0)) kw_args--;
            else {
              __Pyx_RaiseArgtupleInvalid("swapPositions", 1, 3, 3, 2); __PYX_ERR(0, 107, __pyx_L3_error)
            }
          }
          if (unlikely(kw_args > 0)) {
            if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "swapPositions") < 0)) __PYX_ERR(0, 107, __pyx_L3_error)
          }
        } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
          goto __pyx_L5_argtuple_error;
        } else {
          values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
          values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
          values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        }
        __pyx_v_seq = values[0];
        __pyx_v_pos1 = values[1];
        __pyx_v_pos2 = values[2];
      }
      goto __pyx_L4_argument_unpacking_done;
      __pyx_L5_argtuple_error:;
      __Pyx_RaiseArgtupleInvalid("swapPositions", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 107, __pyx_L3_error)
      __pyx_L3_error:;
      __Pyx_AddTraceback("bin.swapPositions", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __Pyx_RefNannyFinishContext();
      return NULL;
      __pyx_L4_argument_unpacking_done:;
      __pyx_r = __pyx_pf_3bin_6swapPositions(__pyx_self, __pyx_v_seq, __pyx_v_pos1, __pyx_v_pos2);

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

    static PyObject *__pyx_pf_3bin_6swapPositions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seq, PyObject *__pyx_v_pos1, PyObject *__pyx_v_pos2) {
      PyObject *__pyx_r = NULL;
      __Pyx_TraceDeclarations
      __Pyx_TraceFrameInit(__pyx_codeobj__9)
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("swapPositions", 0);
      __Pyx_TraceCall("swapPositions", __pyx_f[0], 107, 0, __PYX_ERR(0, 107, __pyx_L1_error));
    /* … */
      /* 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_AddTraceback("bin.swapPositions", __pyx_clineno, __pyx_lineno, __pyx_filename);
      __pyx_r = NULL;
      __pyx_L0:;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_TraceReturn(__pyx_r, 0);
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }
    /* … */
      __pyx_tuple__12 = PyTuple_Pack(3, __pyx_n_s_seq, __pyx_n_s_pos1, __pyx_n_s_pos2); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 107, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_tuple__12);
      __Pyx_GIVEREF(__pyx_tuple__12);
    /* … */
      __Pyx_TraceLine(107,0,__PYX_ERR(0, 107, __pyx_L1_error))
      __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3bin_7swapPositions, 0, __pyx_n_s_swapPositions, NULL, __pyx_n_s_bin, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 107, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_swapPositions, __pyx_t_1) < 0) __PYX_ERR(0, 107, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    +108:   seq[pos1], seq[pos2] = seq[pos2], seq[pos1]

      __Pyx_TraceLine(108,0,__PYX_ERR(0, 108, __pyx_L1_error))
      __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_seq, __pyx_v_pos2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_seq, __pyx_v_pos1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(PyObject_SetItem(__pyx_v_seq, __pyx_v_pos1, __pyx_t_1) < 0)) __PYX_ERR(0, 108, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(PyObject_SetItem(__pyx_v_seq, __pyx_v_pos2, __pyx_t_2) < 0)) __PYX_ERR(0, 108, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;