Generated by Cython 3.2.4

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

+001: cimport cython
  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test_2, __pyx_t_4) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 002: cimport numpy as cnp
+003: import numpy as np
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_np, __pyx_t_4) < (0)) __PYX_ERR(0, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 004: from libc.math cimport pow, exp, sqrt
+005: from scipy.sparse import lil_matrix
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_lil_matrix};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_scipy_sparse, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
  }
  __pyx_t_4 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_4);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_lil_matrix};
    __pyx_t_9 = 0; {
      __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_5) < (0)) __PYX_ERR(0, 5, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+006: from functools import wraps
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_wraps};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_functools, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error)
  }
  __pyx_t_4 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_4);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_wraps};
    __pyx_t_9 = 0; {
      __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_5) < (0)) __PYX_ERR(0, 6, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+007: cnp.import_array()
  __pyx_t_10 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7, __pyx_L1_error)
 008: from cpython cimport bool
+009: from scipy.sparse.linalg import eigsh, spsolve
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_eigsh,__pyx_mstate_global->__pyx_n_u_spsolve};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_scipy_sparse_linalg, __pyx_imported_names, 2, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error)
  }
  __pyx_t_4 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_4);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_eigsh,__pyx_mstate_global->__pyx_n_u_spsolve};
    for (__pyx_t_9=0; __pyx_t_9 < 2; __pyx_t_9++) {
      __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_5) < (0)) __PYX_ERR(0, 9, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 010: 
 011: ctypedef fused CMat:
 012:     cnp.ndarray[cnp.complex128_t,ndim=3]
 013:     cnp.ndarray[cnp.float64_t,ndim=3]
 014: 
 015: ctypedef fused scalar_var:
 016:     cnp.ndarray[cnp.complex128_t,ndim=1]
 017:     cnp.ndarray[cnp.float64_t,ndim=1]
 018: 
 019: 
 020: #@cython.boundscheck(False)
 021: #@cython.wraparound(False)
 022: #@cython.cdivision(True)
+023: cpdef assemble_stiffness_matrix(
/* Python wrapper */
static PyObject *__pyx_pw_9pynitride_4core_3fem_1assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
PyDoc_STRVAR(__pyx_doc_9pynitride_4core_3fem_assemble_stiffness_matrix, " Assemble a stiffness matrix from the coefficients of the differential equation.\n    \n    Cythonized assembly method, call as `assemble_stiffness_matrix(C0, Cl, Cr, C2, dzn, dirichelet1, dirichelet2)`.\n    \n    For the mathematics/definitions of the :math:`C` terms, see :ref:`FEM`.\n    All non-scalar arguments should be defined on the mid mesh,\n    and all the :math:`C` matrices should be three-dimensional, even if they are just scalars.\n    \n    If `Cl` and `Cr` are supplied as None, they will be ignored and the matrix will be of dtype double.\n    If `Cl` and `Cr` are supplied, the matrix will be of dtype complex.\n    \n    Args:\n        C0,Cl,Cr,C2: material-dependent differential equation coefficients\n        dzn: the spacings between mesh nodes\n        dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.\n    \n    Returns:\n        A stiffness matrix in sparse CSC form\n    ");
static PyMethodDef __pyx_mdef_9pynitride_4core_3fem_1assemble_stiffness_matrix = {"assemble_stiffness_matrix", (PyCFunction)(void(*)(void))(PyCFunctionWithKeywords)__pyx_pw_9pynitride_4core_3fem_1assemble_stiffness_matrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9pynitride_4core_3fem_assemble_stiffness_matrix};
static PyObject *__pyx_pw_9pynitride_4core_3fem_1assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_signatures = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;
  CYTHON_UNUSED PyObject *__pyx_v__fused_sigindex = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_signatures,&__pyx_mstate_global->__pyx_n_u_args,&__pyx_mstate_global->__pyx_n_u_kwargs,&__pyx_mstate_global->__pyx_n_u_defaults,&__pyx_mstate_global->__pyx_n_u_fused_sigindex,0};
  PyObject* values[5] = {0,0,0,0,0};
    struct __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(struct __pyx_defaults, __pyx_self);
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 23, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_fused_cpdef", 0) < (0)) __PYX_ERR(0, 23, __pyx_L3_error)
      if (!values[4]) values[4] = __Pyx_NewRef(__pyx_dynamic_args->arg0);
      for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, i); __PYX_ERR(0, 23, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 23, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[4]) values[4] = __Pyx_NewRef(__pyx_dynamic_args->arg0);
    }
    __pyx_v_signatures = values[0];
    __pyx_v_args = values[1];
    __pyx_v_kwargs = values[2];
    __pyx_v_defaults = values[3];
    __pyx_v__fused_sigindex = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 23, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9pynitride_4core_3fem_assemble_stiffness_matrix(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults, __pyx_v__fused_sigindex);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9pynitride_4core_3fem_assemble_stiffness_matrix(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults, CYTHON_UNUSED PyObject *__pyx_v__fused_sigindex) {
  PyTypeObject *__pyx_v_ndarray = 0;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_dest_sig0 = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[39]))
  __Pyx_TraceStartFunc("assemble_stiffness_matrix", __pyx_f[0], 23, 0, 0, 0, __PYX_ERR(0, 23, __pyx_L1_error));
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_t_2 = (__pyx_v_kwargs != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 23, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
  }
  __pyx_t_4 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  if (unlikely(__pyx_v_args == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 23, __pyx_L1_error)
  __pyx_t_1 = (0 < __pyx_t_5);
  if (__pyx_t_1) {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 23, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_v_args), 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_arg = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L6;
  }
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L7_bool_binop_done;
  }
  if (unlikely(__pyx_v_kwargs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_mstate_global->__pyx_n_u_C0, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 23, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (likely(__pyx_t_1)) {
    if (unlikely(__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 23, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_mstate_global->__pyx_n_u_C0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_arg = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L6;
  }
  /*else*/ {
    __pyx_t_6 = NULL;
    __pyx_t_7 = __Pyx_PyUnicode_From_long(5, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 23, __pyx_L1_error)
    }
    __pyx_t_5 = __Pyx_PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 23, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_5, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9[0] = __pyx_mstate_global->__pyx_kp_u_Expected_at_least;
    __pyx_t_9[1] = __pyx_t_7;
    __pyx_t_9[2] = __pyx_mstate_global->__pyx_kp_u_arguments_got;
    __pyx_t_9[3] = __pyx_t_8;
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 16 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8), 127);
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_11 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_10};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_L6:;
  __pyx_t_4 = __pyx_ff_map_fused_c2012c_2_2_5numpy_PyArrayObject__ptr__and_5numpy_PyArrayObject__ptr(__pyx_v_arg, __pyx_v_ndarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_dest_sig0 = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_ff_match_signatures_single(((PyObject*)__pyx_v_signatures), __pyx_v_dest_sig0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  __Pyx_TraceReturnValue(__pyx_r, 0, 0, __PYX_ERR(0, 23, __pyx_L1_error));
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 23, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ndarray);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_dest_sig0);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pw_9pynitride_4core_3fem_11__pyx_fuse_0assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_9pynitride_4core_3fem_1assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_fuse_0__pyx_f_9pynitride_4core_3fem_assemble_stiffness_matrix(PyArrayObject *__pyx_v_C0, PyArrayObject *__pyx_v_Cl, PyArrayObject *__pyx_v_Cr, PyArrayObject *__pyx_v_C2, PyArrayObject *__pyx_v_dzn, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_fuse_0__pyx_opt_args_9pynitride_4core_3fem_assemble_stiffness_matrix *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C2.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 23, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.assemble_stiffness_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C2.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_rinds);
  __Pyx_XDECREF(__pyx_v_rdata);
  __Pyx_XDECREF((PyObject *)__pyx_v_complex);
  __Pyx_XDECREF(__pyx_v_lil);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9pynitride_4core_3fem_11__pyx_fuse_0assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_0__pyx_mdef_9pynitride_4core_3fem_11__pyx_fuse_0assemble_stiffness_matrix = {"__pyx_fuse_0assemble_stiffness_matrix", (PyCFunction)(void(*)(void))(PyCFunctionWithKeywords)__pyx_pw_9pynitride_4core_3fem_11__pyx_fuse_0assemble_stiffness_matrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9pynitride_4core_3fem_assemble_stiffness_matrix};
static PyObject *__pyx_pw_9pynitride_4core_3fem_11__pyx_fuse_0assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_C0 = 0;
  PyArrayObject *__pyx_v_Cl = 0;
  PyArrayObject *__pyx_v_Cr = 0;
  PyArrayObject *__pyx_v_C2 = 0;
  PyArrayObject *__pyx_v_dzn = 0;
  PyLongObject *__pyx_v_dirichelet1 = 0;
  PyLongObject *__pyx_v_dirichelet2 = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_0assemble_stiffness_matrix (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_C0,&__pyx_mstate_global->__pyx_n_u_Cl,&__pyx_mstate_global->__pyx_n_u_Cr,&__pyx_mstate_global->__pyx_n_u_C2,&__pyx_mstate_global->__pyx_n_u_dzn,&__pyx_mstate_global->__pyx_n_u_dirichelet1,&__pyx_mstate_global->__pyx_n_u_dirichelet2,0};
  PyObject* values[7] = {0,0,0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 23, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  7:
        values[6] = __Pyx_ArgRef_VARARGS(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_VARARGS(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_fuse_0assemble_stiffness_matrix", 0) < (0)) __PYX_ERR(0, 23, __pyx_L3_error)
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9pynitride_4core_3fem_10__pyx_fuse_0assemble_stiffness_matrix(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_C0, PyArrayObject *__pyx_v_Cl, PyArrayObject *__pyx_v_Cr, PyArrayObject *__pyx_v_C2, PyArrayObject *__pyx_v_dzn, PyLongObject *__pyx_v_dirichelet1, PyLongObject *__pyx_v_dirichelet2) {
  __Pyx_LocalBuf_ND __pyx_pybuffernd_C0;
  __Pyx_Buffer __pyx_pybuffer_C0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_C2;
  __Pyx_Buffer __pyx_pybuffer_C2;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Cl;
  __Pyx_Buffer __pyx_pybuffer_Cl;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Cr;
  __Pyx_Buffer __pyx_pybuffer_Cr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dzn;
  __Pyx_Buffer __pyx_pybuffer_dzn;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40]))
  __Pyx_TraceStartFunc("__pyx_fuse_0assemble_stiffness_matrix (wrapper)", __pyx_f[0], 23, 0, 0, 0, __PYX_ERR(0, 23, __pyx_L1_error));
  __pyx_pybuffer_C0.pybuffer.buf = NULL;
  __pyx_pybuffer_C0.refcount = 0;
  __pyx_pybuffernd_C0.data = NULL;
  __pyx_pybuffernd_C0.rcbuffer = &__pyx_pybuffer_C0;
  __pyx_pybuffer_Cl.pybuffer.buf = NULL;
  __pyx_pybuffer_Cl.refcount = 0;
  __pyx_pybuffernd_Cl.data = NULL;
  __pyx_pybuffernd_Cl.rcbuffer = &__pyx_pybuffer_Cl;
  __pyx_pybuffer_Cr.pybuffer.buf = NULL;
  __pyx_pybuffer_Cr.refcount = 0;
  __pyx_pybuffernd_Cr.data = NULL;
  __pyx_pybuffernd_Cr.rcbuffer = &__pyx_pybuffer_Cr;
  __pyx_pybuffer_C2.pybuffer.buf = NULL;
  __pyx_pybuffer_C2.refcount = 0;
  __pyx_pybuffernd_C2.data = NULL;
  __pyx_pybuffernd_C2.rcbuffer = &__pyx_pybuffer_C2;
  __pyx_pybuffer_dzn.pybuffer.buf = NULL;
  __pyx_pybuffer_dzn.refcount = 0;
  __pyx_pybuffernd_dzn.data = NULL;
  __pyx_pybuffernd_dzn.rcbuffer = &__pyx_pybuffer_dzn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_C0.rcbuffer->pybuffer, (PyObject*)__pyx_v_C0, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_C0.diminfo[0].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_C0.diminfo[0].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_C0.diminfo[1].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_C0.diminfo[1].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_C0.diminfo[2].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_C0.diminfo[2].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer, (PyObject*)__pyx_v_Cl, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_Cl.diminfo[0].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Cl.diminfo[0].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Cl.diminfo[1].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Cl.diminfo[1].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_Cl.diminfo[2].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_Cl.diminfo[2].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer, (PyObject*)__pyx_v_Cr, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_Cr.diminfo[0].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Cr.diminfo[0].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Cr.diminfo[1].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Cr.diminfo[1].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_Cr.diminfo[2].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_Cr.diminfo[2].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_C2.rcbuffer->pybuffer, (PyObject*)__pyx_v_C2, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_C2.diminfo[0].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_C2.diminfo[0].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_C2.diminfo[1].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_C2.diminfo[1].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_C2.diminfo[2].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_C2.diminfo[2].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer, (PyObject*)__pyx_v_dzn, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_dzn.diminfo[0].strides = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dzn.diminfo[0].shape = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.shape[0];
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.dirichelet1 = __pyx_v_dirichelet1;
  __pyx_t_2.dirichelet2 = __pyx_v_dirichelet2;
  __pyx_t_1 = __pyx_fuse_0__pyx_f_9pynitride_4core_3fem_assemble_stiffness_matrix(__pyx_v_C0, __pyx_v_Cl, __pyx_v_Cr, __pyx_v_C2, __pyx_v_dzn, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C2.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 23, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fuse_0assemble_stiffness_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C2.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pw_9pynitride_4core_3fem_13__pyx_fuse_1assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_9pynitride_4core_3fem_1assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_fuse_1__pyx_f_9pynitride_4core_3fem_assemble_stiffness_matrix(PyArrayObject *__pyx_v_C0, PyArrayObject *__pyx_v_Cl, PyArrayObject *__pyx_v_Cr, PyArrayObject *__pyx_v_C2, PyArrayObject *__pyx_v_dzn, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_fuse_1__pyx_opt_args_9pynitride_4core_3fem_assemble_stiffness_matrix *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C2.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 23, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.assemble_stiffness_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C2.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_rinds);
  __Pyx_XDECREF(__pyx_v_rdata);
  __Pyx_XDECREF((PyObject *)__pyx_v_complex);
  __Pyx_XDECREF(__pyx_v_lil);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9pynitride_4core_3fem_13__pyx_fuse_1assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_1__pyx_mdef_9pynitride_4core_3fem_13__pyx_fuse_1assemble_stiffness_matrix = {"__pyx_fuse_1assemble_stiffness_matrix", (PyCFunction)(void(*)(void))(PyCFunctionWithKeywords)__pyx_pw_9pynitride_4core_3fem_13__pyx_fuse_1assemble_stiffness_matrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9pynitride_4core_3fem_assemble_stiffness_matrix};
static PyObject *__pyx_pw_9pynitride_4core_3fem_13__pyx_fuse_1assemble_stiffness_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_C0 = 0;
  PyArrayObject *__pyx_v_Cl = 0;
  PyArrayObject *__pyx_v_Cr = 0;
  PyArrayObject *__pyx_v_C2 = 0;
  PyArrayObject *__pyx_v_dzn = 0;
  PyLongObject *__pyx_v_dirichelet1 = 0;
  PyLongObject *__pyx_v_dirichelet2 = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_1assemble_stiffness_matrix (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_C0,&__pyx_mstate_global->__pyx_n_u_Cl,&__pyx_mstate_global->__pyx_n_u_Cr,&__pyx_mstate_global->__pyx_n_u_C2,&__pyx_mstate_global->__pyx_n_u_dzn,&__pyx_mstate_global->__pyx_n_u_dirichelet1,&__pyx_mstate_global->__pyx_n_u_dirichelet2,0};
  PyObject* values[7] = {0,0,0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 23, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  7:
        values[6] = __Pyx_ArgRef_VARARGS(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_VARARGS(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_fuse_1assemble_stiffness_matrix", 0) < (0)) __PYX_ERR(0, 23, __pyx_L3_error)
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9pynitride_4core_3fem_12__pyx_fuse_1assemble_stiffness_matrix(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_C0, PyArrayObject *__pyx_v_Cl, PyArrayObject *__pyx_v_Cr, PyArrayObject *__pyx_v_C2, PyArrayObject *__pyx_v_dzn, PyLongObject *__pyx_v_dirichelet1, PyLongObject *__pyx_v_dirichelet2) {
  __Pyx_LocalBuf_ND __pyx_pybuffernd_C0;
  __Pyx_Buffer __pyx_pybuffer_C0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_C2;
  __Pyx_Buffer __pyx_pybuffer_C2;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Cl;
  __Pyx_Buffer __pyx_pybuffer_Cl;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Cr;
  __Pyx_Buffer __pyx_pybuffer_Cr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dzn;
  __Pyx_Buffer __pyx_pybuffer_dzn;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41]))
  __Pyx_TraceStartFunc("__pyx_fuse_1assemble_stiffness_matrix (wrapper)", __pyx_f[0], 23, 0, 0, 0, __PYX_ERR(0, 23, __pyx_L1_error));
  __pyx_pybuffer_C0.pybuffer.buf = NULL;
  __pyx_pybuffer_C0.refcount = 0;
  __pyx_pybuffernd_C0.data = NULL;
  __pyx_pybuffernd_C0.rcbuffer = &__pyx_pybuffer_C0;
  __pyx_pybuffer_Cl.pybuffer.buf = NULL;
  __pyx_pybuffer_Cl.refcount = 0;
  __pyx_pybuffernd_Cl.data = NULL;
  __pyx_pybuffernd_Cl.rcbuffer = &__pyx_pybuffer_Cl;
  __pyx_pybuffer_Cr.pybuffer.buf = NULL;
  __pyx_pybuffer_Cr.refcount = 0;
  __pyx_pybuffernd_Cr.data = NULL;
  __pyx_pybuffernd_Cr.rcbuffer = &__pyx_pybuffer_Cr;
  __pyx_pybuffer_C2.pybuffer.buf = NULL;
  __pyx_pybuffer_C2.refcount = 0;
  __pyx_pybuffernd_C2.data = NULL;
  __pyx_pybuffernd_C2.rcbuffer = &__pyx_pybuffer_C2;
  __pyx_pybuffer_dzn.pybuffer.buf = NULL;
  __pyx_pybuffer_dzn.refcount = 0;
  __pyx_pybuffernd_dzn.data = NULL;
  __pyx_pybuffernd_dzn.rcbuffer = &__pyx_pybuffer_dzn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_C0.rcbuffer->pybuffer, (PyObject*)__pyx_v_C0, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_C0.diminfo[0].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_C0.diminfo[0].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_C0.diminfo[1].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_C0.diminfo[1].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_C0.diminfo[2].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_C0.diminfo[2].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer, (PyObject*)__pyx_v_Cl, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_Cl.diminfo[0].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Cl.diminfo[0].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Cl.diminfo[1].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Cl.diminfo[1].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_Cl.diminfo[2].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_Cl.diminfo[2].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer, (PyObject*)__pyx_v_Cr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_Cr.diminfo[0].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Cr.diminfo[0].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Cr.diminfo[1].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Cr.diminfo[1].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_Cr.diminfo[2].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_Cr.diminfo[2].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_C2.rcbuffer->pybuffer, (PyObject*)__pyx_v_C2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_C2.diminfo[0].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_C2.diminfo[0].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_C2.diminfo[1].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_C2.diminfo[1].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_C2.diminfo[2].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_C2.diminfo[2].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer, (PyObject*)__pyx_v_dzn, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_dzn.diminfo[0].strides = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dzn.diminfo[0].shape = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.shape[0];
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.dirichelet1 = __pyx_v_dirichelet1;
  __pyx_t_2.dirichelet2 = __pyx_v_dirichelet2;
  __pyx_t_1 = __pyx_fuse_1__pyx_f_9pynitride_4core_3fem_assemble_stiffness_matrix(__pyx_v_C0, __pyx_v_Cl, __pyx_v_Cr, __pyx_v_C2, __pyx_v_dzn, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C2.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 23, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fuse_1assemble_stiffness_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_C2.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_fuse_0__pyx_mdef_9pynitride_4core_3fem_11__pyx_fuse_0assemble_stiffness_matrix, 0, __pyx_mstate_global->__pyx_n_u_pyx_fuse_0assemble_stiffness_m, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[6]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_assemble_stiffness_matrix, __pyx_t_4) < (0)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_fuse_1__pyx_mdef_9pynitride_4core_3fem_13__pyx_fuse_1assemble_stiffness_matrix, 0, __pyx_mstate_global->__pyx_n_u_pyx_fuse_1assemble_stiffness_m, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[6]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_assemble_stiffness_matrix, __pyx_t_4) < (0)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_9pynitride_4core_3fem_11__pyx_fuse_0assemble_stiffness_matrix, 0, __pyx_mstate_global->__pyx_n_u_pyx_fuse_0assemble_stiffness_m, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6]);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_ndarray_double_complex_ndim_3, __pyx_t_5) < (0)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_9pynitride_4core_3fem_13__pyx_fuse_1assemble_stiffness_matrix, 0, __pyx_mstate_global->__pyx_n_u_pyx_fuse_1assemble_stiffness_m, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6]);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_ndarray_float64_t_ndim_3, __pyx_t_5) < (0)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_mdef_9pynitride_4core_3fem_1assemble_stiffness_matrix, 0, __pyx_mstate_global->__pyx_n_u_assemble_stiffness_matrix, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[39])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_9pynitride_4core_3fem___pyx_defaults)) __PYX_ERR(0, 23, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_CyFunction_Defaults(struct __pyx_defaults, __pyx_t_5)->arg0 = __pyx_t_11;
  __Pyx_GIVEREF(__pyx_t_11);
  __pyx_t_11 = 0;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6]);
  ((__pyx_FusedFunctionObject *) __pyx_t_5)->__signatures__ = __pyx_t_4;
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_assemble_stiffness_matrix, __pyx_t_5) < (0)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[6] = PyTuple_Pack(2, Py_True, Py_True); if (unlikely(!__pyx_mstate_global->__pyx_tuple[6])) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[6]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[6]);
/* … */
struct __pyx_fuse_0__pyx_opt_args_9pynitride_4core_3fem_assemble_stiffness_matrix {
  int __pyx_n;
  PyLongObject *dirichelet1;
  PyLongObject *dirichelet2;
};
struct __pyx_fuse_1__pyx_opt_args_9pynitride_4core_3fem_assemble_stiffness_matrix {
  int __pyx_n;
  PyLongObject *dirichelet1;
  PyLongObject *dirichelet2;
};
/* … */
struct __pyx_defaults {
  PyObject_HEAD
  PyObject *arg0;
};

 024:         CMat C0, CMat Cl,
 025:         CMat Cr, CMat C2,
 026:         cnp.ndarray[cnp.float64_t   ,ndim=1] dzn,
+027:         bool dirichelet1=True, bool dirichelet2=True):
  PyLongObject *__pyx_v_dirichelet1 = ((PyLongObject *)Py_True);
  PyLongObject *__pyx_v_dirichelet2 = ((PyLongObject *)Py_True);
  int __pyx_v_n;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_r;
  int __pyx_v_nz;
  int __pyx_v_z;
  int __pyx_v_zmat;
  PyObject *__pyx_v_rinds = 0;
  PyObject *__pyx_v_rdata = 0;
  PyLongObject *__pyx_v_complex = 0;
  PyObject *__pyx_v_lil = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_C0;
  __Pyx_Buffer __pyx_pybuffer_C0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_C2;
  __Pyx_Buffer __pyx_pybuffer_C2;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Cl;
  __Pyx_Buffer __pyx_pybuffer_Cl;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Cr;
  __Pyx_Buffer __pyx_pybuffer_Cr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dzn;
  __Pyx_Buffer __pyx_pybuffer_dzn;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40]))
  __Pyx_TraceStartFunc("__pyx_fuse_0assemble_stiffness_matrix", __pyx_f[0], 23, 0, 0, __pyx_skip_dispatch, __PYX_ERR(0, 23, __pyx_L1_error));
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dirichelet1 = __pyx_optional_args->dirichelet1;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dirichelet2 = __pyx_optional_args->dirichelet2;
      }
    }
  }
  __pyx_pybuffer_C0.pybuffer.buf = NULL;
  __pyx_pybuffer_C0.refcount = 0;
  __pyx_pybuffernd_C0.data = NULL;
  __pyx_pybuffernd_C0.rcbuffer = &__pyx_pybuffer_C0;
  __pyx_pybuffer_Cl.pybuffer.buf = NULL;
  __pyx_pybuffer_Cl.refcount = 0;
  __pyx_pybuffernd_Cl.data = NULL;
  __pyx_pybuffernd_Cl.rcbuffer = &__pyx_pybuffer_Cl;
  __pyx_pybuffer_Cr.pybuffer.buf = NULL;
  __pyx_pybuffer_Cr.refcount = 0;
  __pyx_pybuffernd_Cr.data = NULL;
  __pyx_pybuffernd_Cr.rcbuffer = &__pyx_pybuffer_Cr;
  __pyx_pybuffer_C2.pybuffer.buf = NULL;
  __pyx_pybuffer_C2.refcount = 0;
  __pyx_pybuffernd_C2.data = NULL;
  __pyx_pybuffernd_C2.rcbuffer = &__pyx_pybuffer_C2;
  __pyx_pybuffer_dzn.pybuffer.buf = NULL;
  __pyx_pybuffer_dzn.refcount = 0;
  __pyx_pybuffernd_dzn.data = NULL;
  __pyx_pybuffernd_dzn.rcbuffer = &__pyx_pybuffer_dzn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_C0.rcbuffer->pybuffer, (PyObject*)__pyx_v_C0, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_C0.diminfo[0].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_C0.diminfo[0].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_C0.diminfo[1].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_C0.diminfo[1].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_C0.diminfo[2].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_C0.diminfo[2].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer, (PyObject*)__pyx_v_Cl, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_Cl.diminfo[0].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Cl.diminfo[0].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Cl.diminfo[1].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Cl.diminfo[1].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_Cl.diminfo[2].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_Cl.diminfo[2].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer, (PyObject*)__pyx_v_Cr, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_Cr.diminfo[0].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Cr.diminfo[0].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Cr.diminfo[1].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Cr.diminfo[1].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_Cr.diminfo[2].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_Cr.diminfo[2].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_C2.rcbuffer->pybuffer, (PyObject*)__pyx_v_C2, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_C2.diminfo[0].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_C2.diminfo[0].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_C2.diminfo[1].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_C2.diminfo[1].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_C2.diminfo[2].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_C2.diminfo[2].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer, (PyObject*)__pyx_v_dzn, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_dzn.diminfo[0].strides = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dzn.diminfo[0].shape = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.shape[0];
/* … */
      if (!values[5]) values[5] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
      if (!values[6]) values[6] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_fuse_0assemble_stiffness_matrix", 0, 5, 7, i); __PYX_ERR(0, 23, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  7:
        values[6] = __Pyx_ArgRef_VARARGS(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_VARARGS(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 23, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[5]) values[5] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
      if (!values[6]) values[6] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
    }
    __pyx_v_C0 = ((PyArrayObject *)values[0]);
    __pyx_v_Cl = ((PyArrayObject *)values[1]);
    __pyx_v_Cr = ((PyArrayObject *)values[2]);
    __pyx_v_C2 = ((PyArrayObject *)values[3]);
    __pyx_v_dzn = ((PyArrayObject *)values[4]);
    __pyx_v_dirichelet1 = ((PyLongObject *)values[5]);
    __pyx_v_dirichelet2 = ((PyLongObject *)values[6]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fuse_0assemble_stiffness_matrix", 0, 5, 7, __pyx_nargs); __PYX_ERR(0, 23, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fuse_0assemble_stiffness_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_C0), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "C0", 0))) __PYX_ERR(0, 24, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Cl), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "Cl", 0))) __PYX_ERR(0, 24, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Cr), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "Cr", 0))) __PYX_ERR(0, 25, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_C2), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "C2", 0))) __PYX_ERR(0, 25, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dzn), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "dzn", 0))) __PYX_ERR(0, 26, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirichelet1), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 1, "dirichelet1", 0))) __PYX_ERR(0, 27, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirichelet2), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 1, "dirichelet2", 0))) __PYX_ERR(0, 27, __pyx_L1_error)
  __pyx_r = __pyx_pf_9pynitride_4core_3fem_10__pyx_fuse_0assemble_stiffness_matrix(__pyx_self, __pyx_v_C0, __pyx_v_Cl, __pyx_v_Cr, __pyx_v_C2, __pyx_v_dzn, __pyx_v_dirichelet1, __pyx_v_dirichelet2);
/* … */
  PyLongObject *__pyx_v_dirichelet1 = ((PyLongObject *)Py_True);
  PyLongObject *__pyx_v_dirichelet2 = ((PyLongObject *)Py_True);
  int __pyx_v_n;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_r;
  int __pyx_v_nz;
  int __pyx_v_z;
  int __pyx_v_zmat;
  PyObject *__pyx_v_rinds = 0;
  PyObject *__pyx_v_rdata = 0;
  PyLongObject *__pyx_v_complex = 0;
  PyObject *__pyx_v_lil = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_C0;
  __Pyx_Buffer __pyx_pybuffer_C0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_C2;
  __Pyx_Buffer __pyx_pybuffer_C2;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Cl;
  __Pyx_Buffer __pyx_pybuffer_Cl;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Cr;
  __Pyx_Buffer __pyx_pybuffer_Cr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dzn;
  __Pyx_Buffer __pyx_pybuffer_dzn;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41]))
  __Pyx_TraceStartFunc("__pyx_fuse_1assemble_stiffness_matrix", __pyx_f[0], 23, 0, 0, __pyx_skip_dispatch, __PYX_ERR(0, 23, __pyx_L1_error));
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dirichelet1 = __pyx_optional_args->dirichelet1;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dirichelet2 = __pyx_optional_args->dirichelet2;
      }
    }
  }
  __pyx_pybuffer_C0.pybuffer.buf = NULL;
  __pyx_pybuffer_C0.refcount = 0;
  __pyx_pybuffernd_C0.data = NULL;
  __pyx_pybuffernd_C0.rcbuffer = &__pyx_pybuffer_C0;
  __pyx_pybuffer_Cl.pybuffer.buf = NULL;
  __pyx_pybuffer_Cl.refcount = 0;
  __pyx_pybuffernd_Cl.data = NULL;
  __pyx_pybuffernd_Cl.rcbuffer = &__pyx_pybuffer_Cl;
  __pyx_pybuffer_Cr.pybuffer.buf = NULL;
  __pyx_pybuffer_Cr.refcount = 0;
  __pyx_pybuffernd_Cr.data = NULL;
  __pyx_pybuffernd_Cr.rcbuffer = &__pyx_pybuffer_Cr;
  __pyx_pybuffer_C2.pybuffer.buf = NULL;
  __pyx_pybuffer_C2.refcount = 0;
  __pyx_pybuffernd_C2.data = NULL;
  __pyx_pybuffernd_C2.rcbuffer = &__pyx_pybuffer_C2;
  __pyx_pybuffer_dzn.pybuffer.buf = NULL;
  __pyx_pybuffer_dzn.refcount = 0;
  __pyx_pybuffernd_dzn.data = NULL;
  __pyx_pybuffernd_dzn.rcbuffer = &__pyx_pybuffer_dzn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_C0.rcbuffer->pybuffer, (PyObject*)__pyx_v_C0, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_C0.diminfo[0].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_C0.diminfo[0].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_C0.diminfo[1].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_C0.diminfo[1].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_C0.diminfo[2].strides = __pyx_pybuffernd_C0.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_C0.diminfo[2].shape = __pyx_pybuffernd_C0.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Cl.rcbuffer->pybuffer, (PyObject*)__pyx_v_Cl, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_Cl.diminfo[0].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Cl.diminfo[0].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Cl.diminfo[1].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Cl.diminfo[1].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_Cl.diminfo[2].strides = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_Cl.diminfo[2].shape = __pyx_pybuffernd_Cl.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Cr.rcbuffer->pybuffer, (PyObject*)__pyx_v_Cr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_Cr.diminfo[0].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Cr.diminfo[0].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Cr.diminfo[1].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Cr.diminfo[1].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_Cr.diminfo[2].strides = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_Cr.diminfo[2].shape = __pyx_pybuffernd_Cr.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_C2.rcbuffer->pybuffer, (PyObject*)__pyx_v_C2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_C2.diminfo[0].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_C2.diminfo[0].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_C2.diminfo[1].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_C2.diminfo[1].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_C2.diminfo[2].strides = __pyx_pybuffernd_C2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_C2.diminfo[2].shape = __pyx_pybuffernd_C2.rcbuffer->pybuffer.shape[2];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer, (PyObject*)__pyx_v_dzn, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 23, __pyx_L1_error)
  }
  __pyx_pybuffernd_dzn.diminfo[0].strides = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dzn.diminfo[0].shape = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.shape[0];
/* … */
      if (!values[5]) values[5] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
      if (!values[6]) values[6] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_fuse_1assemble_stiffness_matrix", 0, 5, 7, i); __PYX_ERR(0, 23, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  7:
        values[6] = __Pyx_ArgRef_VARARGS(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_VARARGS(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 23, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 23, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[5]) values[5] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
      if (!values[6]) values[6] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
    }
    __pyx_v_C0 = ((PyArrayObject *)values[0]);
    __pyx_v_Cl = ((PyArrayObject *)values[1]);
    __pyx_v_Cr = ((PyArrayObject *)values[2]);
    __pyx_v_C2 = ((PyArrayObject *)values[3]);
    __pyx_v_dzn = ((PyArrayObject *)values[4]);
    __pyx_v_dirichelet1 = ((PyLongObject *)values[5]);
    __pyx_v_dirichelet2 = ((PyLongObject *)values[6]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fuse_1assemble_stiffness_matrix", 0, 5, 7, __pyx_nargs); __PYX_ERR(0, 23, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fuse_1assemble_stiffness_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_C0), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "C0", 0))) __PYX_ERR(0, 24, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Cl), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "Cl", 0))) __PYX_ERR(0, 24, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Cr), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "Cr", 0))) __PYX_ERR(0, 25, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_C2), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "C2", 0))) __PYX_ERR(0, 25, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dzn), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "dzn", 0))) __PYX_ERR(0, 26, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirichelet1), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 1, "dirichelet1", 0))) __PYX_ERR(0, 27, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirichelet2), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 1, "dirichelet2", 0))) __PYX_ERR(0, 27, __pyx_L1_error)
  __pyx_r = __pyx_pf_9pynitride_4core_3fem_12__pyx_fuse_1assemble_stiffness_matrix(__pyx_self, __pyx_v_C0, __pyx_v_Cl, __pyx_v_Cr, __pyx_v_C2, __pyx_v_dzn, __pyx_v_dirichelet1, __pyx_v_dirichelet2);
 028:     """ Assemble a stiffness matrix from the coefficients of the differential equation.
 029: 
 030:     Cythonized assembly method, call as `assemble_stiffness_matrix(C0, Cl, Cr, C2, dzn, dirichelet1, dirichelet2)`.
 031: 
 032:     For the mathematics/definitions of the :math:`C` terms, see :ref:`FEM`.
 033:     All non-scalar arguments should be defined on the mid mesh,
 034:     and all the :math:`C` matrices should be three-dimensional, even if they are just scalars.
 035: 
 036:     If `Cl` and `Cr` are supplied as None, they will be ignored and the matrix will be of dtype double.
 037:     If `Cl` and `Cr` are supplied, the matrix will be of dtype complex.
 038: 
 039:     Args:
 040:         C0,Cl,Cr,C2: material-dependent differential equation coefficients
 041:         dzn: the spacings between mesh nodes
 042:         dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.
 043: 
 044:     Returns:
 045:         A stiffness matrix in sparse CSC form
 046:     """
 047:     cdef:
 048:         int n, i,j,r,nz,z, zmat
 049:         list rinds, rdata
 050:         bool complex
+051:     n =C0.shape[0]
  __pyx_v_n = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_C0))[0]);
/* … */
  __pyx_v_n = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_C0))[0]);
+052:     nz=dzn.shape[0]+1
  __pyx_v_nz = ((__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_dzn))[0]) + 1);
/* … */
  __pyx_v_nz = ((__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_dzn))[0]) + 1);
+053:     complex = (Cl is not None)
  __pyx_t_1 = (((PyObject *)__pyx_v_Cl) != Py_None);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool)))) __PYX_ERR(0, 53, __pyx_L1_error)
  __pyx_v_complex = ((PyLongObject *)__pyx_t_2);
  __pyx_t_2 = 0;
/* … */
  __pyx_t_1 = (((PyObject *)__pyx_v_Cl) != Py_None);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool)))) __PYX_ERR(0, 53, __pyx_L1_error)
  __pyx_v_complex = ((PyLongObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+054:     lil=lil_matrix((n*(nz-dirichelet1-dirichelet2),n*(nz-dirichelet1-dirichelet2)),
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_lil_matrix); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyNumber_Subtract(__pyx_t_6, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Subtract(__pyx_t_7, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyNumber_Multiply(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = PyNumber_Subtract(__pyx_t_5, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Subtract(__pyx_t_8, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyNumber_Multiply(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_7);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 54, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_8);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 54, __pyx_L1_error);
  __pyx_t_7 = 0;
  __pyx_t_8 = 0;
/* … */
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_lil_matrix); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyNumber_Subtract(__pyx_t_6, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Subtract(__pyx_t_7, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyNumber_Multiply(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = PyNumber_Subtract(__pyx_t_5, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Subtract(__pyx_t_8, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyNumber_Multiply(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_7);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 54, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_8);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 54, __pyx_L1_error);
  __pyx_t_7 = 0;
  __pyx_t_8 = 0;
+055:                    dtype='complex' if complex else 'float')
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 55, __pyx_L1_error)
  if (__pyx_t_1) {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_complex);
    __pyx_t_8 = __pyx_mstate_global->__pyx_n_u_complex;
  } else {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_float);
    __pyx_t_8 = __pyx_mstate_global->__pyx_n_u_float;
  }
  __pyx_t_9 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_5};
    __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 54, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_8, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 54, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_lil = __pyx_t_2;
  __pyx_t_2 = 0;
/* … */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 55, __pyx_L1_error)
  if (__pyx_t_1) {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_complex);
    __pyx_t_8 = __pyx_mstate_global->__pyx_n_u_complex;
  } else {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_float);
    __pyx_t_8 = __pyx_mstate_global->__pyx_n_u_float;
  }
  __pyx_t_9 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_5};
    __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 54, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_8, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 54, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_lil = __pyx_t_2;
  __pyx_t_2 = 0;
+056:     for z in range(dirichelet1,nz-dirichelet2):
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyNumber_Subtract(__pyx_t_2, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(((PyObject *)__pyx_v_dirichelet1)); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L1_error)
  __pyx_t_12 = __pyx_t_10;
  for (__pyx_t_13 = __pyx_t_11; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_z = __pyx_t_13;
/* … */
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyNumber_Subtract(__pyx_t_2, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(((PyObject *)__pyx_v_dirichelet1)); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L1_error)
  __pyx_t_12 = __pyx_t_10;
  for (__pyx_t_13 = __pyx_t_11; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_z = __pyx_t_13;
+057:         for i in range(n):
    __pyx_t_14 = __pyx_v_n;
    __pyx_t_15 = __pyx_t_14;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_i = __pyx_t_16;
/* … */
    __pyx_t_14 = __pyx_v_n;
    __pyx_t_15 = __pyx_t_14;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_i = __pyx_t_16;
+058:             zmat=z-dirichelet1
      __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_z); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_17 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_zmat = __pyx_t_17;
/* … */
      __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_z); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_17 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_zmat = __pyx_t_17;
+059:             r=zmat*n+i
      __pyx_v_r = ((__pyx_v_zmat * __pyx_v_n) + __pyx_v_i);
/* … */
      __pyx_v_r = ((__pyx_v_zmat * __pyx_v_n) + __pyx_v_i);
+060:             rinds=lil.rows[r]
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_lil, __pyx_mstate_global->__pyx_n_u_rows); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_r, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(0, 60, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
/* … */
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_lil, __pyx_mstate_global->__pyx_n_u_rows); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_r, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(0, 60, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
+061:             rdata=lil.data[r]
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_lil, __pyx_mstate_global->__pyx_n_u_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 61, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, __pyx_v_r, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(0, 61, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
/* … */
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_lil, __pyx_mstate_global->__pyx_n_u_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 61, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, __pyx_v_r, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(0, 61, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
 062: 
 063:             #put in left
+064:             if zmat>0:
      __pyx_t_1 = (__pyx_v_zmat > 0);
      if (__pyx_t_1) {
/* … */
      }
/* … */
      __pyx_t_1 = (__pyx_v_zmat > 0);
      if (__pyx_t_1) {
/* … */
      }
+065:                 rinds+=range(n*zmat-n,n*zmat)
        __pyx_t_4 = NULL;
        __pyx_t_7 = __Pyx_PyLong_From_int(((__pyx_v_n * __pyx_v_zmat) - __pyx_v_n)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 65, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyLong_From_int((__pyx_v_n * __pyx_v_zmat)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 65, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_9 = 1;
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_8};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 65, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (!(likely(PyList_CheckExact(__pyx_t_8)) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_8))) __PYX_ERR(0, 65, __pyx_L1_error)
        __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
/* … */
        __pyx_t_4 = NULL;
        __pyx_t_7 = __Pyx_PyLong_From_int(((__pyx_v_n * __pyx_v_zmat) - __pyx_v_n)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 65, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyLong_From_int((__pyx_v_n * __pyx_v_zmat)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 65, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_9 = 1;
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_8};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 65, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (!(likely(PyList_CheckExact(__pyx_t_8)) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_8))) __PYX_ERR(0, 65, __pyx_L1_error)
        __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
+066:                 rdata+=[0]*n
        __pyx_t_8 = PyList_New(1 * ((__pyx_v_n<0) ? 0:__pyx_v_n)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 66, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        { Py_ssize_t __pyx_temp;
          for (__pyx_temp=0; __pyx_temp < __pyx_v_n; __pyx_temp++) {
            __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
            __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
            if (__Pyx_PyList_SET_ITEM(__pyx_t_8, __pyx_temp, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 66, __pyx_L1_error);
          }
        }
        __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
        __pyx_t_2 = 0;
/* … */
        __pyx_t_8 = PyList_New(1 * ((__pyx_v_n<0) ? 0:__pyx_v_n)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 66, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        { Py_ssize_t __pyx_temp;
          for (__pyx_temp=0; __pyx_temp < __pyx_v_n; __pyx_temp++) {
            __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
            __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
            if (__Pyx_PyList_SET_ITEM(__pyx_t_8, __pyx_temp, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 66, __pyx_L1_error);
          }
        }
        __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
        __pyx_t_2 = 0;
+067:                 for j in range(n):
        __pyx_t_17 = __pyx_v_n;
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
          __pyx_v_j = __pyx_t_19;
/* … */
        __pyx_t_17 = __pyx_v_n;
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
          __pyx_v_j = __pyx_t_19;
+068:                     rdata[j]= \
          if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_v_j, __pyx_t_2, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 68, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
          if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_v_j, __pyx_t_2, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 68, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+069:                         +C0[i,j,z-1]*dzn[z-1]/6\
          __pyx_t_20 = __pyx_v_i;
          __pyx_t_21 = __pyx_v_j;
          __pyx_t_22 = (__pyx_v_z - 1);
          __pyx_t_23 = -1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_C0.diminfo[0].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_C0.diminfo[0].shape)) __pyx_t_23 = 0;
          if (__pyx_t_21 < 0) {
            __pyx_t_21 += __pyx_pybuffernd_C0.diminfo[1].shape;
            if (unlikely(__pyx_t_21 < 0)) __pyx_t_23 = 1;
          } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_C0.diminfo[1].shape)) __pyx_t_23 = 1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_C0.diminfo[2].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_23 = 2;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_C0.diminfo[2].shape)) __pyx_t_23 = 2;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 69, __pyx_L1_error)
          }
          __pyx_t_24 = (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_C0.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_C0.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_C0.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_C0.diminfo[2].strides));
          __pyx_t_22 = (__pyx_v_z - 1);
          __pyx_t_23 = -1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_23 = 0;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 69, __pyx_L1_error)
          }
          __pyx_t_25 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_24), __Pyx_CIMAG(__pyx_t_24)), __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0));
          __pyx_t_26 = __pyx_t_npy_float64_complex_from_parts(6, 0);
          if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_26))) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 69, __pyx_L1_error)
          }
/* … */
          __pyx_t_20 = __pyx_v_i;
          __pyx_t_21 = __pyx_v_j;
          __pyx_t_22 = (__pyx_v_z - 1);
          __pyx_t_23 = -1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_C0.diminfo[0].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_C0.diminfo[0].shape)) __pyx_t_23 = 0;
          if (__pyx_t_21 < 0) {
            __pyx_t_21 += __pyx_pybuffernd_C0.diminfo[1].shape;
            if (unlikely(__pyx_t_21 < 0)) __pyx_t_23 = 1;
          } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_C0.diminfo[1].shape)) __pyx_t_23 = 1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_C0.diminfo[2].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_23 = 2;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_C0.diminfo[2].shape)) __pyx_t_23 = 2;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 69, __pyx_L1_error)
          }
          __pyx_t_24 = (__pyx_v_z - 1);
          __pyx_t_23 = -1;
          if (__pyx_t_24 < 0) {
            __pyx_t_24 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_24 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_24 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_23 = 0;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 69, __pyx_L1_error)
          }
+070:                         -C2[i,j,z-1]/dzn[z-1]
          __pyx_t_22 = __pyx_v_i;
          __pyx_t_21 = __pyx_v_j;
          __pyx_t_20 = (__pyx_v_z - 1);
          __pyx_t_23 = -1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_C2.diminfo[0].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_C2.diminfo[0].shape)) __pyx_t_23 = 0;
          if (__pyx_t_21 < 0) {
            __pyx_t_21 += __pyx_pybuffernd_C2.diminfo[1].shape;
            if (unlikely(__pyx_t_21 < 0)) __pyx_t_23 = 1;
          } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_C2.diminfo[1].shape)) __pyx_t_23 = 1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_C2.diminfo[2].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_23 = 2;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_C2.diminfo[2].shape)) __pyx_t_23 = 2;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 70, __pyx_L1_error)
          }
          __pyx_t_24 = (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_C2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_C2.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_C2.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_C2.diminfo[2].strides));
          __pyx_t_27 = __pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_24), __Pyx_CIMAG(__pyx_t_24));
          __pyx_t_20 = (__pyx_v_z - 1);
          __pyx_t_23 = -1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_23 = 0;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 70, __pyx_L1_error)
          }
          __pyx_t_28 = __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0);
          if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_28))) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 70, __pyx_L1_error)
          }
          __pyx_t_29 = __Pyx_c_diff_npy_float64(__Pyx_c_quot_npy_float64(__pyx_t_25, __pyx_t_26), __Pyx_c_quot_npy_float64(__pyx_t_27, __pyx_t_28));
          __pyx_t_2 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_29); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
/* … */
          __pyx_t_25 = __pyx_v_i;
          __pyx_t_26 = __pyx_v_j;
          __pyx_t_27 = (__pyx_v_z - 1);
          __pyx_t_23 = -1;
          if (__pyx_t_25 < 0) {
            __pyx_t_25 += __pyx_pybuffernd_C2.diminfo[0].shape;
            if (unlikely(__pyx_t_25 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_25 >= __pyx_pybuffernd_C2.diminfo[0].shape)) __pyx_t_23 = 0;
          if (__pyx_t_26 < 0) {
            __pyx_t_26 += __pyx_pybuffernd_C2.diminfo[1].shape;
            if (unlikely(__pyx_t_26 < 0)) __pyx_t_23 = 1;
          } else if (unlikely(__pyx_t_26 >= __pyx_pybuffernd_C2.diminfo[1].shape)) __pyx_t_23 = 1;
          if (__pyx_t_27 < 0) {
            __pyx_t_27 += __pyx_pybuffernd_C2.diminfo[2].shape;
            if (unlikely(__pyx_t_27 < 0)) __pyx_t_23 = 2;
          } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_C2.diminfo[2].shape)) __pyx_t_23 = 2;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 70, __pyx_L1_error)
          }
          __pyx_t_28 = (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_C2.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_C2.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_C2.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_C2.diminfo[2].strides));
          __pyx_t_27 = (__pyx_v_z - 1);
          __pyx_t_23 = -1;
          if (__pyx_t_27 < 0) {
            __pyx_t_27 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_27 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_23 = 0;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 70, __pyx_L1_error)
          }
          __pyx_t_29 = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_dzn.diminfo[0].strides));
          if (unlikely(__pyx_t_29 == 0)) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 70, __pyx_L1_error)
          }
          __pyx_t_2 = PyFloat_FromDouble(((((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_C0.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_C0.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_C0.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_C0.diminfo[2].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_dzn.diminfo[0].strides))) / 6.0) - (__pyx_t_28 / __pyx_t_29))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
+071:                     if complex:rdata[j]+= \
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 71, __pyx_L1_error)
          if (__pyx_t_1) {
            __pyx_t_23 = __pyx_v_j;
            __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
/* … */
            __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 71, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_7, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 71, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          }
        }
/* … */
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 71, __pyx_L1_error)
          if (__pyx_t_1) {
            __pyx_t_23 = __pyx_v_j;
            __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
/* … */
            __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 71, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_7, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 71, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          }
        }
+072:                         +.5j*(Cl[i,j,z-1]+Cr[i,j,z-1])
            __pyx_t_20 = __pyx_v_i;
            __pyx_t_21 = __pyx_v_j;
            __pyx_t_22 = (__pyx_v_z - 1);
            __pyx_t_30 = -1;
            if (__pyx_t_20 < 0) {
              __pyx_t_20 += __pyx_pybuffernd_Cl.diminfo[0].shape;
              if (unlikely(__pyx_t_20 < 0)) __pyx_t_30 = 0;
            } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_Cl.diminfo[0].shape)) __pyx_t_30 = 0;
            if (__pyx_t_21 < 0) {
              __pyx_t_21 += __pyx_pybuffernd_Cl.diminfo[1].shape;
              if (unlikely(__pyx_t_21 < 0)) __pyx_t_30 = 1;
            } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_Cl.diminfo[1].shape)) __pyx_t_30 = 1;
            if (__pyx_t_22 < 0) {
              __pyx_t_22 += __pyx_pybuffernd_Cl.diminfo[2].shape;
              if (unlikely(__pyx_t_22 < 0)) __pyx_t_30 = 2;
            } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_Cl.diminfo[2].shape)) __pyx_t_30 = 2;
            if (unlikely(__pyx_t_30 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_30);
              __PYX_ERR(0, 72, __pyx_L1_error)
            }
            __pyx_t_31 = __pyx_v_i;
            __pyx_t_32 = __pyx_v_j;
            __pyx_t_33 = (__pyx_v_z - 1);
            __pyx_t_30 = -1;
            if (__pyx_t_31 < 0) {
              __pyx_t_31 += __pyx_pybuffernd_Cr.diminfo[0].shape;
              if (unlikely(__pyx_t_31 < 0)) __pyx_t_30 = 0;
            } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_Cr.diminfo[0].shape)) __pyx_t_30 = 0;
            if (__pyx_t_32 < 0) {
              __pyx_t_32 += __pyx_pybuffernd_Cr.diminfo[1].shape;
              if (unlikely(__pyx_t_32 < 0)) __pyx_t_30 = 1;
            } else if (unlikely(__pyx_t_32 >= __pyx_pybuffernd_Cr.diminfo[1].shape)) __pyx_t_30 = 1;
            if (__pyx_t_33 < 0) {
              __pyx_t_33 += __pyx_pybuffernd_Cr.diminfo[2].shape;
              if (unlikely(__pyx_t_33 < 0)) __pyx_t_30 = 2;
            } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_Cr.diminfo[2].shape)) __pyx_t_30 = 2;
            if (unlikely(__pyx_t_30 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_30);
              __PYX_ERR(0, 72, __pyx_L1_error)
            }
            __pyx_t_24 = __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0, 0.5), __Pyx_c_sum_double((*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_Cl.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_Cl.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_Cl.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_Cl.diminfo[2].strides)), (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_Cr.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_Cr.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_Cr.diminfo[1].strides, __pyx_t_33, __pyx_pybuffernd_Cr.diminfo[2].strides))));
            __pyx_t_8 = __pyx_PyComplex_FromComplex(__pyx_t_24); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 72, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
/* … */
            __pyx_t_30 = __pyx_t_double_complex_from_parts(0, 0.5);
            __pyx_t_24 = __pyx_v_i;
            __pyx_t_22 = __pyx_v_j;
            __pyx_t_21 = (__pyx_v_z - 1);
            __pyx_t_31 = -1;
            if (__pyx_t_24 < 0) {
              __pyx_t_24 += __pyx_pybuffernd_Cl.diminfo[0].shape;
              if (unlikely(__pyx_t_24 < 0)) __pyx_t_31 = 0;
            } else if (unlikely(__pyx_t_24 >= __pyx_pybuffernd_Cl.diminfo[0].shape)) __pyx_t_31 = 0;
            if (__pyx_t_22 < 0) {
              __pyx_t_22 += __pyx_pybuffernd_Cl.diminfo[1].shape;
              if (unlikely(__pyx_t_22 < 0)) __pyx_t_31 = 1;
            } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_Cl.diminfo[1].shape)) __pyx_t_31 = 1;
            if (__pyx_t_21 < 0) {
              __pyx_t_21 += __pyx_pybuffernd_Cl.diminfo[2].shape;
              if (unlikely(__pyx_t_21 < 0)) __pyx_t_31 = 2;
            } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_Cl.diminfo[2].shape)) __pyx_t_31 = 2;
            if (unlikely(__pyx_t_31 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_31);
              __PYX_ERR(0, 72, __pyx_L1_error)
            }
            __pyx_t_20 = __pyx_v_i;
            __pyx_t_27 = __pyx_v_j;
            __pyx_t_26 = (__pyx_v_z - 1);
            __pyx_t_31 = -1;
            if (__pyx_t_20 < 0) {
              __pyx_t_20 += __pyx_pybuffernd_Cr.diminfo[0].shape;
              if (unlikely(__pyx_t_20 < 0)) __pyx_t_31 = 0;
            } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_Cr.diminfo[0].shape)) __pyx_t_31 = 0;
            if (__pyx_t_27 < 0) {
              __pyx_t_27 += __pyx_pybuffernd_Cr.diminfo[1].shape;
              if (unlikely(__pyx_t_27 < 0)) __pyx_t_31 = 1;
            } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_Cr.diminfo[1].shape)) __pyx_t_31 = 1;
            if (__pyx_t_26 < 0) {
              __pyx_t_26 += __pyx_pybuffernd_Cr.diminfo[2].shape;
              if (unlikely(__pyx_t_26 < 0)) __pyx_t_31 = 2;
            } else if (unlikely(__pyx_t_26 >= __pyx_pybuffernd_Cr.diminfo[2].shape)) __pyx_t_31 = 2;
            if (unlikely(__pyx_t_31 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_31);
              __PYX_ERR(0, 72, __pyx_L1_error)
            }
            __pyx_t_32 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_30), __Pyx_CIMAG(__pyx_t_30)), __pyx_t_npy_float64_complex_from_parts(((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_Cl.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_Cl.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_Cl.diminfo[1].strides, __pyx_t_21, __pyx_pybuffernd_Cl.diminfo[2].strides)) + (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_Cr.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_Cr.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_Cr.diminfo[1].strides, __pyx_t_26, __pyx_pybuffernd_Cr.diminfo[2].strides))), 0));
            __pyx_t_8 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 72, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
 073:             #put in diag
+074:             rinds+=range(n*zmat,n*zmat+n)
      __pyx_t_8 = NULL;
      __pyx_t_2 = __Pyx_PyLong_From_int((__pyx_v_n * __pyx_v_zmat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyLong_From_int(((__pyx_v_n * __pyx_v_zmat) + __pyx_v_n)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_9 = 1;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_2, __pyx_t_4};
        __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 74, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_4)) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
/* … */
      __pyx_t_8 = NULL;
      __pyx_t_2 = __Pyx_PyLong_From_int((__pyx_v_n * __pyx_v_zmat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyLong_From_int(((__pyx_v_n * __pyx_v_zmat) + __pyx_v_n)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_9 = 1;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_2, __pyx_t_4};
        __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 74, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_4)) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
+075:             rdata+=[0]*n
      __pyx_t_4 = PyList_New(1 * ((__pyx_v_n<0) ? 0:__pyx_v_n)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 75, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      { Py_ssize_t __pyx_temp;
        for (__pyx_temp=0; __pyx_temp < __pyx_v_n; __pyx_temp++) {
          __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
          __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
          if (__Pyx_PyList_SET_ITEM(__pyx_t_4, __pyx_temp, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 75, __pyx_L1_error);
        }
      }
      __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 75, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_7));
      __pyx_t_7 = 0;
/* … */
      __pyx_t_4 = PyList_New(1 * ((__pyx_v_n<0) ? 0:__pyx_v_n)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 75, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      { Py_ssize_t __pyx_temp;
        for (__pyx_temp=0; __pyx_temp < __pyx_v_n; __pyx_temp++) {
          __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
          __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
          if (__Pyx_PyList_SET_ITEM(__pyx_t_4, __pyx_temp, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 75, __pyx_L1_error);
        }
      }
      __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 75, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_7));
      __pyx_t_7 = 0;
+076:             if z>0:
      __pyx_t_1 = (__pyx_v_z > 0);
      if (__pyx_t_1) {
/* … */
      }
/* … */
      __pyx_t_1 = (__pyx_v_z > 0);
      if (__pyx_t_1) {
/* … */
      }
+077:                 for j in range(n):
        __pyx_t_17 = __pyx_v_n;
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
          __pyx_v_j = __pyx_t_19;
/* … */
        __pyx_t_17 = __pyx_v_n;
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
          __pyx_v_j = __pyx_t_19;
+078:                     rdata[(zmat>0)*n+j]+= \
          __pyx_t_23 = (((__pyx_v_zmat > 0) * __pyx_v_n) + __pyx_v_j);
          __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 78, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
/* … */
          __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_2, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 78, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
          __pyx_t_23 = (((__pyx_v_zmat > 0) * __pyx_v_n) + __pyx_v_j);
          __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 78, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
/* … */
          __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_2, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 78, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+079:                         +C0[i,j,z-1]*dzn[z-1]/3 \
          __pyx_t_33 = __pyx_v_i;
          __pyx_t_32 = __pyx_v_j;
          __pyx_t_31 = (__pyx_v_z - 1);
          __pyx_t_30 = -1;
          if (__pyx_t_33 < 0) {
            __pyx_t_33 += __pyx_pybuffernd_C0.diminfo[0].shape;
            if (unlikely(__pyx_t_33 < 0)) __pyx_t_30 = 0;
          } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_C0.diminfo[0].shape)) __pyx_t_30 = 0;
          if (__pyx_t_32 < 0) {
            __pyx_t_32 += __pyx_pybuffernd_C0.diminfo[1].shape;
            if (unlikely(__pyx_t_32 < 0)) __pyx_t_30 = 1;
          } else if (unlikely(__pyx_t_32 >= __pyx_pybuffernd_C0.diminfo[1].shape)) __pyx_t_30 = 1;
          if (__pyx_t_31 < 0) {
            __pyx_t_31 += __pyx_pybuffernd_C0.diminfo[2].shape;
            if (unlikely(__pyx_t_31 < 0)) __pyx_t_30 = 2;
          } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_C0.diminfo[2].shape)) __pyx_t_30 = 2;
          if (unlikely(__pyx_t_30 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_30);
            __PYX_ERR(0, 79, __pyx_L1_error)
          }
          __pyx_t_24 = (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_C0.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_C0.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_C0.diminfo[1].strides, __pyx_t_31, __pyx_pybuffernd_C0.diminfo[2].strides));
          __pyx_t_31 = (__pyx_v_z - 1);
          __pyx_t_30 = -1;
          if (__pyx_t_31 < 0) {
            __pyx_t_31 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_31 < 0)) __pyx_t_30 = 0;
          } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_30 = 0;
          if (unlikely(__pyx_t_30 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_30);
            __PYX_ERR(0, 79, __pyx_L1_error)
          }
          __pyx_t_29 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_24), __Pyx_CIMAG(__pyx_t_24)), __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0));
          __pyx_t_28 = __pyx_t_npy_float64_complex_from_parts(3, 0);
          if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_28))) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 79, __pyx_L1_error)
          }
/* … */
          __pyx_t_26 = __pyx_v_i;
          __pyx_t_27 = __pyx_v_j;
          __pyx_t_20 = (__pyx_v_z - 1);
          __pyx_t_31 = -1;
          if (__pyx_t_26 < 0) {
            __pyx_t_26 += __pyx_pybuffernd_C0.diminfo[0].shape;
            if (unlikely(__pyx_t_26 < 0)) __pyx_t_31 = 0;
          } else if (unlikely(__pyx_t_26 >= __pyx_pybuffernd_C0.diminfo[0].shape)) __pyx_t_31 = 0;
          if (__pyx_t_27 < 0) {
            __pyx_t_27 += __pyx_pybuffernd_C0.diminfo[1].shape;
            if (unlikely(__pyx_t_27 < 0)) __pyx_t_31 = 1;
          } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_C0.diminfo[1].shape)) __pyx_t_31 = 1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_C0.diminfo[2].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_31 = 2;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_C0.diminfo[2].shape)) __pyx_t_31 = 2;
          if (unlikely(__pyx_t_31 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_31);
            __PYX_ERR(0, 79, __pyx_L1_error)
          }
          __pyx_t_21 = (__pyx_v_z - 1);
          __pyx_t_31 = -1;
          if (__pyx_t_21 < 0) {
            __pyx_t_21 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_21 < 0)) __pyx_t_31 = 0;
          } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_31 = 0;
          if (unlikely(__pyx_t_31 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_31);
            __PYX_ERR(0, 79, __pyx_L1_error)
          }
+080:                         +C2[i,j,z-1]/dzn[z-1]
          __pyx_t_31 = __pyx_v_i;
          __pyx_t_32 = __pyx_v_j;
          __pyx_t_33 = (__pyx_v_z - 1);
          __pyx_t_30 = -1;
          if (__pyx_t_31 < 0) {
            __pyx_t_31 += __pyx_pybuffernd_C2.diminfo[0].shape;
            if (unlikely(__pyx_t_31 < 0)) __pyx_t_30 = 0;
          } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_C2.diminfo[0].shape)) __pyx_t_30 = 0;
          if (__pyx_t_32 < 0) {
            __pyx_t_32 += __pyx_pybuffernd_C2.diminfo[1].shape;
            if (unlikely(__pyx_t_32 < 0)) __pyx_t_30 = 1;
          } else if (unlikely(__pyx_t_32 >= __pyx_pybuffernd_C2.diminfo[1].shape)) __pyx_t_30 = 1;
          if (__pyx_t_33 < 0) {
            __pyx_t_33 += __pyx_pybuffernd_C2.diminfo[2].shape;
            if (unlikely(__pyx_t_33 < 0)) __pyx_t_30 = 2;
          } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_C2.diminfo[2].shape)) __pyx_t_30 = 2;
          if (unlikely(__pyx_t_30 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_30);
            __PYX_ERR(0, 80, __pyx_L1_error)
          }
          __pyx_t_24 = (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_C2.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_C2.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_C2.diminfo[1].strides, __pyx_t_33, __pyx_pybuffernd_C2.diminfo[2].strides));
          __pyx_t_27 = __pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_24), __Pyx_CIMAG(__pyx_t_24));
          __pyx_t_33 = (__pyx_v_z - 1);
          __pyx_t_30 = -1;
          if (__pyx_t_33 < 0) {
            __pyx_t_33 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_33 < 0)) __pyx_t_30 = 0;
          } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_30 = 0;
          if (unlikely(__pyx_t_30 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_30);
            __PYX_ERR(0, 80, __pyx_L1_error)
          }
          __pyx_t_26 = __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0);
          if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_26))) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 80, __pyx_L1_error)
          }
          __pyx_t_25 = __Pyx_c_sum_npy_float64(__Pyx_c_quot_npy_float64(__pyx_t_29, __pyx_t_28), __Pyx_c_quot_npy_float64(__pyx_t_27, __pyx_t_26));
          __pyx_t_4 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_25); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 80, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
/* … */
          __pyx_t_22 = __pyx_v_i;
          __pyx_t_24 = __pyx_v_j;
          __pyx_t_25 = (__pyx_v_z - 1);
          __pyx_t_31 = -1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_C2.diminfo[0].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_31 = 0;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_C2.diminfo[0].shape)) __pyx_t_31 = 0;
          if (__pyx_t_24 < 0) {
            __pyx_t_24 += __pyx_pybuffernd_C2.diminfo[1].shape;
            if (unlikely(__pyx_t_24 < 0)) __pyx_t_31 = 1;
          } else if (unlikely(__pyx_t_24 >= __pyx_pybuffernd_C2.diminfo[1].shape)) __pyx_t_31 = 1;
          if (__pyx_t_25 < 0) {
            __pyx_t_25 += __pyx_pybuffernd_C2.diminfo[2].shape;
            if (unlikely(__pyx_t_25 < 0)) __pyx_t_31 = 2;
          } else if (unlikely(__pyx_t_25 >= __pyx_pybuffernd_C2.diminfo[2].shape)) __pyx_t_31 = 2;
          if (unlikely(__pyx_t_31 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_31);
            __PYX_ERR(0, 80, __pyx_L1_error)
          }
          __pyx_t_29 = (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_C2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_C2.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_C2.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_C2.diminfo[2].strides));
          __pyx_t_25 = (__pyx_v_z - 1);
          __pyx_t_31 = -1;
          if (__pyx_t_25 < 0) {
            __pyx_t_25 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_25 < 0)) __pyx_t_31 = 0;
          } else if (unlikely(__pyx_t_25 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_31 = 0;
          if (unlikely(__pyx_t_31 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_31);
            __PYX_ERR(0, 80, __pyx_L1_error)
          }
          __pyx_t_28 = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_dzn.diminfo[0].strides));
          if (unlikely(__pyx_t_28 == 0)) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 80, __pyx_L1_error)
          }
          __pyx_t_4 = PyFloat_FromDouble(((((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_C0.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_C0.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_C0.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_C0.diminfo[2].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_dzn.diminfo[0].strides))) / 3.0) + (__pyx_t_29 / __pyx_t_28))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 80, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
+081:                     if complex: rdata[(zmat>0)*n+j]+= \
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 81, __pyx_L1_error)
          if (__pyx_t_1) {
            __pyx_t_23 = (((__pyx_v_zmat > 0) * __pyx_v_n) + __pyx_v_j);
            __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 81, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
/* … */
            __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 81, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_7, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 81, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          }
        }
/* … */
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 81, __pyx_L1_error)
          if (__pyx_t_1) {
            __pyx_t_23 = (((__pyx_v_zmat > 0) * __pyx_v_n) + __pyx_v_j);
            __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 81, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
/* … */
            __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 81, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_7, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 81, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          }
        }
+082:                         +.5j*(-Cl[i,j,z-1]+Cr[i,j,z-1])
            __pyx_t_33 = __pyx_v_i;
            __pyx_t_32 = __pyx_v_j;
            __pyx_t_31 = (__pyx_v_z - 1);
            __pyx_t_30 = -1;
            if (__pyx_t_33 < 0) {
              __pyx_t_33 += __pyx_pybuffernd_Cl.diminfo[0].shape;
              if (unlikely(__pyx_t_33 < 0)) __pyx_t_30 = 0;
            } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_Cl.diminfo[0].shape)) __pyx_t_30 = 0;
            if (__pyx_t_32 < 0) {
              __pyx_t_32 += __pyx_pybuffernd_Cl.diminfo[1].shape;
              if (unlikely(__pyx_t_32 < 0)) __pyx_t_30 = 1;
            } else if (unlikely(__pyx_t_32 >= __pyx_pybuffernd_Cl.diminfo[1].shape)) __pyx_t_30 = 1;
            if (__pyx_t_31 < 0) {
              __pyx_t_31 += __pyx_pybuffernd_Cl.diminfo[2].shape;
              if (unlikely(__pyx_t_31 < 0)) __pyx_t_30 = 2;
            } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_Cl.diminfo[2].shape)) __pyx_t_30 = 2;
            if (unlikely(__pyx_t_30 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_30);
              __PYX_ERR(0, 82, __pyx_L1_error)
            }
            __pyx_t_22 = __pyx_v_i;
            __pyx_t_21 = __pyx_v_j;
            __pyx_t_20 = (__pyx_v_z - 1);
            __pyx_t_30 = -1;
            if (__pyx_t_22 < 0) {
              __pyx_t_22 += __pyx_pybuffernd_Cr.diminfo[0].shape;
              if (unlikely(__pyx_t_22 < 0)) __pyx_t_30 = 0;
            } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_Cr.diminfo[0].shape)) __pyx_t_30 = 0;
            if (__pyx_t_21 < 0) {
              __pyx_t_21 += __pyx_pybuffernd_Cr.diminfo[1].shape;
              if (unlikely(__pyx_t_21 < 0)) __pyx_t_30 = 1;
            } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_Cr.diminfo[1].shape)) __pyx_t_30 = 1;
            if (__pyx_t_20 < 0) {
              __pyx_t_20 += __pyx_pybuffernd_Cr.diminfo[2].shape;
              if (unlikely(__pyx_t_20 < 0)) __pyx_t_30 = 2;
            } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_Cr.diminfo[2].shape)) __pyx_t_30 = 2;
            if (unlikely(__pyx_t_30 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_30);
              __PYX_ERR(0, 82, __pyx_L1_error)
            }
            __pyx_t_24 = __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0, 0.5), __Pyx_c_sum_double(__Pyx_c_neg_double((*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_Cl.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_Cl.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_Cl.diminfo[1].strides, __pyx_t_31, __pyx_pybuffernd_Cl.diminfo[2].strides))), (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_Cr.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_Cr.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_Cr.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_Cr.diminfo[2].strides))));
            __pyx_t_4 = __pyx_PyComplex_FromComplex(__pyx_t_24); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 82, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
/* … */
            __pyx_t_30 = __pyx_t_double_complex_from_parts(0, 0.5);
            __pyx_t_21 = __pyx_v_i;
            __pyx_t_20 = __pyx_v_j;
            __pyx_t_27 = (__pyx_v_z - 1);
            __pyx_t_31 = -1;
            if (__pyx_t_21 < 0) {
              __pyx_t_21 += __pyx_pybuffernd_Cl.diminfo[0].shape;
              if (unlikely(__pyx_t_21 < 0)) __pyx_t_31 = 0;
            } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_Cl.diminfo[0].shape)) __pyx_t_31 = 0;
            if (__pyx_t_20 < 0) {
              __pyx_t_20 += __pyx_pybuffernd_Cl.diminfo[1].shape;
              if (unlikely(__pyx_t_20 < 0)) __pyx_t_31 = 1;
            } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_Cl.diminfo[1].shape)) __pyx_t_31 = 1;
            if (__pyx_t_27 < 0) {
              __pyx_t_27 += __pyx_pybuffernd_Cl.diminfo[2].shape;
              if (unlikely(__pyx_t_27 < 0)) __pyx_t_31 = 2;
            } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_Cl.diminfo[2].shape)) __pyx_t_31 = 2;
            if (unlikely(__pyx_t_31 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_31);
              __PYX_ERR(0, 82, __pyx_L1_error)
            }
            __pyx_t_26 = __pyx_v_i;
            __pyx_t_25 = __pyx_v_j;
            __pyx_t_24 = (__pyx_v_z - 1);
            __pyx_t_31 = -1;
            if (__pyx_t_26 < 0) {
              __pyx_t_26 += __pyx_pybuffernd_Cr.diminfo[0].shape;
              if (unlikely(__pyx_t_26 < 0)) __pyx_t_31 = 0;
            } else if (unlikely(__pyx_t_26 >= __pyx_pybuffernd_Cr.diminfo[0].shape)) __pyx_t_31 = 0;
            if (__pyx_t_25 < 0) {
              __pyx_t_25 += __pyx_pybuffernd_Cr.diminfo[1].shape;
              if (unlikely(__pyx_t_25 < 0)) __pyx_t_31 = 1;
            } else if (unlikely(__pyx_t_25 >= __pyx_pybuffernd_Cr.diminfo[1].shape)) __pyx_t_31 = 1;
            if (__pyx_t_24 < 0) {
              __pyx_t_24 += __pyx_pybuffernd_Cr.diminfo[2].shape;
              if (unlikely(__pyx_t_24 < 0)) __pyx_t_31 = 2;
            } else if (unlikely(__pyx_t_24 >= __pyx_pybuffernd_Cr.diminfo[2].shape)) __pyx_t_31 = 2;
            if (unlikely(__pyx_t_31 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_31);
              __PYX_ERR(0, 82, __pyx_L1_error)
            }
            __pyx_t_32 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_30), __Pyx_CIMAG(__pyx_t_30)), __pyx_t_npy_float64_complex_from_parts(((-(*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_Cl.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_Cl.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_Cl.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_Cl.diminfo[2].strides))) + (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_Cr.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_Cr.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_Cr.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_Cr.diminfo[2].strides))), 0));
            __pyx_t_4 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 82, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
+083:             if z<nz-1:
      __pyx_t_1 = (__pyx_v_z < (__pyx_v_nz - 1));
      if (__pyx_t_1) {
/* … */
      }
/* … */
      __pyx_t_1 = (__pyx_v_z < (__pyx_v_nz - 1));
      if (__pyx_t_1) {
/* … */
      }
+084:                 for j in range(n):
        __pyx_t_17 = __pyx_v_n;
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
          __pyx_v_j = __pyx_t_19;
/* … */
        __pyx_t_17 = __pyx_v_n;
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
          __pyx_v_j = __pyx_t_19;
+085:                     rdata[(zmat>0)*n+j]+= \
          __pyx_t_23 = (((__pyx_v_zmat > 0) * __pyx_v_n) + __pyx_v_j);
          __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 85, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
/* … */
          __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 85, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_2, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 85, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
          __pyx_t_23 = (((__pyx_v_zmat > 0) * __pyx_v_n) + __pyx_v_j);
          __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 85, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
/* … */
          __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 85, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_2, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 85, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+086:                         +C0[i,j,z]*dzn[z]/3 \
          __pyx_t_20 = __pyx_v_i;
          __pyx_t_21 = __pyx_v_j;
          __pyx_t_22 = __pyx_v_z;
          __pyx_t_30 = -1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_C0.diminfo[0].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_30 = 0;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_C0.diminfo[0].shape)) __pyx_t_30 = 0;
          if (__pyx_t_21 < 0) {
            __pyx_t_21 += __pyx_pybuffernd_C0.diminfo[1].shape;
            if (unlikely(__pyx_t_21 < 0)) __pyx_t_30 = 1;
          } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_C0.diminfo[1].shape)) __pyx_t_30 = 1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_C0.diminfo[2].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_30 = 2;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_C0.diminfo[2].shape)) __pyx_t_30 = 2;
          if (unlikely(__pyx_t_30 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_30);
            __PYX_ERR(0, 86, __pyx_L1_error)
          }
          __pyx_t_24 = (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_C0.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_C0.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_C0.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_C0.diminfo[2].strides));
          __pyx_t_22 = __pyx_v_z;
          __pyx_t_30 = -1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_30 = 0;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_30 = 0;
          if (unlikely(__pyx_t_30 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_30);
            __PYX_ERR(0, 86, __pyx_L1_error)
          }
          __pyx_t_25 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_24), __Pyx_CIMAG(__pyx_t_24)), __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0));
          __pyx_t_26 = __pyx_t_npy_float64_complex_from_parts(3, 0);
          if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_26))) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 86, __pyx_L1_error)
          }
/* … */
          __pyx_t_24 = __pyx_v_i;
          __pyx_t_25 = __pyx_v_j;
          __pyx_t_26 = __pyx_v_z;
          __pyx_t_31 = -1;
          if (__pyx_t_24 < 0) {
            __pyx_t_24 += __pyx_pybuffernd_C0.diminfo[0].shape;
            if (unlikely(__pyx_t_24 < 0)) __pyx_t_31 = 0;
          } else if (unlikely(__pyx_t_24 >= __pyx_pybuffernd_C0.diminfo[0].shape)) __pyx_t_31 = 0;
          if (__pyx_t_25 < 0) {
            __pyx_t_25 += __pyx_pybuffernd_C0.diminfo[1].shape;
            if (unlikely(__pyx_t_25 < 0)) __pyx_t_31 = 1;
          } else if (unlikely(__pyx_t_25 >= __pyx_pybuffernd_C0.diminfo[1].shape)) __pyx_t_31 = 1;
          if (__pyx_t_26 < 0) {
            __pyx_t_26 += __pyx_pybuffernd_C0.diminfo[2].shape;
            if (unlikely(__pyx_t_26 < 0)) __pyx_t_31 = 2;
          } else if (unlikely(__pyx_t_26 >= __pyx_pybuffernd_C0.diminfo[2].shape)) __pyx_t_31 = 2;
          if (unlikely(__pyx_t_31 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_31);
            __PYX_ERR(0, 86, __pyx_L1_error)
          }
          __pyx_t_27 = __pyx_v_z;
          __pyx_t_31 = -1;
          if (__pyx_t_27 < 0) {
            __pyx_t_27 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_27 < 0)) __pyx_t_31 = 0;
          } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_31 = 0;
          if (unlikely(__pyx_t_31 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_31);
            __PYX_ERR(0, 86, __pyx_L1_error)
          }
+087:                         +C2[i,j,z]/dzn[z]
          __pyx_t_22 = __pyx_v_i;
          __pyx_t_21 = __pyx_v_j;
          __pyx_t_20 = __pyx_v_z;
          __pyx_t_30 = -1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_C2.diminfo[0].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_30 = 0;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_C2.diminfo[0].shape)) __pyx_t_30 = 0;
          if (__pyx_t_21 < 0) {
            __pyx_t_21 += __pyx_pybuffernd_C2.diminfo[1].shape;
            if (unlikely(__pyx_t_21 < 0)) __pyx_t_30 = 1;
          } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_C2.diminfo[1].shape)) __pyx_t_30 = 1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_C2.diminfo[2].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_30 = 2;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_C2.diminfo[2].shape)) __pyx_t_30 = 2;
          if (unlikely(__pyx_t_30 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_30);
            __PYX_ERR(0, 87, __pyx_L1_error)
          }
          __pyx_t_24 = (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_C2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_C2.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_C2.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_C2.diminfo[2].strides));
          __pyx_t_27 = __pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_24), __Pyx_CIMAG(__pyx_t_24));
          __pyx_t_20 = __pyx_v_z;
          __pyx_t_30 = -1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_30 = 0;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_30 = 0;
          if (unlikely(__pyx_t_30 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_30);
            __PYX_ERR(0, 87, __pyx_L1_error)
          }
          __pyx_t_28 = __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0);
          if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_28))) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 87, __pyx_L1_error)
          }
          __pyx_t_29 = __Pyx_c_sum_npy_float64(__Pyx_c_quot_npy_float64(__pyx_t_25, __pyx_t_26), __Pyx_c_quot_npy_float64(__pyx_t_27, __pyx_t_28));
          __pyx_t_4 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_29); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
/* … */
          __pyx_t_20 = __pyx_v_i;
          __pyx_t_21 = __pyx_v_j;
          __pyx_t_22 = __pyx_v_z;
          __pyx_t_31 = -1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_C2.diminfo[0].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_31 = 0;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_C2.diminfo[0].shape)) __pyx_t_31 = 0;
          if (__pyx_t_21 < 0) {
            __pyx_t_21 += __pyx_pybuffernd_C2.diminfo[1].shape;
            if (unlikely(__pyx_t_21 < 0)) __pyx_t_31 = 1;
          } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_C2.diminfo[1].shape)) __pyx_t_31 = 1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_C2.diminfo[2].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_31 = 2;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_C2.diminfo[2].shape)) __pyx_t_31 = 2;
          if (unlikely(__pyx_t_31 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_31);
            __PYX_ERR(0, 87, __pyx_L1_error)
          }
          __pyx_t_28 = (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_C2.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_C2.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_C2.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_C2.diminfo[2].strides));
          __pyx_t_22 = __pyx_v_z;
          __pyx_t_31 = -1;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_31 = 0;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_31 = 0;
          if (unlikely(__pyx_t_31 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_31);
            __PYX_ERR(0, 87, __pyx_L1_error)
          }
          __pyx_t_29 = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_dzn.diminfo[0].strides));
          if (unlikely(__pyx_t_29 == 0)) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 87, __pyx_L1_error)
          }
          __pyx_t_4 = PyFloat_FromDouble(((((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_C0.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_C0.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_C0.diminfo[1].strides, __pyx_t_26, __pyx_pybuffernd_C0.diminfo[2].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_dzn.diminfo[0].strides))) / 3.0) + (__pyx_t_28 / __pyx_t_29))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
+088:                     if complex: rdata[(zmat>0)*n+j]+= \
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 88, __pyx_L1_error)
          if (__pyx_t_1) {
            __pyx_t_23 = (((__pyx_v_zmat > 0) * __pyx_v_n) + __pyx_v_j);
            __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
/* … */
            __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 88, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_7, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 88, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          }
        }
/* … */
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 88, __pyx_L1_error)
          if (__pyx_t_1) {
            __pyx_t_23 = (((__pyx_v_zmat > 0) * __pyx_v_n) + __pyx_v_j);
            __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_23, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
/* … */
            __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 88, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_23, __pyx_t_7, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 88, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          }
        }
+089:                         +.5j*(+Cl[i,j,z]-Cr[i,j,z])\
            __pyx_t_20 = __pyx_v_i;
            __pyx_t_21 = __pyx_v_j;
            __pyx_t_22 = __pyx_v_z;
            __pyx_t_30 = -1;
            if (__pyx_t_20 < 0) {
              __pyx_t_20 += __pyx_pybuffernd_Cl.diminfo[0].shape;
              if (unlikely(__pyx_t_20 < 0)) __pyx_t_30 = 0;
            } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_Cl.diminfo[0].shape)) __pyx_t_30 = 0;
            if (__pyx_t_21 < 0) {
              __pyx_t_21 += __pyx_pybuffernd_Cl.diminfo[1].shape;
              if (unlikely(__pyx_t_21 < 0)) __pyx_t_30 = 1;
            } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_Cl.diminfo[1].shape)) __pyx_t_30 = 1;
            if (__pyx_t_22 < 0) {
              __pyx_t_22 += __pyx_pybuffernd_Cl.diminfo[2].shape;
              if (unlikely(__pyx_t_22 < 0)) __pyx_t_30 = 2;
            } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_Cl.diminfo[2].shape)) __pyx_t_30 = 2;
            if (unlikely(__pyx_t_30 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_30);
              __PYX_ERR(0, 89, __pyx_L1_error)
            }
            __pyx_t_31 = __pyx_v_i;
            __pyx_t_32 = __pyx_v_j;
            __pyx_t_33 = __pyx_v_z;
            __pyx_t_30 = -1;
            if (__pyx_t_31 < 0) {
              __pyx_t_31 += __pyx_pybuffernd_Cr.diminfo[0].shape;
              if (unlikely(__pyx_t_31 < 0)) __pyx_t_30 = 0;
            } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_Cr.diminfo[0].shape)) __pyx_t_30 = 0;
            if (__pyx_t_32 < 0) {
              __pyx_t_32 += __pyx_pybuffernd_Cr.diminfo[1].shape;
              if (unlikely(__pyx_t_32 < 0)) __pyx_t_30 = 1;
            } else if (unlikely(__pyx_t_32 >= __pyx_pybuffernd_Cr.diminfo[1].shape)) __pyx_t_30 = 1;
            if (__pyx_t_33 < 0) {
              __pyx_t_33 += __pyx_pybuffernd_Cr.diminfo[2].shape;
              if (unlikely(__pyx_t_33 < 0)) __pyx_t_30 = 2;
            } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_Cr.diminfo[2].shape)) __pyx_t_30 = 2;
            if (unlikely(__pyx_t_30 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_30);
              __PYX_ERR(0, 89, __pyx_L1_error)
            }
            __pyx_t_24 = __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0, 0.5), __Pyx_c_diff_double((*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_Cl.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_Cl.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_Cl.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_Cl.diminfo[2].strides)), (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_Cr.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_Cr.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_Cr.diminfo[1].strides, __pyx_t_33, __pyx_pybuffernd_Cr.diminfo[2].strides))));
            __pyx_t_4 = __pyx_PyComplex_FromComplex(__pyx_t_24); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 89, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
/* … */
            __pyx_t_30 = __pyx_t_double_complex_from_parts(0, 0.5);
            __pyx_t_27 = __pyx_v_i;
            __pyx_t_26 = __pyx_v_j;
            __pyx_t_25 = __pyx_v_z;
            __pyx_t_31 = -1;
            if (__pyx_t_27 < 0) {
              __pyx_t_27 += __pyx_pybuffernd_Cl.diminfo[0].shape;
              if (unlikely(__pyx_t_27 < 0)) __pyx_t_31 = 0;
            } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_Cl.diminfo[0].shape)) __pyx_t_31 = 0;
            if (__pyx_t_26 < 0) {
              __pyx_t_26 += __pyx_pybuffernd_Cl.diminfo[1].shape;
              if (unlikely(__pyx_t_26 < 0)) __pyx_t_31 = 1;
            } else if (unlikely(__pyx_t_26 >= __pyx_pybuffernd_Cl.diminfo[1].shape)) __pyx_t_31 = 1;
            if (__pyx_t_25 < 0) {
              __pyx_t_25 += __pyx_pybuffernd_Cl.diminfo[2].shape;
              if (unlikely(__pyx_t_25 < 0)) __pyx_t_31 = 2;
            } else if (unlikely(__pyx_t_25 >= __pyx_pybuffernd_Cl.diminfo[2].shape)) __pyx_t_31 = 2;
            if (unlikely(__pyx_t_31 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_31);
              __PYX_ERR(0, 89, __pyx_L1_error)
            }
            __pyx_t_24 = __pyx_v_i;
            __pyx_t_22 = __pyx_v_j;
            __pyx_t_21 = __pyx_v_z;
            __pyx_t_31 = -1;
            if (__pyx_t_24 < 0) {
              __pyx_t_24 += __pyx_pybuffernd_Cr.diminfo[0].shape;
              if (unlikely(__pyx_t_24 < 0)) __pyx_t_31 = 0;
            } else if (unlikely(__pyx_t_24 >= __pyx_pybuffernd_Cr.diminfo[0].shape)) __pyx_t_31 = 0;
            if (__pyx_t_22 < 0) {
              __pyx_t_22 += __pyx_pybuffernd_Cr.diminfo[1].shape;
              if (unlikely(__pyx_t_22 < 0)) __pyx_t_31 = 1;
            } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_Cr.diminfo[1].shape)) __pyx_t_31 = 1;
            if (__pyx_t_21 < 0) {
              __pyx_t_21 += __pyx_pybuffernd_Cr.diminfo[2].shape;
              if (unlikely(__pyx_t_21 < 0)) __pyx_t_31 = 2;
            } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_Cr.diminfo[2].shape)) __pyx_t_31 = 2;
            if (unlikely(__pyx_t_31 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_31);
              __PYX_ERR(0, 89, __pyx_L1_error)
            }
            __pyx_t_32 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_30), __Pyx_CIMAG(__pyx_t_30)), __pyx_t_npy_float64_complex_from_parts(((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_Cl.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_Cl.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_Cl.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_Cl.diminfo[2].strides)) - (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_Cr.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_Cr.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_Cr.diminfo[1].strides, __pyx_t_21, __pyx_pybuffernd_Cr.diminfo[2].strides))), 0));
            __pyx_t_4 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 89, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
 090:             #put in right
+091:             if z<nz-1-dirichelet2:
      __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_z); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_4 = __Pyx_PyLong_From_long((__pyx_v_nz - 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyObject_RichCompare(__pyx_t_7, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_1) {
/* … */
      }
    }
  }
/* … */
      __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_z); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_4 = __Pyx_PyLong_From_long((__pyx_v_nz - 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyObject_RichCompare(__pyx_t_7, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_1) {
/* … */
      }
    }
  }
+092:                 rinds+=range(n*zmat+n,n*zmat+2*n)
        __pyx_t_2 = NULL;
        __pyx_t_7 = __Pyx_PyLong_From_int(((__pyx_v_n * __pyx_v_zmat) + __pyx_v_n)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 92, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyLong_From_long(((__pyx_v_n * __pyx_v_zmat) + (2 * __pyx_v_n))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 92, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_9 = 1;
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_7, __pyx_t_8};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 92, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 92, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (!(likely(PyList_CheckExact(__pyx_t_8)) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_8))) __PYX_ERR(0, 92, __pyx_L1_error)
        __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
/* … */
        __pyx_t_2 = NULL;
        __pyx_t_7 = __Pyx_PyLong_From_int(((__pyx_v_n * __pyx_v_zmat) + __pyx_v_n)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 92, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyLong_From_long(((__pyx_v_n * __pyx_v_zmat) + (2 * __pyx_v_n))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 92, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_9 = 1;
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_7, __pyx_t_8};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 92, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 92, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (!(likely(PyList_CheckExact(__pyx_t_8)) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_8))) __PYX_ERR(0, 92, __pyx_L1_error)
        __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
+093:                 rdata+=[0]*n
        __pyx_t_8 = PyList_New(1 * ((__pyx_v_n<0) ? 0:__pyx_v_n)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 93, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        { Py_ssize_t __pyx_temp;
          for (__pyx_temp=0; __pyx_temp < __pyx_v_n; __pyx_temp++) {
            __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
            __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
            if (__Pyx_PyList_SET_ITEM(__pyx_t_8, __pyx_temp, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 93, __pyx_L1_error);
          }
        }
        __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_4));
        __pyx_t_4 = 0;
/* … */
        __pyx_t_8 = PyList_New(1 * ((__pyx_v_n<0) ? 0:__pyx_v_n)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 93, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        { Py_ssize_t __pyx_temp;
          for (__pyx_temp=0; __pyx_temp < __pyx_v_n; __pyx_temp++) {
            __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
            __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
            if (__Pyx_PyList_SET_ITEM(__pyx_t_8, __pyx_temp, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 93, __pyx_L1_error);
          }
        }
        __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_4));
        __pyx_t_4 = 0;
+094:                 for j in range(n):
        __pyx_t_17 = __pyx_v_n;
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
          __pyx_v_j = __pyx_t_19;
/* … */
        __pyx_t_17 = __pyx_v_n;
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
          __pyx_v_j = __pyx_t_19;
+095:                     rdata[(1+(zmat>0))*n+j]= \
          __pyx_t_34 = (((1 + (__pyx_v_zmat > 0)) * __pyx_v_n) + __pyx_v_j);
          if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_34, __pyx_t_4, long, 1, __Pyx_PyLong_From_long, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 95, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
          __pyx_t_33 = (((1 + (__pyx_v_zmat > 0)) * __pyx_v_n) + __pyx_v_j);
          if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_33, __pyx_t_4, long, 1, __Pyx_PyLong_From_long, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 95, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+096:                         +C0[i,j,z]*dzn[z]/6\
          __pyx_t_33 = __pyx_v_i;
          __pyx_t_32 = __pyx_v_j;
          __pyx_t_31 = __pyx_v_z;
          __pyx_t_23 = -1;
          if (__pyx_t_33 < 0) {
            __pyx_t_33 += __pyx_pybuffernd_C0.diminfo[0].shape;
            if (unlikely(__pyx_t_33 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_C0.diminfo[0].shape)) __pyx_t_23 = 0;
          if (__pyx_t_32 < 0) {
            __pyx_t_32 += __pyx_pybuffernd_C0.diminfo[1].shape;
            if (unlikely(__pyx_t_32 < 0)) __pyx_t_23 = 1;
          } else if (unlikely(__pyx_t_32 >= __pyx_pybuffernd_C0.diminfo[1].shape)) __pyx_t_23 = 1;
          if (__pyx_t_31 < 0) {
            __pyx_t_31 += __pyx_pybuffernd_C0.diminfo[2].shape;
            if (unlikely(__pyx_t_31 < 0)) __pyx_t_23 = 2;
          } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_C0.diminfo[2].shape)) __pyx_t_23 = 2;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 96, __pyx_L1_error)
          }
          __pyx_t_24 = (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_C0.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_C0.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_C0.diminfo[1].strides, __pyx_t_31, __pyx_pybuffernd_C0.diminfo[2].strides));
          __pyx_t_31 = __pyx_v_z;
          __pyx_t_23 = -1;
          if (__pyx_t_31 < 0) {
            __pyx_t_31 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_31 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_23 = 0;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 96, __pyx_L1_error)
          }
          __pyx_t_29 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_24), __Pyx_CIMAG(__pyx_t_24)), __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0));
          __pyx_t_28 = __pyx_t_npy_float64_complex_from_parts(6, 0);
          if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_28))) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 96, __pyx_L1_error)
          }
/* … */
          __pyx_t_21 = __pyx_v_i;
          __pyx_t_22 = __pyx_v_j;
          __pyx_t_24 = __pyx_v_z;
          __pyx_t_23 = -1;
          if (__pyx_t_21 < 0) {
            __pyx_t_21 += __pyx_pybuffernd_C0.diminfo[0].shape;
            if (unlikely(__pyx_t_21 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_C0.diminfo[0].shape)) __pyx_t_23 = 0;
          if (__pyx_t_22 < 0) {
            __pyx_t_22 += __pyx_pybuffernd_C0.diminfo[1].shape;
            if (unlikely(__pyx_t_22 < 0)) __pyx_t_23 = 1;
          } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_C0.diminfo[1].shape)) __pyx_t_23 = 1;
          if (__pyx_t_24 < 0) {
            __pyx_t_24 += __pyx_pybuffernd_C0.diminfo[2].shape;
            if (unlikely(__pyx_t_24 < 0)) __pyx_t_23 = 2;
          } else if (unlikely(__pyx_t_24 >= __pyx_pybuffernd_C0.diminfo[2].shape)) __pyx_t_23 = 2;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 96, __pyx_L1_error)
          }
          __pyx_t_25 = __pyx_v_z;
          __pyx_t_23 = -1;
          if (__pyx_t_25 < 0) {
            __pyx_t_25 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_25 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_25 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_23 = 0;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 96, __pyx_L1_error)
          }
+097:                         -C2[i,j,z]/dzn[z]
          __pyx_t_31 = __pyx_v_i;
          __pyx_t_32 = __pyx_v_j;
          __pyx_t_33 = __pyx_v_z;
          __pyx_t_23 = -1;
          if (__pyx_t_31 < 0) {
            __pyx_t_31 += __pyx_pybuffernd_C2.diminfo[0].shape;
            if (unlikely(__pyx_t_31 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_C2.diminfo[0].shape)) __pyx_t_23 = 0;
          if (__pyx_t_32 < 0) {
            __pyx_t_32 += __pyx_pybuffernd_C2.diminfo[1].shape;
            if (unlikely(__pyx_t_32 < 0)) __pyx_t_23 = 1;
          } else if (unlikely(__pyx_t_32 >= __pyx_pybuffernd_C2.diminfo[1].shape)) __pyx_t_23 = 1;
          if (__pyx_t_33 < 0) {
            __pyx_t_33 += __pyx_pybuffernd_C2.diminfo[2].shape;
            if (unlikely(__pyx_t_33 < 0)) __pyx_t_23 = 2;
          } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_C2.diminfo[2].shape)) __pyx_t_23 = 2;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 97, __pyx_L1_error)
          }
          __pyx_t_24 = (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_C2.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_C2.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_C2.diminfo[1].strides, __pyx_t_33, __pyx_pybuffernd_C2.diminfo[2].strides));
          __pyx_t_27 = __pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_24), __Pyx_CIMAG(__pyx_t_24));
          __pyx_t_33 = __pyx_v_z;
          __pyx_t_23 = -1;
          if (__pyx_t_33 < 0) {
            __pyx_t_33 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_33 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_23 = 0;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 97, __pyx_L1_error)
          }
          __pyx_t_26 = __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0);
          if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_26))) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 97, __pyx_L1_error)
          }
          __pyx_t_25 = __Pyx_c_diff_npy_float64(__Pyx_c_quot_npy_float64(__pyx_t_29, __pyx_t_28), __Pyx_c_quot_npy_float64(__pyx_t_27, __pyx_t_26));
          __pyx_t_4 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_25); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 97, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
/* … */
          __pyx_t_26 = __pyx_v_i;
          __pyx_t_27 = __pyx_v_j;
          __pyx_t_20 = __pyx_v_z;
          __pyx_t_23 = -1;
          if (__pyx_t_26 < 0) {
            __pyx_t_26 += __pyx_pybuffernd_C2.diminfo[0].shape;
            if (unlikely(__pyx_t_26 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_26 >= __pyx_pybuffernd_C2.diminfo[0].shape)) __pyx_t_23 = 0;
          if (__pyx_t_27 < 0) {
            __pyx_t_27 += __pyx_pybuffernd_C2.diminfo[1].shape;
            if (unlikely(__pyx_t_27 < 0)) __pyx_t_23 = 1;
          } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_C2.diminfo[1].shape)) __pyx_t_23 = 1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_C2.diminfo[2].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_23 = 2;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_C2.diminfo[2].shape)) __pyx_t_23 = 2;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 97, __pyx_L1_error)
          }
          __pyx_t_29 = (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_C2.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_C2.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_C2.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_C2.diminfo[2].strides));
          __pyx_t_20 = __pyx_v_z;
          __pyx_t_23 = -1;
          if (__pyx_t_20 < 0) {
            __pyx_t_20 += __pyx_pybuffernd_dzn.diminfo[0].shape;
            if (unlikely(__pyx_t_20 < 0)) __pyx_t_23 = 0;
          } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_23 = 0;
          if (unlikely(__pyx_t_23 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_23);
            __PYX_ERR(0, 97, __pyx_L1_error)
          }
          __pyx_t_28 = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_dzn.diminfo[0].strides));
          if (unlikely(__pyx_t_28 == 0)) {
            PyErr_SetString(PyExc_ZeroDivisionError, "float division");
            __PYX_ERR(0, 97, __pyx_L1_error)
          }
          __pyx_t_4 = PyFloat_FromDouble(((((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_C0.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_C0.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_C0.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_C0.diminfo[2].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_dzn.diminfo[0].strides))) / 6.0) - (__pyx_t_29 / __pyx_t_28))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 97, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
+098:                     if complex: rdata[(1+(zmat>0))*n+j]+= \
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 98, __pyx_L1_error)
          if (__pyx_t_1) {
            __pyx_t_34 = (((1 + (__pyx_v_zmat > 0)) * __pyx_v_n) + __pyx_v_j);
            __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_34, long, 1, __Pyx_PyLong_From_long, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 98, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
/* … */
            __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 98, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_34, __pyx_t_7, long, 1, __Pyx_PyLong_From_long, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 98, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          }
        }
/* … */
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_complex)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 98, __pyx_L1_error)
          if (__pyx_t_1) {
            __pyx_t_33 = (((1 + (__pyx_v_zmat > 0)) * __pyx_v_n) + __pyx_v_j);
            __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_rdata, __pyx_t_33, long, 1, __Pyx_PyLong_From_long, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 98, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
/* … */
            __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 98, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely((__Pyx_SetItemInt(__pyx_v_rdata, __pyx_t_33, __pyx_t_7, long, 1, __Pyx_PyLong_From_long, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 98, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          }
        }
+099:                         -.5j*(Cl[i,j,z]+Cr[i,j,z])
            __pyx_t_33 = __pyx_v_i;
            __pyx_t_32 = __pyx_v_j;
            __pyx_t_31 = __pyx_v_z;
            __pyx_t_23 = -1;
            if (__pyx_t_33 < 0) {
              __pyx_t_33 += __pyx_pybuffernd_Cl.diminfo[0].shape;
              if (unlikely(__pyx_t_33 < 0)) __pyx_t_23 = 0;
            } else if (unlikely(__pyx_t_33 >= __pyx_pybuffernd_Cl.diminfo[0].shape)) __pyx_t_23 = 0;
            if (__pyx_t_32 < 0) {
              __pyx_t_32 += __pyx_pybuffernd_Cl.diminfo[1].shape;
              if (unlikely(__pyx_t_32 < 0)) __pyx_t_23 = 1;
            } else if (unlikely(__pyx_t_32 >= __pyx_pybuffernd_Cl.diminfo[1].shape)) __pyx_t_23 = 1;
            if (__pyx_t_31 < 0) {
              __pyx_t_31 += __pyx_pybuffernd_Cl.diminfo[2].shape;
              if (unlikely(__pyx_t_31 < 0)) __pyx_t_23 = 2;
            } else if (unlikely(__pyx_t_31 >= __pyx_pybuffernd_Cl.diminfo[2].shape)) __pyx_t_23 = 2;
            if (unlikely(__pyx_t_23 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_23);
              __PYX_ERR(0, 99, __pyx_L1_error)
            }
            __pyx_t_22 = __pyx_v_i;
            __pyx_t_21 = __pyx_v_j;
            __pyx_t_20 = __pyx_v_z;
            __pyx_t_23 = -1;
            if (__pyx_t_22 < 0) {
              __pyx_t_22 += __pyx_pybuffernd_Cr.diminfo[0].shape;
              if (unlikely(__pyx_t_22 < 0)) __pyx_t_23 = 0;
            } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_Cr.diminfo[0].shape)) __pyx_t_23 = 0;
            if (__pyx_t_21 < 0) {
              __pyx_t_21 += __pyx_pybuffernd_Cr.diminfo[1].shape;
              if (unlikely(__pyx_t_21 < 0)) __pyx_t_23 = 1;
            } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_Cr.diminfo[1].shape)) __pyx_t_23 = 1;
            if (__pyx_t_20 < 0) {
              __pyx_t_20 += __pyx_pybuffernd_Cr.diminfo[2].shape;
              if (unlikely(__pyx_t_20 < 0)) __pyx_t_23 = 2;
            } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_Cr.diminfo[2].shape)) __pyx_t_23 = 2;
            if (unlikely(__pyx_t_23 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_23);
              __PYX_ERR(0, 99, __pyx_L1_error)
            }
            __pyx_t_24 = __Pyx_c_prod_double(__Pyx_c_neg_double(__pyx_t_double_complex_from_parts(0, 0.5)), __Pyx_c_sum_double((*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_Cl.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_Cl.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_Cl.diminfo[1].strides, __pyx_t_31, __pyx_pybuffernd_Cl.diminfo[2].strides)), (*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_Cr.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_Cr.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_Cr.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_Cr.diminfo[2].strides))));
            __pyx_t_8 = __pyx_PyComplex_FromComplex(__pyx_t_24); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 99, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
/* … */
            __pyx_t_30 = __Pyx_c_neg_double(__pyx_t_double_complex_from_parts(0, 0.5));
            __pyx_t_25 = __pyx_v_i;
            __pyx_t_24 = __pyx_v_j;
            __pyx_t_22 = __pyx_v_z;
            __pyx_t_23 = -1;
            if (__pyx_t_25 < 0) {
              __pyx_t_25 += __pyx_pybuffernd_Cl.diminfo[0].shape;
              if (unlikely(__pyx_t_25 < 0)) __pyx_t_23 = 0;
            } else if (unlikely(__pyx_t_25 >= __pyx_pybuffernd_Cl.diminfo[0].shape)) __pyx_t_23 = 0;
            if (__pyx_t_24 < 0) {
              __pyx_t_24 += __pyx_pybuffernd_Cl.diminfo[1].shape;
              if (unlikely(__pyx_t_24 < 0)) __pyx_t_23 = 1;
            } else if (unlikely(__pyx_t_24 >= __pyx_pybuffernd_Cl.diminfo[1].shape)) __pyx_t_23 = 1;
            if (__pyx_t_22 < 0) {
              __pyx_t_22 += __pyx_pybuffernd_Cl.diminfo[2].shape;
              if (unlikely(__pyx_t_22 < 0)) __pyx_t_23 = 2;
            } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_Cl.diminfo[2].shape)) __pyx_t_23 = 2;
            if (unlikely(__pyx_t_23 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_23);
              __PYX_ERR(0, 99, __pyx_L1_error)
            }
            __pyx_t_21 = __pyx_v_i;
            __pyx_t_20 = __pyx_v_j;
            __pyx_t_27 = __pyx_v_z;
            __pyx_t_23 = -1;
            if (__pyx_t_21 < 0) {
              __pyx_t_21 += __pyx_pybuffernd_Cr.diminfo[0].shape;
              if (unlikely(__pyx_t_21 < 0)) __pyx_t_23 = 0;
            } else if (unlikely(__pyx_t_21 >= __pyx_pybuffernd_Cr.diminfo[0].shape)) __pyx_t_23 = 0;
            if (__pyx_t_20 < 0) {
              __pyx_t_20 += __pyx_pybuffernd_Cr.diminfo[1].shape;
              if (unlikely(__pyx_t_20 < 0)) __pyx_t_23 = 1;
            } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_Cr.diminfo[1].shape)) __pyx_t_23 = 1;
            if (__pyx_t_27 < 0) {
              __pyx_t_27 += __pyx_pybuffernd_Cr.diminfo[2].shape;
              if (unlikely(__pyx_t_27 < 0)) __pyx_t_23 = 2;
            } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_Cr.diminfo[2].shape)) __pyx_t_23 = 2;
            if (unlikely(__pyx_t_23 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_23);
              __PYX_ERR(0, 99, __pyx_L1_error)
            }
            __pyx_t_32 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_30), __Pyx_CIMAG(__pyx_t_30)), __pyx_t_npy_float64_complex_from_parts(((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_Cl.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_Cl.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_Cl.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_Cl.diminfo[2].strides)) + (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_Cr.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_Cr.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_Cr.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_Cr.diminfo[2].strides))), 0));
            __pyx_t_8 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 99, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
+100:     return lil.asformat('csc')
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_8 = __pyx_v_lil;
  __Pyx_INCREF(__pyx_t_8);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_csc};
    __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_asformat, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  __Pyx_TraceReturnValue(__pyx_r, 406, 0, __PYX_ERR(0, 100, __pyx_L1_error));
  goto __pyx_L0;
/* … */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_8 = __pyx_v_lil;
  __Pyx_INCREF(__pyx_t_8);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_csc};
    __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_asformat, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  __Pyx_TraceReturnValue(__pyx_r, 406, 0, __PYX_ERR(0, 100, __pyx_L1_error));
  goto __pyx_L0;
 101: 
 102: 
 103: 
 104: 
 105: #@cython.boundscheck(False)
 106: #@cython.wraparound(False)
 107: #@cython.cdivision(True)
+108: cpdef assemble_load_matrix(
/* Python wrapper */
static PyObject *__pyx_pw_9pynitride_4core_3fem_3assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
PyDoc_STRVAR(__pyx_doc_9pynitride_4core_3fem_2assemble_load_matrix, " Assemble a load matrix from the coefficients of the differential equation.\n    \n    Cythonized assembly method, call as `assemble_load_matrix(w, dzn, n)`.\n    \n    For the mathematics/definitions of the :math:`w` term, see :ref:`FEM`.\n    All arguments should be defined on the mid mesh, and the :math:`w` matrix should be one-dimensional floats\n    \n    Args:\n        w: load-side coefficient\n        dzn: the spacings between mesh nodes\n        n: the size of the :math:`C` matrices (eg 1 for scalar equation, 6 for 6x6 kp equation)\n        dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.\n    \n    Returns:\n        A load matrix in sparse CSC form\n    ");
static PyMethodDef __pyx_mdef_9pynitride_4core_3fem_3assemble_load_matrix = {"assemble_load_matrix", (PyCFunction)(void(*)(void))(PyCFunctionWithKeywords)__pyx_pw_9pynitride_4core_3fem_3assemble_load_matrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9pynitride_4core_3fem_2assemble_load_matrix};
static PyObject *__pyx_pw_9pynitride_4core_3fem_3assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_signatures = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;
  CYTHON_UNUSED PyObject *__pyx_v__fused_sigindex = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_signatures,&__pyx_mstate_global->__pyx_n_u_args,&__pyx_mstate_global->__pyx_n_u_kwargs,&__pyx_mstate_global->__pyx_n_u_defaults,&__pyx_mstate_global->__pyx_n_u_fused_sigindex,0};
  PyObject* values[5] = {0,0,0,0,0};
    struct __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(struct __pyx_defaults, __pyx_self);
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 108, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_fused_cpdef", 0) < (0)) __PYX_ERR(0, 108, __pyx_L3_error)
      if (!values[4]) values[4] = __Pyx_NewRef(__pyx_dynamic_args->arg0);
      for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, i); __PYX_ERR(0, 108, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 108, __pyx_L3_error)
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 108, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 108, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 108, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[4]) values[4] = __Pyx_NewRef(__pyx_dynamic_args->arg0);
    }
    __pyx_v_signatures = values[0];
    __pyx_v_args = values[1];
    __pyx_v_kwargs = values[2];
    __pyx_v_defaults = values[3];
    __pyx_v__fused_sigindex = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 108, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9pynitride_4core_3fem_2assemble_load_matrix(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults, __pyx_v__fused_sigindex);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9pynitride_4core_3fem_2assemble_load_matrix(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults, CYTHON_UNUSED PyObject *__pyx_v__fused_sigindex) {
  PyTypeObject *__pyx_v_ndarray = 0;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_dest_sig0 = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[42]))
  __Pyx_TraceStartFunc("assemble_load_matrix", __pyx_f[0], 108, 0, 0, 0, __PYX_ERR(0, 108, __pyx_L1_error));
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_t_2 = (__pyx_v_kwargs != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 108, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
  }
  __pyx_t_4 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  if (unlikely(__pyx_v_args == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 108, __pyx_L1_error)
  __pyx_t_1 = (0 < __pyx_t_5);
  if (__pyx_t_1) {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 108, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_v_args), 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_arg = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L6;
  }
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L7_bool_binop_done;
  }
  if (unlikely(__pyx_v_kwargs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_mstate_global->__pyx_n_u_w, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 108, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (likely(__pyx_t_1)) {
    if (unlikely(__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 108, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_mstate_global->__pyx_n_u_w); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_arg = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L6;
  }
  /*else*/ {
    __pyx_t_6 = NULL;
    __pyx_t_7 = __Pyx_PyUnicode_From_long(3, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 108, __pyx_L1_error)
    }
    __pyx_t_5 = __Pyx_PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 108, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_5, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9[0] = __pyx_mstate_global->__pyx_kp_u_Expected_at_least;
    __pyx_t_9[1] = __pyx_t_7;
    __pyx_t_9[2] = __pyx_mstate_global->__pyx_kp_u_arguments_got;
    __pyx_t_9[3] = __pyx_t_8;
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 16 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8), 127);
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_11 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_10};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_L6:;
  __pyx_t_4 = __pyx_ff_map_fused_41e5dd_2_2_5numpy_PyArrayObject__ptr__and_5numpy_PyArrayObject__ptr(__pyx_v_arg, __pyx_v_ndarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_dest_sig0 = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_ff_match_signatures_single(((PyObject*)__pyx_v_signatures), __pyx_v_dest_sig0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  __Pyx_TraceReturnValue(__pyx_r, 0, 0, __PYX_ERR(0, 108, __pyx_L1_error));
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 108, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ndarray);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_dest_sig0);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pw_9pynitride_4core_3fem_17__pyx_fuse_0assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_9pynitride_4core_3fem_3assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_fuse_0__pyx_f_9pynitride_4core_3fem_assemble_load_matrix(PyArrayObject *__pyx_v_w, PyArrayObject *__pyx_v_dzn, int __pyx_v_n, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_fuse_0__pyx_opt_args_9pynitride_4core_3fem_assemble_load_matrix *__pyx_optional_args) {
/* … */
  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_w.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 108, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.assemble_load_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_w.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_rinds);
  __Pyx_XDECREF(__pyx_v_rdata);
  __Pyx_XDECREF(__pyx_v_lil);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9pynitride_4core_3fem_17__pyx_fuse_0assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_0__pyx_mdef_9pynitride_4core_3fem_17__pyx_fuse_0assemble_load_matrix = {"__pyx_fuse_0assemble_load_matrix", (PyCFunction)(void(*)(void))(PyCFunctionWithKeywords)__pyx_pw_9pynitride_4core_3fem_17__pyx_fuse_0assemble_load_matrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9pynitride_4core_3fem_2assemble_load_matrix};
static PyObject *__pyx_pw_9pynitride_4core_3fem_17__pyx_fuse_0assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_w = 0;
  PyArrayObject *__pyx_v_dzn = 0;
  int __pyx_v_n;
  PyLongObject *__pyx_v_dirichelet1 = 0;
  PyLongObject *__pyx_v_dirichelet2 = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_0assemble_load_matrix (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_w,&__pyx_mstate_global->__pyx_n_u_dzn,&__pyx_mstate_global->__pyx_n_u_n,&__pyx_mstate_global->__pyx_n_u_dirichelet1,&__pyx_mstate_global->__pyx_n_u_dirichelet2,0};
  PyObject* values[5] = {0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 108, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_fuse_0assemble_load_matrix", 0) < (0)) __PYX_ERR(0, 108, __pyx_L3_error)
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9pynitride_4core_3fem_16__pyx_fuse_0assemble_load_matrix(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_w, PyArrayObject *__pyx_v_dzn, int __pyx_v_n, PyLongObject *__pyx_v_dirichelet1, PyLongObject *__pyx_v_dirichelet2) {
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dzn;
  __Pyx_Buffer __pyx_pybuffer_dzn;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_w;
  __Pyx_Buffer __pyx_pybuffer_w;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43]))
  __Pyx_TraceStartFunc("__pyx_fuse_0assemble_load_matrix (wrapper)", __pyx_f[0], 108, 0, 0, 0, __PYX_ERR(0, 108, __pyx_L1_error));
  __pyx_pybuffer_w.pybuffer.buf = NULL;
  __pyx_pybuffer_w.refcount = 0;
  __pyx_pybuffernd_w.data = NULL;
  __pyx_pybuffernd_w.rcbuffer = &__pyx_pybuffer_w;
  __pyx_pybuffer_dzn.pybuffer.buf = NULL;
  __pyx_pybuffer_dzn.refcount = 0;
  __pyx_pybuffernd_dzn.data = NULL;
  __pyx_pybuffernd_dzn.rcbuffer = &__pyx_pybuffer_dzn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_w.rcbuffer->pybuffer, (PyObject*)__pyx_v_w, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_pybuffernd_w.diminfo[0].strides = __pyx_pybuffernd_w.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_w.diminfo[0].shape = __pyx_pybuffernd_w.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer, (PyObject*)__pyx_v_dzn, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_pybuffernd_dzn.diminfo[0].strides = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dzn.diminfo[0].shape = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.shape[0];
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.dirichelet1 = __pyx_v_dirichelet1;
  __pyx_t_2.dirichelet2 = __pyx_v_dirichelet2;
  __pyx_t_1 = __pyx_fuse_0__pyx_f_9pynitride_4core_3fem_assemble_load_matrix(__pyx_v_w, __pyx_v_dzn, __pyx_v_n, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_w.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 108, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fuse_0assemble_load_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_w.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pw_9pynitride_4core_3fem_19__pyx_fuse_1assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_9pynitride_4core_3fem_3assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_fuse_1__pyx_f_9pynitride_4core_3fem_assemble_load_matrix(PyArrayObject *__pyx_v_w, PyArrayObject *__pyx_v_dzn, int __pyx_v_n, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_fuse_1__pyx_opt_args_9pynitride_4core_3fem_assemble_load_matrix *__pyx_optional_args) {
/* … */
  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_w.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 108, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.assemble_load_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_w.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_rinds);
  __Pyx_XDECREF(__pyx_v_rdata);
  __Pyx_XDECREF(__pyx_v_lil);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9pynitride_4core_3fem_19__pyx_fuse_1assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_1__pyx_mdef_9pynitride_4core_3fem_19__pyx_fuse_1assemble_load_matrix = {"__pyx_fuse_1assemble_load_matrix", (PyCFunction)(void(*)(void))(PyCFunctionWithKeywords)__pyx_pw_9pynitride_4core_3fem_19__pyx_fuse_1assemble_load_matrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9pynitride_4core_3fem_2assemble_load_matrix};
static PyObject *__pyx_pw_9pynitride_4core_3fem_19__pyx_fuse_1assemble_load_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_w = 0;
  PyArrayObject *__pyx_v_dzn = 0;
  int __pyx_v_n;
  PyLongObject *__pyx_v_dirichelet1 = 0;
  PyLongObject *__pyx_v_dirichelet2 = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_1assemble_load_matrix (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_w,&__pyx_mstate_global->__pyx_n_u_dzn,&__pyx_mstate_global->__pyx_n_u_n,&__pyx_mstate_global->__pyx_n_u_dirichelet1,&__pyx_mstate_global->__pyx_n_u_dirichelet2,0};
  PyObject* values[5] = {0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 108, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_fuse_1assemble_load_matrix", 0) < (0)) __PYX_ERR(0, 108, __pyx_L3_error)
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9pynitride_4core_3fem_18__pyx_fuse_1assemble_load_matrix(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_w, PyArrayObject *__pyx_v_dzn, int __pyx_v_n, PyLongObject *__pyx_v_dirichelet1, PyLongObject *__pyx_v_dirichelet2) {
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dzn;
  __Pyx_Buffer __pyx_pybuffer_dzn;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_w;
  __Pyx_Buffer __pyx_pybuffer_w;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44]))
  __Pyx_TraceStartFunc("__pyx_fuse_1assemble_load_matrix (wrapper)", __pyx_f[0], 108, 0, 0, 0, __PYX_ERR(0, 108, __pyx_L1_error));
  __pyx_pybuffer_w.pybuffer.buf = NULL;
  __pyx_pybuffer_w.refcount = 0;
  __pyx_pybuffernd_w.data = NULL;
  __pyx_pybuffernd_w.rcbuffer = &__pyx_pybuffer_w;
  __pyx_pybuffer_dzn.pybuffer.buf = NULL;
  __pyx_pybuffer_dzn.refcount = 0;
  __pyx_pybuffernd_dzn.data = NULL;
  __pyx_pybuffernd_dzn.rcbuffer = &__pyx_pybuffer_dzn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_w.rcbuffer->pybuffer, (PyObject*)__pyx_v_w, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_pybuffernd_w.diminfo[0].strides = __pyx_pybuffernd_w.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_w.diminfo[0].shape = __pyx_pybuffernd_w.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer, (PyObject*)__pyx_v_dzn, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_pybuffernd_dzn.diminfo[0].strides = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dzn.diminfo[0].shape = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.shape[0];
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.dirichelet1 = __pyx_v_dirichelet1;
  __pyx_t_2.dirichelet2 = __pyx_v_dirichelet2;
  __pyx_t_1 = __pyx_fuse_1__pyx_f_9pynitride_4core_3fem_assemble_load_matrix(__pyx_v_w, __pyx_v_dzn, __pyx_v_n, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_w.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 108, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fuse_1assemble_load_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_w.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_fuse_0__pyx_mdef_9pynitride_4core_3fem_17__pyx_fuse_0assemble_load_matrix, 0, __pyx_mstate_global->__pyx_n_u_pyx_fuse_0assemble_load_matrix, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[7]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_assemble_load_matrix, __pyx_t_5) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_fuse_1__pyx_mdef_9pynitride_4core_3fem_19__pyx_fuse_1assemble_load_matrix, 0, __pyx_mstate_global->__pyx_n_u_pyx_fuse_1assemble_load_matrix, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[7]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_assemble_load_matrix, __pyx_t_5) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_9pynitride_4core_3fem_17__pyx_fuse_0assemble_load_matrix, 0, __pyx_mstate_global->__pyx_n_u_pyx_fuse_0assemble_load_matrix, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[7]);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_ndarray_double_complex_ndim_1, __pyx_t_4) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_9pynitride_4core_3fem_19__pyx_fuse_1assemble_load_matrix, 0, __pyx_mstate_global->__pyx_n_u_pyx_fuse_1assemble_load_matrix, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[7]);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_ndarray_float64_t_ndim_1, __pyx_t_4) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_FusedFunction_New(&__pyx_mdef_9pynitride_4core_3fem_3assemble_load_matrix, 0, __pyx_mstate_global->__pyx_n_u_assemble_load_matrix, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[42])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, __pyx_mstate_global->__pyx_ptype_9pynitride_4core_3fem___pyx_defaults)) __PYX_ERR(0, 108, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_CyFunction_Defaults(struct __pyx_defaults, __pyx_t_4)->arg0 = __pyx_t_11;
  __Pyx_GIVEREF(__pyx_t_11);
  __pyx_t_11 = 0;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[7]);
  ((__pyx_FusedFunctionObject *) __pyx_t_4)->__signatures__ = __pyx_t_5;
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_assemble_load_matrix, __pyx_t_4) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[7] = PyTuple_Pack(2, Py_False, Py_False); if (unlikely(!__pyx_mstate_global->__pyx_tuple[7])) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[7]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[7]);
/* … */
struct __pyx_fuse_0__pyx_opt_args_9pynitride_4core_3fem_assemble_load_matrix {
  int __pyx_n;
  PyLongObject *dirichelet1;
  PyLongObject *dirichelet2;
};
struct __pyx_fuse_1__pyx_opt_args_9pynitride_4core_3fem_assemble_load_matrix {
  int __pyx_n;
  PyLongObject *dirichelet1;
  PyLongObject *dirichelet2;
};
 109:         scalar_var w,
 110:         cnp.ndarray[cnp.float64_t   ,ndim=1] dzn,
+111:         int n, bool dirichelet1=False, bool dirichelet2=False):
  PyLongObject *__pyx_v_dirichelet1 = ((PyLongObject *)Py_False);
  PyLongObject *__pyx_v_dirichelet2 = ((PyLongObject *)Py_False);
  int __pyx_v_i;
  int __pyx_v_r;
  int __pyx_v_nz;
  int __pyx_v_z;
  int __pyx_v_zmat;
  PyObject *__pyx_v_rinds = 0;
  PyObject *__pyx_v_rdata = 0;
  PyObject *__pyx_v_lil = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dzn;
  __Pyx_Buffer __pyx_pybuffer_dzn;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_w;
  __Pyx_Buffer __pyx_pybuffer_w;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43]))
  __Pyx_TraceStartFunc("__pyx_fuse_0assemble_load_matrix", __pyx_f[0], 108, 0, 0, __pyx_skip_dispatch, __PYX_ERR(0, 108, __pyx_L1_error));
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dirichelet1 = __pyx_optional_args->dirichelet1;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dirichelet2 = __pyx_optional_args->dirichelet2;
      }
    }
  }
  __pyx_pybuffer_w.pybuffer.buf = NULL;
  __pyx_pybuffer_w.refcount = 0;
  __pyx_pybuffernd_w.data = NULL;
  __pyx_pybuffernd_w.rcbuffer = &__pyx_pybuffer_w;
  __pyx_pybuffer_dzn.pybuffer.buf = NULL;
  __pyx_pybuffer_dzn.refcount = 0;
  __pyx_pybuffernd_dzn.data = NULL;
  __pyx_pybuffernd_dzn.rcbuffer = &__pyx_pybuffer_dzn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_w.rcbuffer->pybuffer, (PyObject*)__pyx_v_w, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_pybuffernd_w.diminfo[0].strides = __pyx_pybuffernd_w.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_w.diminfo[0].shape = __pyx_pybuffernd_w.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer, (PyObject*)__pyx_v_dzn, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_pybuffernd_dzn.diminfo[0].strides = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dzn.diminfo[0].shape = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.shape[0];
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
      if (!values[4]) values[4] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_fuse_0assemble_load_matrix", 0, 3, 5, i); __PYX_ERR(0, 108, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 108, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 108, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 108, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[3]) values[3] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
      if (!values[4]) values[4] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
    }
    __pyx_v_w = ((PyArrayObject *)values[0]);
    __pyx_v_dzn = ((PyArrayObject *)values[1]);
    __pyx_v_n = __Pyx_PyLong_As_int(values[2]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 111, __pyx_L3_error)
    __pyx_v_dirichelet1 = ((PyLongObject *)values[3]);
    __pyx_v_dirichelet2 = ((PyLongObject *)values[4]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fuse_0assemble_load_matrix", 0, 3, 5, __pyx_nargs); __PYX_ERR(0, 108, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fuse_0assemble_load_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_w), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "w", 0))) __PYX_ERR(0, 109, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dzn), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "dzn", 0))) __PYX_ERR(0, 110, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirichelet1), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 1, "dirichelet1", 0))) __PYX_ERR(0, 111, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirichelet2), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 1, "dirichelet2", 0))) __PYX_ERR(0, 111, __pyx_L1_error)
  __pyx_r = __pyx_pf_9pynitride_4core_3fem_16__pyx_fuse_0assemble_load_matrix(__pyx_self, __pyx_v_w, __pyx_v_dzn, __pyx_v_n, __pyx_v_dirichelet1, __pyx_v_dirichelet2);
/* … */
  PyLongObject *__pyx_v_dirichelet1 = ((PyLongObject *)Py_False);
  PyLongObject *__pyx_v_dirichelet2 = ((PyLongObject *)Py_False);
  int __pyx_v_i;
  int __pyx_v_r;
  int __pyx_v_nz;
  int __pyx_v_z;
  int __pyx_v_zmat;
  PyObject *__pyx_v_rinds = 0;
  PyObject *__pyx_v_rdata = 0;
  PyObject *__pyx_v_lil = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dzn;
  __Pyx_Buffer __pyx_pybuffer_dzn;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_w;
  __Pyx_Buffer __pyx_pybuffer_w;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44]))
  __Pyx_TraceStartFunc("__pyx_fuse_1assemble_load_matrix", __pyx_f[0], 108, 0, 0, __pyx_skip_dispatch, __PYX_ERR(0, 108, __pyx_L1_error));
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dirichelet1 = __pyx_optional_args->dirichelet1;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dirichelet2 = __pyx_optional_args->dirichelet2;
      }
    }
  }
  __pyx_pybuffer_w.pybuffer.buf = NULL;
  __pyx_pybuffer_w.refcount = 0;
  __pyx_pybuffernd_w.data = NULL;
  __pyx_pybuffernd_w.rcbuffer = &__pyx_pybuffer_w;
  __pyx_pybuffer_dzn.pybuffer.buf = NULL;
  __pyx_pybuffer_dzn.refcount = 0;
  __pyx_pybuffernd_dzn.data = NULL;
  __pyx_pybuffernd_dzn.rcbuffer = &__pyx_pybuffer_dzn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_w.rcbuffer->pybuffer, (PyObject*)__pyx_v_w, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_pybuffernd_w.diminfo[0].strides = __pyx_pybuffernd_w.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_w.diminfo[0].shape = __pyx_pybuffernd_w.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dzn.rcbuffer->pybuffer, (PyObject*)__pyx_v_dzn, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 108, __pyx_L1_error)
  }
  __pyx_pybuffernd_dzn.diminfo[0].strides = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dzn.diminfo[0].shape = __pyx_pybuffernd_dzn.rcbuffer->pybuffer.shape[0];
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
      if (!values[4]) values[4] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_fuse_1assemble_load_matrix", 0, 3, 5, i); __PYX_ERR(0, 108, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_VARARGS(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 108, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 108, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 108, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[3]) values[3] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
      if (!values[4]) values[4] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
    }
    __pyx_v_w = ((PyArrayObject *)values[0]);
    __pyx_v_dzn = ((PyArrayObject *)values[1]);
    __pyx_v_n = __Pyx_PyLong_As_int(values[2]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 111, __pyx_L3_error)
    __pyx_v_dirichelet1 = ((PyLongObject *)values[3]);
    __pyx_v_dirichelet2 = ((PyLongObject *)values[4]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fuse_1assemble_load_matrix", 0, 3, 5, __pyx_nargs); __PYX_ERR(0, 108, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pynitride.core.fem.__pyx_fuse_1assemble_load_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_w), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "w", 0))) __PYX_ERR(0, 109, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dzn), __pyx_mstate_global->__pyx_ptype_5numpy_ndarray, 1, "dzn", 0))) __PYX_ERR(0, 110, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirichelet1), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 1, "dirichelet1", 0))) __PYX_ERR(0, 111, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirichelet2), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 1, "dirichelet2", 0))) __PYX_ERR(0, 111, __pyx_L1_error)
  __pyx_r = __pyx_pf_9pynitride_4core_3fem_18__pyx_fuse_1assemble_load_matrix(__pyx_self, __pyx_v_w, __pyx_v_dzn, __pyx_v_n, __pyx_v_dirichelet1, __pyx_v_dirichelet2);
 112:     r""" Assemble a load matrix from the coefficients of the differential equation.
 113: 
 114:     Cythonized assembly method, call as `assemble_load_matrix(w, dzn, n)`.
 115: 
 116:     For the mathematics/definitions of the :math:`w` term, see :ref:`FEM`.
 117:     All arguments should be defined on the mid mesh, and the :math:`w` matrix should be one-dimensional floats
 118: 
 119:     Args:
 120:         w: load-side coefficient
 121:         dzn: the spacings between mesh nodes
 122:         n: the size of the :math:`C` matrices (eg 1 for scalar equation, 6 for 6x6 kp equation)
 123:         dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.
 124: 
 125:     Returns:
 126:         A load matrix in sparse CSC form
 127:     """
 128:     cdef:
 129:         int i,r,nz,z, zmat
 130:         double tmp
 131:         list rinds, rdata
+132:     nz=dzn.shape[0]+1
  __pyx_v_nz = ((__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_dzn))[0]) + 1);
/* … */
  __pyx_v_nz = ((__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_dzn))[0]) + 1);
 133: 
+134:     if w.dtype == np.float64:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_w), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
/* … */
    goto __pyx_L3;
  }
/* … */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_w), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
/* … */
    goto __pyx_L3;
  }
+135:         lil=lil_matrix((n*(nz-dirichelet1-dirichelet2),n*(nz-dirichelet1-dirichelet2)),dtype='float')
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_lil_matrix); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyNumber_Subtract(__pyx_t_6, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Subtract(__pyx_t_7, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Multiply(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = PyNumber_Subtract(__pyx_t_5, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Subtract(__pyx_t_8, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyNumber_Multiply(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_7);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 135, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_8);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 135, __pyx_L1_error);
    __pyx_t_7 = 0;
    __pyx_t_8 = 0;
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_5};
      __pyx_t_8 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_mstate_global->__pyx_n_u_float, __pyx_t_8, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 135, __pyx_L1_error)
      __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_v_lil = __pyx_t_2;
    __pyx_t_2 = 0;
/* … */
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_lil_matrix); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyNumber_Subtract(__pyx_t_6, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Subtract(__pyx_t_7, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Multiply(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = PyNumber_Subtract(__pyx_t_5, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Subtract(__pyx_t_8, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyNumber_Multiply(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_7);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 135, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_8);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 135, __pyx_L1_error);
    __pyx_t_7 = 0;
    __pyx_t_8 = 0;
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_5};
      __pyx_t_8 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_mstate_global->__pyx_n_u_float, __pyx_t_8, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 135, __pyx_L1_error)
      __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_v_lil = __pyx_t_2;
    __pyx_t_2 = 0;
 136:     else:
+137:         lil=lil_matrix((n*(nz-dirichelet1-dirichelet2),n*(nz-dirichelet1-dirichelet2)),dtype='complex')
  /*else*/ {
    __pyx_t_1 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_lil_matrix); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = PyNumber_Subtract(__pyx_t_3, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Subtract(__pyx_t_7, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Multiply(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyNumber_Subtract(__pyx_t_5, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Subtract(__pyx_t_6, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Multiply(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_7);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 137, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_6);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6) != (0)) __PYX_ERR(0, 137, __pyx_L1_error);
    __pyx_t_7 = 0;
    __pyx_t_6 = 0;
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_1);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_5};
      __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_mstate_global->__pyx_n_u_complex, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 137, __pyx_L1_error)
      __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_v_lil = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L3:;
/* … */
  /*else*/ {
    __pyx_t_1 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_lil_matrix); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = PyNumber_Subtract(__pyx_t_3, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Subtract(__pyx_t_7, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Multiply(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyNumber_Subtract(__pyx_t_5, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Subtract(__pyx_t_6, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Multiply(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_7);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 137, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_6);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6) != (0)) __PYX_ERR(0, 137, __pyx_L1_error);
    __pyx_t_7 = 0;
    __pyx_t_6 = 0;
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_1);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_5};
      __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_mstate_global->__pyx_n_u_complex, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 137, __pyx_L1_error)
      __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_v_lil = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L3:;
+138:     for z in range(dirichelet1,nz-dirichelet2):
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = PyNumber_Subtract(__pyx_t_2, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(((PyObject *)__pyx_v_dirichelet1)); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L1_error)
  __pyx_t_12 = __pyx_t_10;
  for (__pyx_t_13 = __pyx_t_11; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_z = __pyx_t_13;
/* … */
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_nz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = PyNumber_Subtract(__pyx_t_2, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(((PyObject *)__pyx_v_dirichelet1)); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L1_error)
  __pyx_t_12 = __pyx_t_10;
  for (__pyx_t_13 = __pyx_t_11; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_z = __pyx_t_13;
+139:         for i in range(n):
    __pyx_t_14 = __pyx_v_n;
    __pyx_t_15 = __pyx_t_14;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_i = __pyx_t_16;
/* … */
    __pyx_t_14 = __pyx_v_n;
    __pyx_t_15 = __pyx_t_14;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_i = __pyx_t_16;
+140:             zmat=z-dirichelet1
      __pyx_t_8 = __Pyx_PyLong_From_int(__pyx_v_z); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 140, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_8, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_17 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 140, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_zmat = __pyx_t_17;
/* … */
      __pyx_t_8 = __Pyx_PyLong_From_int(__pyx_v_z); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 140, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_8, ((PyObject *)__pyx_v_dirichelet1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_17 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 140, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_zmat = __pyx_t_17;
+141:             r=zmat*n+i
      __pyx_v_r = ((__pyx_v_zmat * __pyx_v_n) + __pyx_v_i);
/* … */
      __pyx_v_r = ((__pyx_v_zmat * __pyx_v_n) + __pyx_v_i);
+142:             rinds=lil.rows[r]
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_lil, __pyx_mstate_global->__pyx_n_u_rows); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_r, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 142, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_8))) __PYX_ERR(0, 142, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_8));
      __pyx_t_8 = 0;
/* … */
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_lil, __pyx_mstate_global->__pyx_n_u_rows); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_r, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 142, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_8))) __PYX_ERR(0, 142, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_8));
      __pyx_t_8 = 0;
+143:             rdata=lil.data[r]
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_lil, __pyx_mstate_global->__pyx_n_u_data); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_8, __pyx_v_r, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(0, 143, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
/* … */
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_lil, __pyx_mstate_global->__pyx_n_u_data); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_8, __pyx_v_r, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(0, 143, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
 144: 
 145:             #put in left
+146:             if zmat>0:
      __pyx_t_4 = (__pyx_v_zmat > 0);
      if (__pyx_t_4) {
/* … */
      }
/* … */
      __pyx_t_4 = (__pyx_v_zmat > 0);
      if (__pyx_t_4) {
/* … */
      }
+147:                 rinds+=[n*zmat-n+i]
        __pyx_t_2 = __Pyx_PyLong_From_int((((__pyx_v_n * __pyx_v_zmat) - __pyx_v_n) + __pyx_v_i)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_2);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 147, __pyx_L1_error);
        __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_2));
        __pyx_t_2 = 0;
/* … */
        __pyx_t_2 = __Pyx_PyLong_From_int((((__pyx_v_n * __pyx_v_zmat) - __pyx_v_n) + __pyx_v_i)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_2);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 147, __pyx_L1_error);
        __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_2));
        __pyx_t_2 = 0;
+148:                 rdata+=[w[z-1]*dzn[z-1]/6]
        __pyx_t_18 = (__pyx_v_z - 1);
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_w.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_w.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 148, __pyx_L1_error)
        }
        __pyx_t_19 = (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_w.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_w.diminfo[0].strides));
        __pyx_t_18 = (__pyx_v_z - 1);
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_dzn.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 148, __pyx_L1_error)
        }
        __pyx_t_20 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_19), __Pyx_CIMAG(__pyx_t_19)), __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0));
        __pyx_t_21 = __pyx_t_npy_float64_complex_from_parts(6, 0);
        if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_21))) {
          PyErr_SetString(PyExc_ZeroDivisionError, "float division");
          __PYX_ERR(0, 148, __pyx_L1_error)
        }
        __pyx_t_22 = __Pyx_c_quot_npy_float64(__pyx_t_20, __pyx_t_21);
        __pyx_t_2 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_22); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 148, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_2);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 148, __pyx_L1_error);
        __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
        __pyx_t_2 = 0;
/* … */
        __pyx_t_18 = (__pyx_v_z - 1);
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_w.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_w.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 148, __pyx_L1_error)
        }
        __pyx_t_19 = (__pyx_v_z - 1);
        __pyx_t_17 = -1;
        if (__pyx_t_19 < 0) {
          __pyx_t_19 += __pyx_pybuffernd_dzn.diminfo[0].shape;
          if (unlikely(__pyx_t_19 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_19 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 148, __pyx_L1_error)
        }
        __pyx_t_2 = PyFloat_FromDouble((((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_w.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_w.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_dzn.diminfo[0].strides))) / 6.0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 148, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_2);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 148, __pyx_L1_error);
        __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
        __pyx_t_2 = 0;
 149: 
 150:             #put in diag
+151:             rinds+=[n*zmat+i]
      __pyx_t_2 = __Pyx_PyLong_From_int(((__pyx_v_n * __pyx_v_zmat) + __pyx_v_i)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 151, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_2);
      if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 151, __pyx_L1_error);
      __pyx_t_2 = 0;
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
/* … */
      __pyx_t_2 = __Pyx_PyLong_From_int(((__pyx_v_n * __pyx_v_zmat) + __pyx_v_i)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 151, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_2);
      if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 151, __pyx_L1_error);
      __pyx_t_2 = 0;
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
+152:             rdata+=[(w[z-1]*dzn[z-1]/3 if z>0    else 0)+
      __pyx_t_4 = (__pyx_v_z > 0);
      if (__pyx_t_4) {
        __pyx_t_18 = (__pyx_v_z - 1);
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_w.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_w.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 152, __pyx_L1_error)
        }
        __pyx_t_19 = (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_w.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_w.diminfo[0].strides));
        __pyx_t_18 = (__pyx_v_z - 1);
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_dzn.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 152, __pyx_L1_error)
        }
        __pyx_t_21 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_19), __Pyx_CIMAG(__pyx_t_19)), __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0));
        __pyx_t_20 = __pyx_t_npy_float64_complex_from_parts(3, 0);
        if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_20))) {
          PyErr_SetString(PyExc_ZeroDivisionError, "float division");
          __PYX_ERR(0, 152, __pyx_L1_error)
        }
        __pyx_t_22 = __Pyx_c_quot_npy_float64(__pyx_t_21, __pyx_t_20);
      } else {
        __pyx_t_22 = __pyx_t_npy_float64_complex_from_parts(0, 0);
      }
/* … */
      __pyx_t_23 = __Pyx_c_sum_npy_float64(__pyx_t_22, __pyx_t_20);
      __pyx_t_2 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_23); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 152, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 152, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_2);
      if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 152, __pyx_L1_error);
      __pyx_t_2 = 0;
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 152, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
/* … */
      __pyx_t_4 = (__pyx_v_z > 0);
      if (__pyx_t_4) {
        __pyx_t_19 = (__pyx_v_z - 1);
        __pyx_t_17 = -1;
        if (__pyx_t_19 < 0) {
          __pyx_t_19 += __pyx_pybuffernd_w.diminfo[0].shape;
          if (unlikely(__pyx_t_19 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_19 >= __pyx_pybuffernd_w.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 152, __pyx_L1_error)
        }
        __pyx_t_18 = (__pyx_v_z - 1);
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_dzn.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 152, __pyx_L1_error)
        }
        __pyx_t_20 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_w.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_w.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_dzn.diminfo[0].strides))) / 3.0);
      } else {
        __pyx_t_20 = 0.0;
      }
/* … */
      __pyx_t_2 = PyFloat_FromDouble((__pyx_t_20 + __pyx_t_21)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 152, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 152, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_2);
      if (__Pyx_PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 152, __pyx_L1_error);
      __pyx_t_2 = 0;
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 152, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
+153:                     (w[z  ]*dzn[z  ]/3 if z<nz-1 else 0)]
      __pyx_t_4 = (__pyx_v_z < (__pyx_v_nz - 1));
      if (__pyx_t_4) {
        __pyx_t_18 = __pyx_v_z;
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_w.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_w.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 153, __pyx_L1_error)
        }
        __pyx_t_19 = (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_w.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_w.diminfo[0].strides));
        __pyx_t_18 = __pyx_v_z;
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_dzn.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 153, __pyx_L1_error)
        }
        __pyx_t_21 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_19), __Pyx_CIMAG(__pyx_t_19)), __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0));
        __pyx_t_23 = __pyx_t_npy_float64_complex_from_parts(3, 0);
        if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_23))) {
          PyErr_SetString(PyExc_ZeroDivisionError, "float division");
          __PYX_ERR(0, 153, __pyx_L1_error)
        }
        __pyx_t_20 = __Pyx_c_quot_npy_float64(__pyx_t_21, __pyx_t_23);
      } else {
        __pyx_t_20 = __pyx_t_npy_float64_complex_from_parts(0, 0);
      }
/* … */
      __pyx_t_4 = (__pyx_v_z < (__pyx_v_nz - 1));
      if (__pyx_t_4) {
        __pyx_t_18 = __pyx_v_z;
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_w.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_w.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 153, __pyx_L1_error)
        }
        __pyx_t_19 = __pyx_v_z;
        __pyx_t_17 = -1;
        if (__pyx_t_19 < 0) {
          __pyx_t_19 += __pyx_pybuffernd_dzn.diminfo[0].shape;
          if (unlikely(__pyx_t_19 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_19 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 153, __pyx_L1_error)
        }
        __pyx_t_21 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_w.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_w.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_dzn.diminfo[0].strides))) / 3.0);
      } else {
        __pyx_t_21 = 0.0;
      }
 154: 
 155:             #put in right
+156:             if z<nz-1-dirichelet2:
      __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_z); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = __Pyx_PyLong_From_long((__pyx_v_nz - 1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = PyNumber_Subtract(__pyx_t_8, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyObject_RichCompare(__pyx_t_2, __pyx_t_6, Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (__pyx_t_4) {
/* … */
      }
    }
  }
/* … */
      __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_z); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = __Pyx_PyLong_From_long((__pyx_v_nz - 1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = PyNumber_Subtract(__pyx_t_8, ((PyObject *)__pyx_v_dirichelet2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyObject_RichCompare(__pyx_t_2, __pyx_t_6, Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 156, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (__pyx_t_4) {
/* … */
      }
    }
  }
+157:                 rinds+=[n*zmat+n+i]
        __pyx_t_8 = __Pyx_PyLong_From_int((((__pyx_v_n * __pyx_v_zmat) + __pyx_v_n) + __pyx_v_i)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 157, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_8);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 157, __pyx_L1_error);
        __pyx_t_8 = 0;
        __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 157, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
/* … */
        __pyx_t_8 = __Pyx_PyLong_From_int((((__pyx_v_n * __pyx_v_zmat) + __pyx_v_n) + __pyx_v_i)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 157, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_8);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 157, __pyx_L1_error);
        __pyx_t_8 = 0;
        __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_rinds, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 157, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF_SET(__pyx_v_rinds, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
+158:                 rdata+=[w[z  ]*dzn[z  ]/6]
        __pyx_t_18 = __pyx_v_z;
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_w.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_w.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 158, __pyx_L1_error)
        }
        __pyx_t_19 = (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_w.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_w.diminfo[0].strides));
        __pyx_t_18 = __pyx_v_z;
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_dzn.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 158, __pyx_L1_error)
        }
        __pyx_t_23 = __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_19), __Pyx_CIMAG(__pyx_t_19)), __pyx_t_npy_float64_complex_from_parts((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_dzn.diminfo[0].strides)), 0));
        __pyx_t_20 = __pyx_t_npy_float64_complex_from_parts(6, 0);
        if (unlikely(__Pyx_c_is_zero_npy_float64(__pyx_t_20))) {
          PyErr_SetString(PyExc_ZeroDivisionError, "float division");
          __PYX_ERR(0, 158, __pyx_L1_error)
        }
        __pyx_t_22 = __Pyx_c_quot_npy_float64(__pyx_t_23, __pyx_t_20);
        __pyx_t_8 = __pyx_PyComplex_FromComplex_CyTypedef(__pyx_t_22); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 158, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 158, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_8);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 158, __pyx_L1_error);
        __pyx_t_8 = 0;
        __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 158, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
/* … */
        __pyx_t_19 = __pyx_v_z;
        __pyx_t_17 = -1;
        if (__pyx_t_19 < 0) {
          __pyx_t_19 += __pyx_pybuffernd_w.diminfo[0].shape;
          if (unlikely(__pyx_t_19 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_19 >= __pyx_pybuffernd_w.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 158, __pyx_L1_error)
        }
        __pyx_t_18 = __pyx_v_z;
        __pyx_t_17 = -1;
        if (__pyx_t_18 < 0) {
          __pyx_t_18 += __pyx_pybuffernd_dzn.diminfo[0].shape;
          if (unlikely(__pyx_t_18 < 0)) __pyx_t_17 = 0;
        } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_dzn.diminfo[0].shape)) __pyx_t_17 = 0;
        if (unlikely(__pyx_t_17 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_17);
          __PYX_ERR(0, 158, __pyx_L1_error)
        }
        __pyx_t_8 = PyFloat_FromDouble((((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_w.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_w.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dzn.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_dzn.diminfo[0].strides))) / 6.0)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 158, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 158, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_8);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 158, __pyx_L1_error);
        __pyx_t_8 = 0;
        __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_rdata, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 158, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF_SET(__pyx_v_rdata, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
 159: 
+160:     return lil.asformat('csc')
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __pyx_v_lil;
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_csc};
    __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_asformat, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
  }
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  __Pyx_TraceReturnValue(__pyx_r, 185, 0, __PYX_ERR(0, 160, __pyx_L1_error));
  goto __pyx_L0;
/* … */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __pyx_v_lil;
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_csc};
    __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_asformat, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
  }
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  __Pyx_TraceReturnValue(__pyx_r, 185, 0, __PYX_ERR(0, 160, __pyx_L1_error));
  goto __pyx_L0;
 161: 
+162: def fem_eigsh(stiffness_matrix,load_matrix,
/* Python wrapper */
static PyObject *__pyx_pw_9pynitride_4core_3fem_5fem_eigsh(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_9pynitride_4core_3fem_4fem_eigsh, " Solve the eigenvalue problem.\n\n    For the mathematics/definitions of terms, see :ref:`FEM`.\n\n    Args:\n        stiffness_matrix: a stiffness matrix :math:`A` from :func:`pynitride.fem.assemble_stiffness_matrix`\n        load_matrix: a load matrix :math:`M` from :func:`pynitride.fem.assemble_load_matrix`\n        eigval_out: an array into which to fill the eigenvalues, should be shape (number of eigenvalues)\n        eigvec_out: an array into which to fill the eigenvectors, should be shape (number of eigenvalues x n x len(zn))\n        n: dimension of the differential equation\n        dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.\n        pairwise_GS: in the case of near degeneracy, the eigensolver often returns eigenvectors which are not totally\n            orthogonal.  For instance in a 6x6 wurtzite k.p problem with small CR coupling term, the states form pairs\n            that are very close in energy.  This option breaks the eigenvectors into those pairs [note, it just assumes\n            the pairing 0-1, 2-3, 4-5, etc, it doesn't actually check the energies], and in each pair, performs a single\n            Gram-Schmidt to ensure the nearly-degenerate eigenvectors are orthogonal.\n        ascending (bool): by default, energies are sorted from min to max, but for valence band problems,\n            you want the highest absolute energies first, so set `ascending=False`\n        *args: passed onto\n            `scipy.sparse.eigsh <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.eigsh.html>`_\n            along with the main arguments `A` (stiffness) and `M` (load)\n        **kwargs: passed onto\n            `scipy.sparse.eigsh <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.eigsh.html>`_\n            along with the main arguments `A` (stiffness) and `M` (load)\n\n    Returns:\n        None\n    ");
static PyMethodDef __pyx_mdef_9pynitride_4core_3fem_5fem_eigsh = {"fem_eigsh", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9pynitride_4core_3fem_5fem_eigsh, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9pynitride_4core_3fem_4fem_eigsh};
static PyObject *__pyx_pw_9pynitride_4core_3fem_5fem_eigsh(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_stiffness_matrix = 0;
  PyObject *__pyx_v_load_matrix = 0;
  PyObject *__pyx_v_eigval_out = 0;
  PyObject *__pyx_v_eigvec_out = 0;
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_dirichelet1 = 0;
  PyObject *__pyx_v_dirichelet2 = 0;
  PyObject *__pyx_v_pairwise_GS = 0;
  PyObject *__pyx_v_ascending = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fem_eigsh (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  __pyx_v_args = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 9, __pyx_nargs);
  if (unlikely(!__pyx_v_args)) {
    __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __Pyx_GOTREF(__pyx_v_args);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_stiffness_matrix,&__pyx_mstate_global->__pyx_n_u_load_matrix,&__pyx_mstate_global->__pyx_n_u_eigval_out,&__pyx_mstate_global->__pyx_n_u_eigvec_out,&__pyx_mstate_global->__pyx_n_u_n,&__pyx_mstate_global->__pyx_n_u_dirichelet1,&__pyx_mstate_global->__pyx_n_u_dirichelet2,&__pyx_mstate_global->__pyx_n_u_pairwise_GS,&__pyx_mstate_global->__pyx_n_u_ascending,0};
  PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 162, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        default:
        case  9:
        values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      const Py_ssize_t used_pos_args = (kwd_pos_args < 9) ? kwd_pos_args : 9;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, __pyx_kwds_len, "fem_eigsh", 1) < (0)) __PYX_ERR(0, 162, __pyx_L3_error)
/* … */
  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_DECREF(__pyx_v_args);
  __Pyx_DECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9pynitride_4core_3fem_4fem_eigsh(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_stiffness_matrix, PyObject *__pyx_v_load_matrix, PyObject *__pyx_v_eigval_out, PyObject *__pyx_v_eigvec_out, PyObject *__pyx_v_n, PyObject *__pyx_v_dirichelet1, PyObject *__pyx_v_dirichelet2, PyObject *__pyx_v_pairwise_GS, PyObject *__pyx_v_ascending, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_do_eigvecs = NULL;
  PyObject *__pyx_v_evec_slice = NULL;
  PyObject *__pyx_v_eigvecs = NULL;
  PyObject *__pyx_v_indarr = NULL;
  PyObject *__pyx_v_A = NULL;
  PyObject *__pyx_v_B = NULL;
  PyObject *__pyx_v_M = NULL;
  PyObject *__pyx_v_C_ = NULL;
  PyObject *__pyx_v_C = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[45]))
  __Pyx_TraceStartFunc("fem_eigsh", __pyx_f[0], 162, 0, 0, 0, __PYX_ERR(0, 162, __pyx_L1_error));
  __Pyx_INCREF(__pyx_v_eigvec_out);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_TraceReturnValue(__pyx_r, 0, 0, __PYX_ERR(0, 162, __pyx_L1_error));
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 162, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.fem_eigsh", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_do_eigvecs);
  __Pyx_XDECREF(__pyx_v_evec_slice);
  __Pyx_XDECREF(__pyx_v_eigvecs);
  __Pyx_XDECREF(__pyx_v_indarr);
  __Pyx_XDECREF(__pyx_v_A);
  __Pyx_XDECREF(__pyx_v_B);
  __Pyx_XDECREF(__pyx_v_M);
  __Pyx_XDECREF(__pyx_v_C_);
  __Pyx_XDECREF(__pyx_v_C);
  __Pyx_XDECREF(__pyx_v_eigvec_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9pynitride_4core_3fem_5fem_eigsh, 0, __pyx_mstate_global->__pyx_n_u_fem_eigsh, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[45])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[8]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_fem_eigsh, __pyx_t_4) < (0)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 163:               eigval_out,eigvec_out,n,
+164:               dirichelet1=False,dirichelet2=False,pairwise_GS=False,ascending=True,*args,**kwargs):
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_True)));
      for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fem_eigsh", 0, 5, 9, i); __PYX_ERR(0, 162, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        default:
        case  9:
        values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 162, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 162, __pyx_L3_error)
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 162, __pyx_L3_error)
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 162, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 162, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 162, __pyx_L3_error)
        break;
        case  4:
        case  3:
        case  2:
        case  1:
        case  0:
        goto __pyx_L5_argtuple_error;
      }
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_True)));
    }
    __pyx_v_stiffness_matrix = values[0];
    __pyx_v_load_matrix = values[1];
    __pyx_v_eigval_out = values[2];
    __pyx_v_eigvec_out = values[3];
    __pyx_v_n = values[4];
    __pyx_v_dirichelet1 = values[5];
    __pyx_v_dirichelet2 = values[6];
    __pyx_v_pairwise_GS = values[7];
    __pyx_v_ascending = values[8];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fem_eigsh", 0, 5, 9, __pyx_nargs); __PYX_ERR(0, 162, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("pynitride.core.fem.fem_eigsh", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9pynitride_4core_3fem_4fem_eigsh(__pyx_self, __pyx_v_stiffness_matrix, __pyx_v_load_matrix, __pyx_v_eigval_out, __pyx_v_eigvec_out, __pyx_v_n, __pyx_v_dirichelet1, __pyx_v_dirichelet2, __pyx_v_pairwise_GS, __pyx_v_ascending, __pyx_v_args, __pyx_v_kwargs);
 165:     """ Solve the eigenvalue problem.
 166: 
 167:     For the mathematics/definitions of terms, see :ref:`FEM`.
 168: 
 169:     Args:
 170:         stiffness_matrix: a stiffness matrix :math:`A` from :func:`pynitride.fem.assemble_stiffness_matrix`
 171:         load_matrix: a load matrix :math:`M` from :func:`pynitride.fem.assemble_load_matrix`
 172:         eigval_out: an array into which to fill the eigenvalues, should be shape (number of eigenvalues)
 173:         eigvec_out: an array into which to fill the eigenvectors, should be shape (number of eigenvalues x n x len(zn))
 174:         n: dimension of the differential equation
 175:         dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.
 176:         pairwise_GS: in the case of near degeneracy, the eigensolver often returns eigenvectors which are not totally
 177:             orthogonal.  For instance in a 6x6 wurtzite k.p problem with small CR coupling term, the states form pairs
 178:             that are very close in energy.  This option breaks the eigenvectors into those pairs [note, it just assumes
 179:             the pairing 0-1, 2-3, 4-5, etc, it doesn't actually check the energies], and in each pair, performs a single
 180:             Gram-Schmidt to ensure the nearly-degenerate eigenvectors are orthogonal.
 181:         ascending (bool): by default, energies are sorted from min to max, but for valence band problems,
 182:             you want the highest absolute energies first, so set `ascending=False`
 183:         *args: passed onto
 184:             `scipy.sparse.eigsh <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.eigsh.html>`_
 185:             along with the main arguments `A` (stiffness) and `M` (load)
 186:         **kwargs: passed onto
 187:             `scipy.sparse.eigsh <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.eigsh.html>`_
 188:             along with the main arguments `A` (stiffness) and `M` (load)
 189: 
 190:     Returns:
 191:         None
 192:     """
+193:     do_eigvecs=(eigvec_out is not False)
  __pyx_t_1 = (__pyx_v_eigvec_out != Py_False);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_do_eigvecs = __pyx_t_2;
  __pyx_t_2 = 0;
+194:     if do_eigvecs:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_do_eigvecs); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 194, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+195:         evec_slice=slice(dirichelet1,eigvec_out.shape[-1]-dirichelet2)
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_eigvec_out, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, -1L, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Subtract(__pyx_t_3, __pyx_v_dirichelet2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PySlice_New(__pyx_v_dirichelet1, __pyx_t_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_evec_slice = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+196:         eigval_out[:],eigvecs=eigsh(A=stiffness_matrix,M=load_matrix,*args,**kwargs)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_eigsh); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_A, __pyx_v_stiffness_matrix) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_M, __pyx_v_load_matrix) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_kwargs) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_v_args, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
      PyObject* sequence = __pyx_t_4;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 196, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_3);
      } else {
        __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_3);
      }
      #else
      __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 196, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5);
      index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L5_unpacking_done;
      __pyx_L4_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 196, __pyx_L1_error)
      __pyx_L5_unpacking_done:;
    }
    if (__Pyx_PyObject_SetSlice(__pyx_v_eigval_out, __pyx_t_2, 0, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[0], 0, 0, 1) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_eigvecs = __pyx_t_3;
    __pyx_t_3 = 0;
 197:     else:
+198:         eigval_out[:]=eigsh(A=stiffness_matrix,M=load_matrix,return_eigenvectors=False,*args,**kwargs)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_eigsh); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_A, __pyx_v_stiffness_matrix) < (0)) __PYX_ERR(0, 198, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_M, __pyx_v_load_matrix) < (0)) __PYX_ERR(0, 198, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return_eigenvectors, Py_False) < (0)) __PYX_ERR(0, 198, __pyx_L1_error)
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
    if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_v_kwargs) < (0)) __PYX_ERR(0, 198, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_v_args, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__Pyx_PyObject_SetSlice(__pyx_v_eigval_out, __pyx_t_2, 0, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[0], 0, 0, 1) < (0)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L3:;
 199: 
 200:     # Re-order the energies
+201:     indarr=np.argsort(eigval_out if ascending else -eigval_out)
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_argsort); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_ascending); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 201, __pyx_L1_error)
  if (__pyx_t_1) {
    __Pyx_INCREF(__pyx_v_eigval_out);
    __pyx_t_4 = __pyx_v_eigval_out;
  } else {
    __pyx_t_7 = PyNumber_Negative(__pyx_v_eigval_out); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 201, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = __pyx_t_7;
    __pyx_t_7 = 0;
  }
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_indarr = __pyx_t_2;
  __pyx_t_2 = 0;
+202:     eigval_out[:]=eigval_out[indarr]
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_eigval_out, __pyx_v_indarr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyObject_SetSlice(__pyx_v_eigval_out, __pyx_t_2, 0, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[0], 0, 0, 1) < (0)) __PYX_ERR(0, 202, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 203: 
+204:     if do_eigvecs:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_do_eigvecs); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 204, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+205:         eigvecs=eigvecs[:,indarr]
    if (unlikely(!__pyx_v_eigvecs)) { __Pyx_RaiseUnboundLocalError("eigvecs"); __PYX_ERR(0, 205, __pyx_L1_error) }
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 205, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_indarr);
    __Pyx_GIVEREF(__pyx_v_indarr);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indarr) != (0)) __PYX_ERR(0, 205, __pyx_L1_error);
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_eigvecs, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_eigvecs, __pyx_t_5);
    __pyx_t_5 = 0;
 206: 
 207:         # If desired, re-orthogonalize within each pair of states
+208:         if pairwise_GS:
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_pairwise_GS); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 208, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
    }
+209:             assert eigvecs.shape[1] % 2 == 0, \
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(__pyx_assertions_enabled())) {
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_eigvecs, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_5, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyLong_RemainderObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_1 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) {
          __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_AssertionError))), __pyx_mstate_global->__pyx_kp_u_Number_of_eigenvalues_must_be_ev, 0, 0);
          __PYX_ERR(0, 209, __pyx_L1_error)
        }
      }
      #else
      if ((1)); else __PYX_ERR(0, 209, __pyx_L1_error)
      #endif
 210:                 "Number of eigenvalues must be even for pairwise re-orthogonalization"
 211:             # Grab the first (A) and second (B) of every pair
+212:             A=eigvecs[:,0::2]
  __pyx_mstate_global->__pyx_slice[1] = PySlice_New(__pyx_mstate_global->__pyx_int_0, Py_None, __pyx_mstate_global->__pyx_int_2); if (unlikely(!__pyx_mstate_global->__pyx_slice[1])) __PYX_ERR(0, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_slice[1]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[1]);
/* … */
      __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_eigvecs, __pyx_mstate_global->__pyx_tuple[1]); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_v_A = __pyx_t_5;
      __pyx_t_5 = 0;
  __pyx_mstate_global->__pyx_tuple[1] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_slice[1]); if (unlikely(!__pyx_mstate_global->__pyx_tuple[1])) __PYX_ERR(0, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[1]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[1]);
+213:             B=eigvecs[:,1::2]
  __pyx_mstate_global->__pyx_slice[2] = PySlice_New(__pyx_mstate_global->__pyx_int_1, Py_None, __pyx_mstate_global->__pyx_int_2); if (unlikely(!__pyx_mstate_global->__pyx_slice[2])) __PYX_ERR(0, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_slice[2]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[2]);
/* … */
      __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_eigvecs, __pyx_mstate_global->__pyx_tuple[2]); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 213, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_v_B = __pyx_t_5;
      __pyx_t_5 = 0;
  __pyx_mstate_global->__pyx_tuple[2] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_slice[2]); if (unlikely(!__pyx_mstate_global->__pyx_tuple[2])) __PYX_ERR(0, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[2]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[2]);
 214: 
 215:             # Gram-Schmidt them
+216:             M=load_matrix
      __Pyx_INCREF(__pyx_v_load_matrix);
      __pyx_v_M = __pyx_v_load_matrix;
+217:             C_=B-np.sum(A.conj()*(M@B),axis=0)*A
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 217, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sum); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 217, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_7 = __pyx_v_A;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_conj, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 217, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_7 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_M, __pyx_v_B); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 217, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = PyNumber_Multiply(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 217, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        assert(__pyx_t_2);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
        __pyx_t_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_9};
        __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 217, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_axis, __pyx_mstate_global->__pyx_int_0, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 217, __pyx_L1_error)
        __pyx_t_5 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 217, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_v_A); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 217, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_Subtract(__pyx_v_B, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 217, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_C_ = __pyx_t_5;
      __pyx_t_5 = 0;
+218:             C=C_/np.sqrt(np.sum(C_.conj()*(M@C_),axis=0))
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_sqrt); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sum); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_11 = __pyx_v_C_;
      __Pyx_INCREF(__pyx_t_11);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_conj, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_11 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_M, __pyx_v_C_); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = PyNumber_Multiply(__pyx_t_4, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_8 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_10);
        assert(__pyx_t_2);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
        __pyx_t_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_12};
        __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 218, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_axis, __pyx_mstate_global->__pyx_int_0, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 218, __pyx_L1_error)
        __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 218, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __pyx_t_8 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
        __pyx_t_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
        __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 218, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_9 = __Pyx_PyNumber_Divide(__pyx_v_C_, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_C = __pyx_t_9;
      __pyx_t_9 = 0;
 219: 
 220:             # Put the result back in
+221:             eigvecs[:,1::2]=C
      if (unlikely((PyObject_SetItem(__pyx_v_eigvecs, __pyx_mstate_global->__pyx_tuple[2], __pyx_v_C) < 0))) __PYX_ERR(0, 221, __pyx_L1_error)
 222: 
 223:         # Reshape the eigenvectors to axes of (z, comp, eig)
+224:         eigvecs.shape=(int(eigvecs.shape[0]/n),n,eigvecs.shape[1])
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_eigvecs, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_9, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_v_n); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyNumber_Int(__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_eigvecs, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_9, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_5);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5) != (0)) __PYX_ERR(0, 224, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_n);
    __Pyx_GIVEREF(__pyx_v_n);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_n) != (0)) __PYX_ERR(0, 224, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_7);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_7) != (0)) __PYX_ERR(0, 224, __pyx_L1_error);
    __pyx_t_5 = 0;
    __pyx_t_7 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_eigvecs, __pyx_mstate_global->__pyx_n_u_shape, __pyx_t_9) < (0)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 225: 
 226:         # Then assign it to the output in axes of (eig, comp, z)
 227:         #if n==1: eigvec_out=np.expand_dims(eigvec_out,1)
+228:         if len(eigvec_out.shape)!=len(eigvecs.shape):
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_eigvec_out, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_13 = PyObject_Length(__pyx_t_9); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_eigvecs, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_14 = PyObject_Length(__pyx_t_9); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_1 = (__pyx_t_13 != __pyx_t_14);
    if (__pyx_t_1) {
/* … */
    }
+229:             eigvec_out=np.expand_dims(eigvec_out,1)
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 229, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_expand_dims); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 229, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_8 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
        assert(__pyx_t_7);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
        __pyx_t_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_v_eigvec_out, __pyx_mstate_global->__pyx_int_1};
        __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 229, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __Pyx_DECREF_SET(__pyx_v_eigvec_out, __pyx_t_9);
      __pyx_t_9 = 0;
+230:         eigvec_out[:,:,evec_slice]=eigvecs.T[:,:,:]
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_eigvecs, __pyx_mstate_global->__pyx_n_u_T); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[3]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_v_evec_slice)) { __Pyx_RaiseUnboundLocalError("evec_slice"); __PYX_ERR(0, 230, __pyx_L1_error) }
    __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 230, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 230, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_evec_slice);
    __Pyx_GIVEREF(__pyx_v_evec_slice);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_evec_slice) != (0)) __PYX_ERR(0, 230, __pyx_L1_error);
    if (unlikely((PyObject_SetItem(__pyx_v_eigvec_out, __pyx_t_9, __pyx_t_3) < 0))) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[3] = PyTuple_Pack(3, __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_slice[0]); if (unlikely(!__pyx_mstate_global->__pyx_tuple[3])) __PYX_ERR(0, 230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[3]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[3]);
 231: 
 232:         # Zeros at dirichelet boundaries
+233:         if dirichelet1:
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_dirichelet1); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 233, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
    }
+234:             eigvec_out[:,:,0]=0
      if (unlikely((PyObject_SetItem(__pyx_v_eigvec_out, __pyx_mstate_global->__pyx_tuple[4], __pyx_mstate_global->__pyx_int_0) < 0))) __PYX_ERR(0, 234, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[4] = PyTuple_Pack(3, __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[4])) __PYX_ERR(0, 234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[4]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[4]);
+235:         if dirichelet2:
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_dirichelet2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 235, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
    }
+236:             eigvec_out[:,:,-1]=0
      if (unlikely((PyObject_SetItem(__pyx_v_eigvec_out, __pyx_mstate_global->__pyx_tuple[5], __pyx_mstate_global->__pyx_int_0) < 0))) __PYX_ERR(0, 236, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[5] = PyTuple_Pack(3, __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_int_neg_1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[5])) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[5]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[5]);
 237: 
+238: def fem_solve(stiffness_matrix,load_matrix,load_vec,val_out,n,
/* Python wrapper */
static PyObject *__pyx_pw_9pynitride_4core_3fem_7fem_solve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_9pynitride_4core_3fem_6fem_solve, " Solve the linear matrix equation\n\n    For the mathematics/definitions of terms, see :ref:`FEM`.\n\n    Args:\n        stiffness_matrix: a stiffness matrix :math:`A` from :func:`pynitride.fem.assemble_stiffness_matrix`\n        load_matrix: a load matrix :math:`M` from :func:`pynitride.fem.assemble_load_matrix`\n        load_vec: the load vector :math:`b`, should be shape (len(zn))\n        val_out: an array into which to fill the solution, should be shape (len(zn))\n        n: dimension of the differential equation\n        dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.\n        *args: passed onto\n            `scipy.sparse.spsolve <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html>`_\n            along with the main arguments `A` (stiffness) and `M@b` (load)\n        **kwargs: passed onto\n            `scipy.sparse.spsolve <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html>`_\n            along with the main arguments `A` (stiffness) and `M@b` (load)\n\n    Returns:\n        the solution (same shape as `load_vec`)\n    ");
static PyMethodDef __pyx_mdef_9pynitride_4core_3fem_7fem_solve = {"fem_solve", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9pynitride_4core_3fem_7fem_solve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9pynitride_4core_3fem_6fem_solve};
static PyObject *__pyx_pw_9pynitride_4core_3fem_7fem_solve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_stiffness_matrix = 0;
  PyObject *__pyx_v_load_matrix = 0;
  PyObject *__pyx_v_load_vec = 0;
  PyObject *__pyx_v_val_out = 0;
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_dirichelet1 = 0;
  PyObject *__pyx_v_dirichelet2 = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fem_solve (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  __pyx_v_args = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 7, __pyx_nargs);
  if (unlikely(!__pyx_v_args)) {
    __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __Pyx_GOTREF(__pyx_v_args);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_stiffness_matrix,&__pyx_mstate_global->__pyx_n_u_load_matrix,&__pyx_mstate_global->__pyx_n_u_load_vec,&__pyx_mstate_global->__pyx_n_u_val_out,&__pyx_mstate_global->__pyx_n_u_n,&__pyx_mstate_global->__pyx_n_u_dirichelet1,&__pyx_mstate_global->__pyx_n_u_dirichelet2,0};
  PyObject* values[7] = {0,0,0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 238, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        default:
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 238, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 238, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 238, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 238, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 238, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 238, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 238, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      const Py_ssize_t used_pos_args = (kwd_pos_args < 7) ? kwd_pos_args : 7;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, __pyx_kwds_len, "fem_solve", 1) < (0)) __PYX_ERR(0, 238, __pyx_L3_error)
/* … */
  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_DECREF(__pyx_v_args);
  __Pyx_DECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9pynitride_4core_3fem_6fem_solve(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_stiffness_matrix, PyObject *__pyx_v_load_matrix, PyObject *__pyx_v_load_vec, PyObject *__pyx_v_val_out, PyObject *__pyx_v_n, PyObject *__pyx_v_dirichelet1, PyObject *__pyx_v_dirichelet2, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_vslice = NULL;
  PyObject *__pyx_v_load = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[46]))
  __Pyx_TraceStartFunc("fem_solve", __pyx_f[0], 238, 0, 0, 0, __PYX_ERR(0, 238, __pyx_L1_error));
  __Pyx_INCREF(__pyx_v_val_out);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_TraceException(__pyx_lineno, 0, 0);
  #if CYTHON_USE_SYS_MONITORING
  __Pyx_TraceExceptionUnwind(0, 0);
  #else
  __Pyx_TraceReturnValue(NULL, 0, 0, __PYX_ERR(0, 238, __pyx_L1_error));
  #endif
  __Pyx_AddTraceback("pynitride.core.fem.fem_solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_vslice);
  __Pyx_XDECREF(__pyx_v_load);
  __Pyx_XDECREF(__pyx_v_val_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_PyMonitoring_ExitScope(0);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9pynitride_4core_3fem_7fem_solve, 0, __pyx_mstate_global->__pyx_n_u_fem_solve, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[46])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 238, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[7]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_fem_solve, __pyx_t_4) < (0)) __PYX_ERR(0, 238, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+239:               dirichelet1=False,dirichelet2=False,*args,**kwargs):
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fem_solve", 0, 5, 7, i); __PYX_ERR(0, 238, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        default:
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 238, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 238, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 238, __pyx_L3_error)
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 238, __pyx_L3_error)
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 238, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 238, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 238, __pyx_L3_error)
        break;
        case  4:
        case  3:
        case  2:
        case  1:
        case  0:
        goto __pyx_L5_argtuple_error;
      }
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
    }
    __pyx_v_stiffness_matrix = values[0];
    __pyx_v_load_matrix = values[1];
    __pyx_v_load_vec = values[2];
    __pyx_v_val_out = values[3];
    __pyx_v_n = values[4];
    __pyx_v_dirichelet1 = values[5];
    __pyx_v_dirichelet2 = values[6];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fem_solve", 0, 5, 7, __pyx_nargs); __PYX_ERR(0, 238, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("pynitride.core.fem.fem_solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9pynitride_4core_3fem_6fem_solve(__pyx_self, __pyx_v_stiffness_matrix, __pyx_v_load_matrix, __pyx_v_load_vec, __pyx_v_val_out, __pyx_v_n, __pyx_v_dirichelet1, __pyx_v_dirichelet2, __pyx_v_args, __pyx_v_kwargs);
 240:     """ Solve the linear matrix equation
 241: 
 242:     For the mathematics/definitions of terms, see :ref:`FEM`.
 243: 
 244:     Args:
 245:         stiffness_matrix: a stiffness matrix :math:`A` from :func:`pynitride.fem.assemble_stiffness_matrix`
 246:         load_matrix: a load matrix :math:`M` from :func:`pynitride.fem.assemble_load_matrix`
 247:         load_vec: the load vector :math:`b`, should be shape (len(zn))
 248:         val_out: an array into which to fill the solution, should be shape (len(zn))
 249:         n: dimension of the differential equation
 250:         dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.
 251:         *args: passed onto
 252:             `scipy.sparse.spsolve <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html>`_
 253:             along with the main arguments `A` (stiffness) and `M@b` (load)
 254:         **kwargs: passed onto
 255:             `scipy.sparse.spsolve <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html>`_
 256:             along with the main arguments `A` (stiffness) and `M@b` (load)
 257: 
 258:     Returns:
 259:         the solution (same shape as `load_vec`)
 260:     """
+261:     vslice=slice(dirichelet1*n,dirichelet1*n+stiffness_matrix.shape[0])
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_dirichelet1, __pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyNumber_Multiply(__pyx_v_dirichelet1, __pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_stiffness_matrix, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PySlice_New(__pyx_t_1, __pyx_t_3, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_vslice = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+262:     if load_matrix is None:
  __pyx_t_5 = (__pyx_v_load_matrix == Py_None);
  if (__pyx_t_5) {
/* … */
    goto __pyx_L3;
  }
+263:         load= load_vec#[vslice]
    __Pyx_INCREF(__pyx_v_load_vec);
    __pyx_v_load = __pyx_v_load_vec;
 264:     else:
+265:         load=load_matrix @ load_vec[vslice]
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_load_vec, __pyx_v_vslice); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_load_matrix, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_load = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L3:;
+266:     if val_out is None:
  __pyx_t_5 = (__pyx_v_val_out == Py_None);
  if (__pyx_t_5) {
/* … */
  }
+267:         val_out=np.zeros_like(load_vec,dtype=stiffness_matrix.dtype)
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_zeros_like); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_stiffness_matrix, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_v_load_vec};
      __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 267, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_1, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 267, __pyx_L1_error)
      __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 267, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF_SET(__pyx_v_val_out, __pyx_t_3);
    __pyx_t_3 = 0;
+268:     val_out[vslice]=spsolve(stiffness_matrix,load,*args,**kwargs)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_spsolve); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_stiffness_matrix);
  __Pyx_GIVEREF(__pyx_v_stiffness_matrix);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_stiffness_matrix) != (0)) __PYX_ERR(0, 268, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_load);
  __Pyx_GIVEREF(__pyx_v_load);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_load) != (0)) __PYX_ERR(0, 268, __pyx_L1_error);
  __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely((PyObject_SetItem(__pyx_v_val_out, __pyx_v_vslice, __pyx_t_1) < 0))) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 269:     # Zeros at dirichelet boundaries
+270:     if dirichelet1:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_dirichelet1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 270, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
  }
+271:         val_out[0]=0
    if (unlikely((__Pyx_SetItemInt(__pyx_v_val_out, 0, __pyx_mstate_global->__pyx_int_0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument) < 0))) __PYX_ERR(0, 271, __pyx_L1_error)
+272:     if dirichelet2:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_dirichelet2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 272, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
  }
+273:         val_out[-1]=0
    if (unlikely((__Pyx_SetItemInt(__pyx_v_val_out, -1L, __pyx_mstate_global->__pyx_int_0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, 1, __Pyx_ReferenceSharing_FunctionArgument) < 0))) __PYX_ERR(0, 273, __pyx_L1_error)
+274:     return val_out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_val_out);
  __pyx_r = __pyx_v_val_out;
  __Pyx_TraceReturnValue(__pyx_r, 61, 0, __PYX_ERR(0, 274, __pyx_L1_error));
  goto __pyx_L0;
 275: 
 276: 
+277: def fem_get_error(stiffness_matrix,load_matrix,load_vec,test,err_out,n,
/* Python wrapper */
static PyObject *__pyx_pw_9pynitride_4core_3fem_9fem_get_error(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_9pynitride_4core_3fem_8fem_get_error, " Finds the signed error vector of the test solution.\n\n    The error is :math:`b-M^{-1}Ax`, where :math:`x` is the supplied test solution.\n    For the mathematics/definitions of terms, see :ref:`FEM`.\n\n    Args:\n        stiffness_matrix: a stiffness matrix :math:`A` from :func:`pynitride.fem.assemble_stiffness_matrix`\n        load_matrix: a load matrix :math:`M` from :func:`pynitride.fem.assemble_load_matrix`\n        load_vec: the load vector :math:`b`, should be shape (len(zn))\n        test: the test solution vector :math:`x`, should be shape (len(zn))\n        err_out: an array into which to fill the error, should be shape (len(zn))\n        n: dimension of the differential equation\n        dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.\n        *args: passed onto\n            `scipy.sparse.spsolve <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html>`_\n            along with the main arguments `M` and `A@x`\n        **kwargs: passed onto\n            `scipy.sparse.spsolve <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html>`_\n            along with the main arguments `M` and `A@x`\n\n    Returns:\n        the error (same shape as `test`)\n    ");
static PyMethodDef __pyx_mdef_9pynitride_4core_3fem_9fem_get_error = {"fem_get_error", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9pynitride_4core_3fem_9fem_get_error, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9pynitride_4core_3fem_8fem_get_error};
static PyObject *__pyx_pw_9pynitride_4core_3fem_9fem_get_error(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_stiffness_matrix = 0;
  PyObject *__pyx_v_load_matrix = 0;
  PyObject *__pyx_v_load_vec = 0;
  PyObject *__pyx_v_test = 0;
  PyObject *__pyx_v_err_out = 0;
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_dirichelet1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_dirichelet2 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_args = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fem_get_error (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  __pyx_v_args = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 8, __pyx_nargs);
  if (unlikely(!__pyx_v_args)) {
    __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __Pyx_GOTREF(__pyx_v_args);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_stiffness_matrix,&__pyx_mstate_global->__pyx_n_u_load_matrix,&__pyx_mstate_global->__pyx_n_u_load_vec,&__pyx_mstate_global->__pyx_n_u_test,&__pyx_mstate_global->__pyx_n_u_err_out,&__pyx_mstate_global->__pyx_n_u_n,&__pyx_mstate_global->__pyx_n_u_dirichelet1,&__pyx_mstate_global->__pyx_n_u_dirichelet2,0};
  PyObject* values[8] = {0,0,0,0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 277, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        default:
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      const Py_ssize_t used_pos_args = (kwd_pos_args < 8) ? kwd_pos_args : 8;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, __pyx_kwds_len, "fem_get_error", 1) < (0)) __PYX_ERR(0, 277, __pyx_L3_error)
/* … */
  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_DECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9pynitride_4core_3fem_8fem_get_error(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_stiffness_matrix, PyObject *__pyx_v_load_matrix, PyObject *__pyx_v_load_vec, PyObject *__pyx_v_test, PyObject *__pyx_v_err_out, PyObject *__pyx_v_n, PyObject *__pyx_v_dirichelet1, CYTHON_UNUSED PyObject *__pyx_v_dirichelet2, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_vslice = NULL;
  PyObject *__pyx_v_comp_load_vec = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_TraceDeclarationsFunc
  __Pyx_TraceFrameInit(((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[47]))
  __Pyx_TraceStartFunc("fem_get_error", __pyx_f[0], 277, 0, 0, 0, __PYX_ERR(0, 277, __pyx_L1_error));
  __Pyx_INCREF(__pyx_v_err_out);
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9pynitride_4core_3fem_9fem_get_error, 0, __pyx_mstate_global->__pyx_n_u_fem_get_error, NULL, __pyx_mstate_global->__pyx_n_u_pynitride_core_fem, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[47])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[7]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_fem_get_error, __pyx_t_4) < (0)) __PYX_ERR(0, 277, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+278:                   dirichelet1=False,dirichelet2=False,*args,**kwargs):
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      for (Py_ssize_t i = __pyx_nargs; i < 6; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fem_get_error", 0, 6, 8, i); __PYX_ERR(0, 277, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        default:
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 277, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 277, __pyx_L3_error)
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 277, __pyx_L3_error)
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 277, __pyx_L3_error)
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 277, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 277, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 277, __pyx_L3_error)
        break;
        case  5:
        case  4:
        case  3:
        case  2:
        case  1:
        case  0:
        goto __pyx_L5_argtuple_error;
      }
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
    }
    __pyx_v_stiffness_matrix = values[0];
    __pyx_v_load_matrix = values[1];
    __pyx_v_load_vec = values[2];
    __pyx_v_test = values[3];
    __pyx_v_err_out = values[4];
    __pyx_v_n = values[5];
    __pyx_v_dirichelet1 = values[6];
    __pyx_v_dirichelet2 = values[7];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fem_get_error", 0, 6, 8, __pyx_nargs); __PYX_ERR(0, 277, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
  __Pyx_XDECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("pynitride.core.fem.fem_get_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9pynitride_4core_3fem_8fem_get_error(__pyx_self, __pyx_v_stiffness_matrix, __pyx_v_load_matrix, __pyx_v_load_vec, __pyx_v_test, __pyx_v_err_out, __pyx_v_n, __pyx_v_dirichelet1, __pyx_v_dirichelet2, __pyx_v_args, __pyx_v_kwargs);
 279:     """ Finds the signed error vector of the test solution.
 280: 
 281:     The error is :math:`b-M^{-1}Ax`, where :math:`x` is the supplied test solution.
 282:     For the mathematics/definitions of terms, see :ref:`FEM`.
 283: 
 284:     Args:
 285:         stiffness_matrix: a stiffness matrix :math:`A` from :func:`pynitride.fem.assemble_stiffness_matrix`
 286:         load_matrix: a load matrix :math:`M` from :func:`pynitride.fem.assemble_load_matrix`
 287:         load_vec: the load vector :math:`b`, should be shape (len(zn))
 288:         test: the test solution vector :math:`x`, should be shape (len(zn))
 289:         err_out: an array into which to fill the error, should be shape (len(zn))
 290:         n: dimension of the differential equation
 291:         dirichelet1,dirichelet2 (bool): whether to treat boundary 1, 2 as Dirichelet (True, default) or Neumann.
 292:         *args: passed onto
 293:             `scipy.sparse.spsolve <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html>`_
 294:             along with the main arguments `M` and `A@x`
 295:         **kwargs: passed onto
 296:             `scipy.sparse.spsolve <https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html>`_
 297:             along with the main arguments `M` and `A@x`
 298: 
 299:     Returns:
 300:         the error (same shape as `test`)
 301:     """
+302:     vslice=slice(dirichelet1*n,dirichelet1*n+stiffness_matrix.shape[0])
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_dirichelet1, __pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyNumber_Multiply(__pyx_v_dirichelet1, __pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_stiffness_matrix, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PySlice_New(__pyx_t_1, __pyx_t_3, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_vslice = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+303:     comp_load_vec=spsolve(load_matrix,stiffness_matrix @ test[vslice])
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_spsolve); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_test, __pyx_v_vslice); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_stiffness_matrix, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_load_matrix, __pyx_t_5};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_v_comp_load_vec = __pyx_t_4;
  __pyx_t_4 = 0;
+304:     if err_out is None:
  __pyx_t_7 = (__pyx_v_err_out == Py_None);
  if (__pyx_t_7) {
/* … */
  }
+305:         err_out=np.zeros_like(load_vec,dtype=stiffness_matrix.dtype)
    __pyx_t_1 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_zeros_like); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_stiffness_matrix, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_1);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_v_load_vec};
      __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 305, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_5, __pyx_t_2, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 305, __pyx_L1_error)
      __pyx_t_4 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 305, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF_SET(__pyx_v_err_out, __pyx_t_4);
    __pyx_t_4 = 0;
+306:     err_out[vslice]=load_vec[vslice]-comp_load_vec
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_load_vec, __pyx_v_vslice); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_v_comp_load_vec); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely((PyObject_SetItem(__pyx_v_err_out, __pyx_v_vslice, __pyx_t_3) < 0))) __PYX_ERR(0, 306, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+307:     return err_out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_err_out);
  __pyx_r = __pyx_v_err_out;
  __Pyx_TraceReturnValue(__pyx_r, 45, 0, __PYX_ERR(0, 307, __pyx_L1_error));
  goto __pyx_L0;