Generated by Cython 0.29.21

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

+001: cimport numpy as np
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+002: import numpy as np
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 003: from libc.math cimport sqrt, exp, pi, floor, ceil
 004: from cython.parallel import prange, parallel
 005: from libc.stdlib cimport abort, malloc, free
 006: cimport openmp
 007: 
 008: ctypedef fused float_t:
 009:     np.float64_t
 010:     np.float32_t
 011: 
 012: ctypedef np.uint64_t uint_t
 013: ctypedef np.complex128_t complex_t
 014: 
 015: DEF FLOAT_MAX = 1.7976931348623157e+308
 016: DEF NO_VAR = -1.0
 017: 
+018: cdef float_t min_float(float_t* array, int a) nogil:
static __pyx_t_5numpy_float64_t __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_min_float(__pyx_t_5numpy_float64_t *__pyx_v_array, int __pyx_v_a) {
  int __pyx_v_i;
  __pyx_t_5numpy_float64_t __pyx_v_mv;
  __pyx_t_5numpy_float64_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

static __pyx_t_5numpy_float32_t __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_min_float(__pyx_t_5numpy_float32_t *__pyx_v_array, int __pyx_v_a) {
  int __pyx_v_i;
  __pyx_t_5numpy_float32_t __pyx_v_mv;
  __pyx_t_5numpy_float32_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 019:     cdef:
 020:         int i
+021:         float_t mv = array[0]
  __pyx_v_mv = (__pyx_v_array[0]);
/* … */
  __pyx_v_mv = (__pyx_v_array[0]);
+022:     for i in range(a):
  __pyx_t_1 = __pyx_v_a;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
/* … */
  __pyx_t_1 = __pyx_v_a;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+023:         if array[i] < mv:
    __pyx_t_4 = (((__pyx_v_array[__pyx_v_i]) < __pyx_v_mv) != 0);
    if (__pyx_t_4) {
/* … */
    }
  }
/* … */
    __pyx_t_4 = (((__pyx_v_array[__pyx_v_i]) < __pyx_v_mv) != 0);
    if (__pyx_t_4) {
/* … */
    }
  }
+024:             mv = array[i]
      __pyx_v_mv = (__pyx_v_array[__pyx_v_i]);
/* … */
      __pyx_v_mv = (__pyx_v_array[__pyx_v_i]);
+025:     return mv
  __pyx_r = __pyx_v_mv;
  goto __pyx_L0;
/* … */
  __pyx_r = __pyx_v_mv;
  goto __pyx_L0;
 026: 
+027: cdef float_t max_float(float_t* array, int a) nogil:
static __pyx_t_5numpy_float64_t __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_max_float(__pyx_t_5numpy_float64_t *__pyx_v_array, int __pyx_v_a) {
  int __pyx_v_i;
  __pyx_t_5numpy_float64_t __pyx_v_mv;
  __pyx_t_5numpy_float64_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

static __pyx_t_5numpy_float32_t __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_max_float(__pyx_t_5numpy_float32_t *__pyx_v_array, int __pyx_v_a) {
  int __pyx_v_i;
  __pyx_t_5numpy_float32_t __pyx_v_mv;
  __pyx_t_5numpy_float32_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 028:     cdef:
 029:         int i
+030:         float_t mv = array[0]
  __pyx_v_mv = (__pyx_v_array[0]);
/* … */
  __pyx_v_mv = (__pyx_v_array[0]);
+031:     for i in range(a):
  __pyx_t_1 = __pyx_v_a;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
/* … */
  __pyx_t_1 = __pyx_v_a;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+032:         if array[i] > mv:
    __pyx_t_4 = (((__pyx_v_array[__pyx_v_i]) > __pyx_v_mv) != 0);
    if (__pyx_t_4) {
/* … */
    }
  }
/* … */
    __pyx_t_4 = (((__pyx_v_array[__pyx_v_i]) > __pyx_v_mv) != 0);
    if (__pyx_t_4) {
/* … */
    }
  }
+033:             mv = array[i]
      __pyx_v_mv = (__pyx_v_array[__pyx_v_i]);
/* … */
      __pyx_v_mv = (__pyx_v_array[__pyx_v_i]);
+034:     return mv
  __pyx_r = __pyx_v_mv;
  goto __pyx_L0;
/* … */
  __pyx_r = __pyx_v_mv;
  goto __pyx_L0;
 035: 
+036: cdef float_t rbf(float_t dsq, float_t ls) nogil:
static __pyx_t_5numpy_float64_t __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_rbf(__pyx_t_5numpy_float64_t __pyx_v_dsq, __pyx_t_5numpy_float64_t __pyx_v_ls) {
  __pyx_t_5numpy_float64_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

static __pyx_t_5numpy_float32_t __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_rbf(__pyx_t_5numpy_float32_t __pyx_v_dsq, __pyx_t_5numpy_float32_t __pyx_v_ls) {
  __pyx_t_5numpy_float32_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+037:     return exp(-dsq / 2 / ls**2) / sqrt(2 * pi)
  __pyx_r = (exp((((-__pyx_v_dsq) / 2.0) / pow(__pyx_v_ls, 2.0))) / sqrt((2.0 * M_PI)));
  goto __pyx_L0;
/* … */
  __pyx_r = (exp((((-__pyx_v_dsq) / 2.0) / powf(__pyx_v_ls, 2.0))) / sqrt((2.0 * M_PI)));
  goto __pyx_L0;
 038: 
+039: cdef void frame_reference(float_t[:, ::1] I0, float_t[:, ::1] w0, float_t[:, ::1] I, float_t[:, ::1] W,
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_frame_reference(__Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_w0, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_u, __pyx_t_5numpy_float64_t __pyx_v_di, __pyx_t_5numpy_float64_t __pyx_v_dj, __pyx_t_5numpy_float64_t __pyx_v_ls) {
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_jj;
  int __pyx_v_kk;
  int __pyx_v_j0;
  int __pyx_v_k0;
  int __pyx_v_aa;
  int __pyx_v_bb;
  int __pyx_v_jj0;
  int __pyx_v_jj1;
  int __pyx_v_kk0;
  int __pyx_v_kk1;
  int __pyx_v_dn;
  __pyx_t_5numpy_float64_t __pyx_v_ss;
  __pyx_t_5numpy_float64_t __pyx_v_fs;
  __pyx_t_5numpy_float64_t __pyx_v_r;
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_frame_reference(__Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_w0, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_u, __pyx_t_5numpy_float32_t __pyx_v_di, __pyx_t_5numpy_float32_t __pyx_v_dj, __pyx_t_5numpy_float32_t __pyx_v_ls) {
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_jj;
  int __pyx_v_kk;
  int __pyx_v_j0;
  int __pyx_v_k0;
  int __pyx_v_aa;
  int __pyx_v_bb;
  int __pyx_v_jj0;
  int __pyx_v_jj1;
  int __pyx_v_kk0;
  int __pyx_v_kk1;
  int __pyx_v_dn;
  __pyx_t_5numpy_float32_t __pyx_v_ss;
  __pyx_t_5numpy_float32_t __pyx_v_fs;
  __pyx_t_5numpy_float32_t __pyx_v_r;
/* … */
  /* function exit code */
}
 040:                           float_t[:, :, ::1] u, float_t di, float_t dj, float_t ls) nogil:
 041:     cdef:
+042:         int b = I.shape[0], c = I.shape[1], j, k, jj, kk, j0, k0
  __pyx_v_b = (__pyx_v_I.shape[0]);
  __pyx_v_c = (__pyx_v_I.shape[1]);
/* … */
  __pyx_v_b = (__pyx_v_I.shape[0]);
  __pyx_v_c = (__pyx_v_I.shape[1]);
+043:         int aa = I0.shape[0], bb = I0.shape[1], jj0, jj1, kk0, kk1
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
/* … */
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
+044:         int dn = <int>(ceil(4 * ls))
  __pyx_v_dn = ((int)ceil((4.0 * __pyx_v_ls)));
/* … */
  __pyx_v_dn = ((int)ceil((4.0 * __pyx_v_ls)));
 045:         float_t ss, fs, r
+046:     for j in range(b):
  __pyx_t_1 = __pyx_v_b;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_j = __pyx_t_3;
/* … */
  __pyx_t_1 = __pyx_v_b;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_j = __pyx_t_3;
+047:         for k in range(c):
    __pyx_t_4 = __pyx_v_c;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_k = __pyx_t_6;
/* … */
    __pyx_t_4 = __pyx_v_c;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_k = __pyx_t_6;
+048:             ss = u[0, j, k] - di
      __pyx_t_7 = 0;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_9 = __pyx_v_k;
      __pyx_v_ss = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_7 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_9)) ))) - __pyx_v_di);
/* … */
      __pyx_t_7 = 0;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_9 = __pyx_v_k;
      __pyx_v_ss = ((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_7 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_9)) ))) - __pyx_v_di);
+049:             fs = u[1, j, k] - dj
      __pyx_t_9 = 1;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_fs = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_9 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_7)) ))) - __pyx_v_dj);
/* … */
      __pyx_t_9 = 1;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_fs = ((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_9 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_7)) ))) - __pyx_v_dj);
+050:             j0 = <int>(ss) + 1
      __pyx_v_j0 = (((int)__pyx_v_ss) + 1);
/* … */
      __pyx_v_j0 = (((int)__pyx_v_ss) + 1);
+051:             k0 = <int>(fs) + 1
      __pyx_v_k0 = (((int)__pyx_v_fs) + 1);
/* … */
      __pyx_v_k0 = (((int)__pyx_v_fs) + 1);
+052:             jj0 = j0 - dn if j0 - dn > 0 else 0
      if ((((__pyx_v_j0 - __pyx_v_dn) > 0) != 0)) {
        __pyx_t_10 = (__pyx_v_j0 - __pyx_v_dn);
      } else {
        __pyx_t_10 = 0;
      }
      __pyx_v_jj0 = __pyx_t_10;
/* … */
      if ((((__pyx_v_j0 - __pyx_v_dn) > 0) != 0)) {
        __pyx_t_10 = (__pyx_v_j0 - __pyx_v_dn);
      } else {
        __pyx_t_10 = 0;
      }
      __pyx_v_jj0 = __pyx_t_10;
+053:             jj1 = j0 + dn if j0 + dn < aa else aa
      if ((((__pyx_v_j0 + __pyx_v_dn) < __pyx_v_aa) != 0)) {
        __pyx_t_10 = (__pyx_v_j0 + __pyx_v_dn);
      } else {
        __pyx_t_10 = __pyx_v_aa;
      }
      __pyx_v_jj1 = __pyx_t_10;
/* … */
      if ((((__pyx_v_j0 + __pyx_v_dn) < __pyx_v_aa) != 0)) {
        __pyx_t_10 = (__pyx_v_j0 + __pyx_v_dn);
      } else {
        __pyx_t_10 = __pyx_v_aa;
      }
      __pyx_v_jj1 = __pyx_t_10;
+054:             kk0 = k0 - dn if k0 - dn > 0 else 0
      if ((((__pyx_v_k0 - __pyx_v_dn) > 0) != 0)) {
        __pyx_t_10 = (__pyx_v_k0 - __pyx_v_dn);
      } else {
        __pyx_t_10 = 0;
      }
      __pyx_v_kk0 = __pyx_t_10;
/* … */
      if ((((__pyx_v_k0 - __pyx_v_dn) > 0) != 0)) {
        __pyx_t_10 = (__pyx_v_k0 - __pyx_v_dn);
      } else {
        __pyx_t_10 = 0;
      }
      __pyx_v_kk0 = __pyx_t_10;
+055:             kk1 = k0 + dn if k0 + dn < bb else bb
      if ((((__pyx_v_k0 + __pyx_v_dn) < __pyx_v_bb) != 0)) {
        __pyx_t_10 = (__pyx_v_k0 + __pyx_v_dn);
      } else {
        __pyx_t_10 = __pyx_v_bb;
      }
      __pyx_v_kk1 = __pyx_t_10;
/* … */
      if ((((__pyx_v_k0 + __pyx_v_dn) < __pyx_v_bb) != 0)) {
        __pyx_t_10 = (__pyx_v_k0 + __pyx_v_dn);
      } else {
        __pyx_t_10 = __pyx_v_bb;
      }
      __pyx_v_kk1 = __pyx_t_10;
+056:             for jj in range(jj0, jj1):
      __pyx_t_10 = __pyx_v_jj1;
      __pyx_t_11 = __pyx_t_10;
      for (__pyx_t_12 = __pyx_v_jj0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
        __pyx_v_jj = __pyx_t_12;
/* … */
      __pyx_t_10 = __pyx_v_jj1;
      __pyx_t_11 = __pyx_t_10;
      for (__pyx_t_12 = __pyx_v_jj0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
        __pyx_v_jj = __pyx_t_12;
+057:                 for kk in range(kk0, kk1):
        __pyx_t_13 = __pyx_v_kk1;
        __pyx_t_14 = __pyx_t_13;
        for (__pyx_t_15 = __pyx_v_kk0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
          __pyx_v_kk = __pyx_t_15;
/* … */
        __pyx_t_13 = __pyx_v_kk1;
        __pyx_t_14 = __pyx_t_13;
        for (__pyx_t_15 = __pyx_v_kk0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
          __pyx_v_kk = __pyx_t_15;
+058:                     r = rbf((jj - ss)**2 + (kk - fs)**2, ls)
          __pyx_v_r = __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_rbf((pow((__pyx_v_jj - __pyx_v_ss), 2.0) + pow((__pyx_v_kk - __pyx_v_fs), 2.0)), __pyx_v_ls);
/* … */
          __pyx_v_r = __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_rbf((powf((__pyx_v_jj - __pyx_v_ss), 2.0) + powf((__pyx_v_kk - __pyx_v_fs), 2.0)), __pyx_v_ls);
+059:                     I0[jj, kk] += I[j, k] * W[j, k] * r
          __pyx_t_7 = __pyx_v_j;
          __pyx_t_8 = __pyx_v_k;
          __pyx_t_9 = __pyx_v_j;
          __pyx_t_16 = __pyx_v_k;
          __pyx_t_17 = __pyx_v_jj;
          __pyx_t_18 = __pyx_v_kk;
          *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_17 * __pyx_v_I0.strides[0]) )) + __pyx_t_18)) )) += (((*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_7 * __pyx_v_I.strides[0]) )) + __pyx_t_8)) ))) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_9 * __pyx_v_W.strides[0]) )) + __pyx_t_16)) )))) * __pyx_v_r);
/* … */
          __pyx_t_7 = __pyx_v_j;
          __pyx_t_8 = __pyx_v_k;
          __pyx_t_9 = __pyx_v_j;
          __pyx_t_16 = __pyx_v_k;
          __pyx_t_17 = __pyx_v_jj;
          __pyx_t_18 = __pyx_v_kk;
          *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_17 * __pyx_v_I0.strides[0]) )) + __pyx_t_18)) )) += (((*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_7 * __pyx_v_I.strides[0]) )) + __pyx_t_8)) ))) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_9 * __pyx_v_W.strides[0]) )) + __pyx_t_16)) )))) * __pyx_v_r);
+060:                     w0[jj, kk] += W[j, k]**2 * r
          __pyx_t_16 = __pyx_v_j;
          __pyx_t_9 = __pyx_v_k;
          __pyx_t_8 = __pyx_v_jj;
          __pyx_t_7 = __pyx_v_kk;
          *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_w0.data + __pyx_t_8 * __pyx_v_w0.strides[0]) )) + __pyx_t_7)) )) += (pow((*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_16 * __pyx_v_W.strides[0]) )) + __pyx_t_9)) ))), 2.0) * __pyx_v_r);
        }
      }
    }
  }
/* … */
          __pyx_t_16 = __pyx_v_j;
          __pyx_t_9 = __pyx_v_k;
          __pyx_t_8 = __pyx_v_jj;
          __pyx_t_7 = __pyx_v_kk;
          *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_w0.data + __pyx_t_8 * __pyx_v_w0.strides[0]) )) + __pyx_t_7)) )) += (powf((*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_16 * __pyx_v_W.strides[0]) )) + __pyx_t_9)) ))), 2.0) * __pyx_v_r);
        }
      }
    }
  }
 061: 
+062: def make_reference(float_t[:, :, ::1] I_n, float_t[:, ::1] W, float_t[:, :, ::1] u, float_t[::1] di,
/* Python wrapper */
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_1make_reference(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyrost_3bin_6pyrost_make_reference[] = "make_reference(signatures, args, kwargs, defaults)\nGenerate an unabberated reference image of the sample\n    based on the pixel mapping `u` and the measured data `I_n`\n    using the `simple kriging`_.\n\n    .. _simple kriging: https://en.wikipedia.org/wiki/Kriging#Simple_kriging\n\n    Parameters\n    ----------\n    I_n : numpy.ndarray\n        Measured intensity frames.\n    W : numpy.ndarray\n        Measured frames' whitefield.\n    u : numpy.ndarray\n        The pixel mapping between the data at\n        the detector plane and the reference image at\n        the reference plane.\n    di : numpy.ndarray\n        Sample's translations along the slow detector axis\n        in pixels.\n    dj : numpy.ndarray\n        Sample's translations along the fast detector axis\n        in pixels.\n    sw_ss : int\n        Search window size in pixels along the slow detector\n        axis.\n    sw_fs : int\n        Search window size in pixels along the fast detector\n        axis.\n    ls : float\n        Reference image length scale in pixels.\n    return_nm0 : bool\n        If True, also returns the lower bounds (`n0`, `m0`)\n        of the reference image in pixels.\n    num_threads : int, optional\n        Number of threads.\n\n    Returns\n    -------\n    I0 : numpy.ndarray\n        Reference image array.\n    n0 : int, optional\n        The lower bounds of the slow detector axis of\n        the reference image at the reference frame in pixels.\n        Only provided if `return_nm0` is True.\n    m0 : int, optional\n        The lower bounds of the fast detector axis of\n        the reference image at the reference frame in pixels.\n        Only provided if `return_nm0` is True.\n\n    Notes\n    -----\n    Reference image update algorithm the detector plane to the\n    reference plane using the pixel mapping `u`:\n\n    .. math::\n        ii_{0}, jj_{0} = u[0, i, j] - di[n], u[1, i, j] - dj[n]\n\n    Whereupon it generates a smoothed sample profile using\n    simpl""y kriging approach with the gaussian radial basis\n    function :math:`\\phi`:\n\n    .. math::\n\n        I_{ref}[ii, jj] = \\frac{\\sum_{n, i, j} I_n[i, j] W[i, j]\n        \\phi[ii - u[0, i, j] + di[n], jj - u[1, i, j] + dj[n]]}\n        {\\sum_{n, i, j} W[i, j]^2 \\phi[ii - u[0, i, j] + di[n],\n        jj - u[1, i, j] + dj[n]]}\n\n    .. math::\n\n        \\phi [\\Delta ii_{ref}, \\Delta jj_{ref}] = \n        \\exp\\left[{-\\frac{(\\Delta ii_{ref})^2 + \n        (\\Delta jj_{ref})^2}{ls^2}}\\right]\n    ";
static PyMethodDef __pyx_mdef_6pyrost_3bin_6pyrost_1make_reference = {"make_reference", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyrost_3bin_6pyrost_1make_reference, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_make_reference};
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_1make_reference(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;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 62, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 62, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_signatures = values[0];
    __pyx_v_args = values[1];
    __pyx_v_kwargs = values[2];
    __pyx_v_defaults = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 62, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_make_reference(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_make_reference(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
  PyObject *__pyx_v_dest_sig = NULL;
  Py_ssize_t __pyx_v_i;
  PyTypeObject *__pyx_v_ndarray = 0;
  __Pyx_memviewslice __pyx_v_memslice;
  Py_ssize_t __pyx_v_itemsize;
  CYTHON_UNUSED int __pyx_v_dtype_signed;
  char __pyx_v_kind;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_dtype = NULL;
  PyObject *__pyx_v_arg_base = NULL;
  PyObject *__pyx_v_candidates = NULL;
  PyObject *__pyx_v_sig = NULL;
  int __pyx_v_match_found;
  PyObject *__pyx_v_src_sig = NULL;
  PyObject *__pyx_v_dst_type = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_reference", 0);
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
  }
  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_itemsize = -1L;
  if (unlikely(__pyx_v_args == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 62, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 62, __pyx_L1_error)
  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 62, __pyx_L1_error)
    }
    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    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, 62, __pyx_L1_error)
  }
  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_I_n, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 62, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_I_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  /*else*/ {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 62, __pyx_L1_error)
    }
    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 62, __pyx_L1_error)
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_int_8);
    __Pyx_GIVEREF(__pyx_int_8);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_8);
    __Pyx_INCREF(__pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_n_s_s);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 62, __pyx_L1_error)
  }
  __pyx_L6:;
  while (1) {
    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_dtype = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L12;
      }
      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_arg_base = __pyx_t_6;
        __pyx_t_6 = 0;
        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
        __pyx_t_2 = (__pyx_t_3 != 0);
        if (__pyx_t_2) {
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_v_dtype = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L13;
        }
        /*else*/ {
          __Pyx_INCREF(Py_None);
          __pyx_v_dtype = Py_None;
        }
        __pyx_L13:;
        goto __pyx_L12;
      }
      /*else*/ {
        __Pyx_INCREF(Py_None);
        __pyx_v_dtype = Py_None;
      }
      __pyx_L12:;
      __pyx_v_itemsize = -1L;
      __pyx_t_2 = (__pyx_v_dtype != Py_None);
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 62, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_itemsize = __pyx_t_5;
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 62, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_kind = __pyx_t_7;
        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
        switch (__pyx_v_kind) {
          case 'i':
          case 'u':
          break;
          case 'f':
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L16_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 62, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L16_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L19_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 62, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L19_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          break;
          case 'c':
          break;
          case 'O':
          break;
          default: break;
        }
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L22_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L22_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L26_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L26_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
    goto __pyx_L10_break;
  }
  __pyx_L10_break:;
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_signatures == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 62, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_v_match_found = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 62, __pyx_L1_error)
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_i = __pyx_t_17;
      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 62, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (__pyx_t_2) {
          __pyx_v_match_found = 1;
          goto __pyx_L34;
        }
        /*else*/ {
          __pyx_v_match_found = 0;
          goto __pyx_L32_break;
        }
        __pyx_L34:;
      }
    }
    __pyx_L32_break:;
    __pyx_t_2 = (__pyx_v_match_found != 0);
    if (__pyx_t_2) {
      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 62, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
  __pyx_t_3 = ((!__pyx_t_2) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 62, __pyx_L1_error)
  }
  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 62, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
  if (__pyx_t_3) {
/* … */
  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 62, __pyx_L1_error)
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_signatures == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 62, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dest_sig);
  __Pyx_XDECREF(__pyx_v_ndarray);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_arg_base);
  __Pyx_XDECREF(__pyx_v_candidates);
  __Pyx_XDECREF(__pyx_v_sig);
  __Pyx_XDECREF(__pyx_v_src_sig);
  __Pyx_XDECREF(__pyx_v_dst_type);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_60__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self)->__pyx_arg_return_nm0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None);
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_15make_reference(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_15make_reference = {"__pyx_fuse_0make_reference", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_15make_reference, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_make_reference};
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_15make_reference(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_sw_ss;
  int __pyx_v_sw_fs;
  __pyx_t_5numpy_float64_t __pyx_v_ls;
  int __pyx_v_return_nm0;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_reference (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_u,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_sw_ss,&__pyx_n_s_sw_fs,&__pyx_n_s_ls,&__pyx_n_s_return_nm0,&__pyx_n_s_num_threads,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    __pyx_defaults2 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 1); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 2); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 3); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 4); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_ss)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 5); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_fs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 6); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 7); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_return_nm0);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "make_reference") < 0)) __PYX_ERR(0, 62, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 62, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 62, __pyx_L3_error)
    __pyx_v_u = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u.memview)) __PYX_ERR(0, 62, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 62, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 63, __pyx_L3_error)
    __pyx_v_sw_ss = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_sw_ss == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    __pyx_v_sw_fs = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_sw_fs == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_ls == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    if (values[8]) {
      __pyx_v_return_nm0 = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_return_nm0 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    } else {
      __pyx_v_return_nm0 = __pyx_dynamic_args->__pyx_arg_return_nm0;
    }
    if (values[9]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[9]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 62, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.make_reference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_14make_reference(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_ss, __pyx_v_sw_fs, __pyx_v_ls, __pyx_v_return_nm0, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_14make_reference(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_ss, int __pyx_v_sw_fs, __pyx_t_5numpy_float64_t __pyx_v_ls, int __pyx_v_return_nm0, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  int __pyx_v_a;
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __pyx_t_5numpy_float64_t __pyx_v_Is;
  __pyx_t_5numpy_float64_t __pyx_v_ws;
  __pyx_t_5numpy_float64_t __pyx_v_n0;
  __pyx_t_5numpy_float64_t __pyx_v_m0;
  int __pyx_v_aa;
  int __pyx_v_bb;
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_w = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_0make_reference", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.make_reference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_w, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_62__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self)->__pyx_arg_return_nm0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None);
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_17make_reference(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_17make_reference = {"__pyx_fuse_1make_reference", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_17make_reference, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_make_reference};
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_17make_reference(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_sw_ss;
  int __pyx_v_sw_fs;
  __pyx_t_5numpy_float32_t __pyx_v_ls;
  int __pyx_v_return_nm0;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_reference (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_u,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_sw_ss,&__pyx_n_s_sw_fs,&__pyx_n_s_ls,&__pyx_n_s_return_nm0,&__pyx_n_s_num_threads,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    __pyx_defaults3 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 1); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 2); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 3); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 4); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_ss)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 5); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_fs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 6); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, 7); __PYX_ERR(0, 62, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_return_nm0);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "make_reference") < 0)) __PYX_ERR(0, 62, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 62, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 62, __pyx_L3_error)
    __pyx_v_u = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u.memview)) __PYX_ERR(0, 62, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 62, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 63, __pyx_L3_error)
    __pyx_v_sw_ss = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_sw_ss == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    __pyx_v_sw_fs = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_sw_fs == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_ls == ((npy_float32)-1)) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    if (values[8]) {
      __pyx_v_return_nm0 = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_return_nm0 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    } else {
      __pyx_v_return_nm0 = __pyx_dynamic_args->__pyx_arg_return_nm0;
    }
    if (values[9]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[9]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_reference", 0, 8, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 62, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.make_reference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_16make_reference(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_ss, __pyx_v_sw_fs, __pyx_v_ls, __pyx_v_return_nm0, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_16make_reference(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_ss, int __pyx_v_sw_fs, __pyx_t_5numpy_float32_t __pyx_v_ls, int __pyx_v_return_nm0, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  int __pyx_v_a;
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __pyx_t_5numpy_float32_t __pyx_v_Is;
  __pyx_t_5numpy_float32_t __pyx_v_ws;
  __pyx_t_5numpy_float32_t __pyx_v_n0;
  __pyx_t_5numpy_float32_t __pyx_v_m0;
  int __pyx_v_aa;
  int __pyx_v_bb;
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_w = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_1make_reference", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.make_reference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_w, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);
/* … */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
/* … */
  __pyx_tuple__25 = PyTuple_Pack(27, __pyx_n_s_I_n, __pyx_n_s_W, __pyx_n_s_u, __pyx_n_s_di, __pyx_n_s_dj, __pyx_n_s_sw_ss, __pyx_n_s_sw_fs, __pyx_n_s_ls, __pyx_n_s_return_nm0, __pyx_n_s_num_threads, __pyx_n_s_dtype, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_c, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_t, __pyx_n_s_Is, __pyx_n_s_ws, __pyx_n_s_n0, __pyx_n_s_m0, __pyx_n_s_aa, __pyx_n_s_bb, __pyx_n_s_I, __pyx_n_s_w, __pyx_n_s_I0); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_15make_reference, 0, __pyx_n_s_make_reference, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_1, sizeof(__pyx_defaults2), 0)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_t_1)->__pyx_arg_return_nm0 = 1;
  __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_t_1)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_t_3);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_1, __pyx_pf_6pyrost_3bin_6pyrost_60__defaults__);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_float64_t, __pyx_t_1) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_17make_reference, 0, __pyx_n_s_make_reference, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_1, sizeof(__pyx_defaults3), 0)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_t_1)->__pyx_arg_return_nm0 = 1;
  __Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_t_1)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_t_3);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_1, __pyx_pf_6pyrost_3bin_6pyrost_62__defaults__);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_float32_t, __pyx_t_1) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_FusedFunction_New(&__pyx_mdef_6pyrost_3bin_6pyrost_1make_reference, 0, __pyx_n_s_make_reference, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_t_3);
  ((__pyx_FusedFunctionObject *) __pyx_t_1)->__signatures__ = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_reference, __pyx_t_1) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(10, 0, 27, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyrost_bin_pyrost_pyx, __pyx_n_s_make_reference, 62, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 62, __pyx_L1_error)
+063:                    float_t[::1] dj, int sw_ss, int sw_fs, float_t ls, bint return_nm0=True, unsigned num_threads=1):
  __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_long(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
 064:     r"""Generate an unabberated reference image of the sample
 065:     based on the pixel mapping `u` and the measured data `I_n`
 066:     using the `simple kriging`_.
 067: 
 068:     .. _simple kriging: https://en.wikipedia.org/wiki/Kriging#Simple_kriging
 069: 
 070:     Parameters
 071:     ----------
 072:     I_n : numpy.ndarray
 073:         Measured intensity frames.
 074:     W : numpy.ndarray
 075:         Measured frames' whitefield.
 076:     u : numpy.ndarray
 077:         The pixel mapping between the data at
 078:         the detector plane and the reference image at
 079:         the reference plane.
 080:     di : numpy.ndarray
 081:         Sample's translations along the slow detector axis
 082:         in pixels.
 083:     dj : numpy.ndarray
 084:         Sample's translations along the fast detector axis
 085:         in pixels.
 086:     sw_ss : int
 087:         Search window size in pixels along the slow detector
 088:         axis.
 089:     sw_fs : int
 090:         Search window size in pixels along the fast detector
 091:         axis.
 092:     ls : float
 093:         Reference image length scale in pixels.
 094:     return_nm0 : bool
 095:         If True, also returns the lower bounds (`n0`, `m0`)
 096:         of the reference image in pixels.
 097:     num_threads : int, optional
 098:         Number of threads.
 099: 
 100:     Returns
 101:     -------
 102:     I0 : numpy.ndarray
 103:         Reference image array.
 104:     n0 : int, optional
 105:         The lower bounds of the slow detector axis of
 106:         the reference image at the reference frame in pixels.
 107:         Only provided if `return_nm0` is True.
 108:     m0 : int, optional
 109:         The lower bounds of the fast detector axis of
 110:         the reference image at the reference frame in pixels.
 111:         Only provided if `return_nm0` is True.
 112: 
 113:     Notes
 114:     -----
 115:     Reference image update algorithm the detector plane to the
 116:     reference plane using the pixel mapping `u`:
 117: 
 118:     .. math::
 119:         ii_{0}, jj_{0} = u[0, i, j] - di[n], u[1, i, j] - dj[n]
 120: 
 121:     Whereupon it generates a smoothed sample profile using
 122:     simply kriging approach with the gaussian radial basis
 123:     function :math:`\phi`:
 124: 
 125:     .. math::
 126: 
 127:         I_{ref}[ii, jj] = \frac{\sum_{n, i, j} I_n[i, j] W[i, j]
 128:         \phi[ii - u[0, i, j] + di[n], jj - u[1, i, j] + dj[n]]}
 129:         {\sum_{n, i, j} W[i, j]^2 \phi[ii - u[0, i, j] + di[n],
 130:         jj - u[1, i, j] + dj[n]]}
 131: 
 132:     .. math::
 133: 
 134:         \phi [\Delta ii_{ref}, \Delta jj_{ref}] = 
 135:         \exp\left[{-\frac{(\Delta ii_{ref})^2 + 
 136:         (\Delta jj_{ref})^2}{ls^2}}\right]
 137:     """
 138:     cdef:
+139:         str dtype = 'float64' if float_t is np.float64_t else 'float32'
  if ((1 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  if ((0 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+140:         int a = I_n.shape[0], b = I_n.shape[1], c = I_n.shape[2]
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
/* … */
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
 141:         int i, j, k, t
 142:         float_t Is, ws
+143:         float_t n0 = -min_float(&u[0, 0, 0], b * c) + max_float(&di[0], a) + sw_ss
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_v_n0 = (((-__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_min_float((&(*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_2 * __pyx_v_u.strides[0]) ) + __pyx_t_3 * __pyx_v_u.strides[1]) )) + __pyx_t_4)) )))), (__pyx_v_b * __pyx_v_c))) + __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_max_float((&(*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_di.data) + __pyx_t_5)) )))), __pyx_v_a)) + __pyx_v_sw_ss);
/* … */
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_v_n0 = (((-__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_min_float((&(*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_2 * __pyx_v_u.strides[0]) ) + __pyx_t_3 * __pyx_v_u.strides[1]) )) + __pyx_t_4)) )))), (__pyx_v_b * __pyx_v_c))) + __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_max_float((&(*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_di.data) + __pyx_t_5)) )))), __pyx_v_a)) + __pyx_v_sw_ss);
+144:         float_t m0 = -min_float(&u[1, 0, 0], b * c) + max_float(&dj[0], a) + sw_fs
  __pyx_t_5 = 1;
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_v_m0 = (((-__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_min_float((&(*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_5 * __pyx_v_u.strides[0]) ) + __pyx_t_4 * __pyx_v_u.strides[1]) )) + __pyx_t_3)) )))), (__pyx_v_b * __pyx_v_c))) + __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_max_float((&(*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dj.data) + __pyx_t_2)) )))), __pyx_v_a)) + __pyx_v_sw_fs);
/* … */
  __pyx_t_5 = 1;
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_v_m0 = (((-__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_min_float((&(*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_5 * __pyx_v_u.strides[0]) ) + __pyx_t_4 * __pyx_v_u.strides[1]) )) + __pyx_t_3)) )))), (__pyx_v_b * __pyx_v_c))) + __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_max_float((&(*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dj.data) + __pyx_t_2)) )))), __pyx_v_a)) + __pyx_v_sw_fs);
+145:         int aa = <int>(max_float(&u[0, 0, 0], b * c) - min_float(&di[0], a) + n0) + 1 + sw_ss
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_v_aa = ((((int)((__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_max_float((&(*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_2 * __pyx_v_u.strides[0]) ) + __pyx_t_3 * __pyx_v_u.strides[1]) )) + __pyx_t_4)) )))), (__pyx_v_b * __pyx_v_c)) - __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_min_float((&(*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_di.data) + __pyx_t_5)) )))), __pyx_v_a)) + __pyx_v_n0)) + 1) + __pyx_v_sw_ss);
/* … */
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_v_aa = ((((int)((__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_max_float((&(*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_2 * __pyx_v_u.strides[0]) ) + __pyx_t_3 * __pyx_v_u.strides[1]) )) + __pyx_t_4)) )))), (__pyx_v_b * __pyx_v_c)) - __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_min_float((&(*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_di.data) + __pyx_t_5)) )))), __pyx_v_a)) + __pyx_v_n0)) + 1) + __pyx_v_sw_ss);
+146:         int bb = <int>(max_float(&u[1, 0, 0], b * c) - min_float(&dj[0], a) + m0) + 1 + sw_fs
  __pyx_t_5 = 1;
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_v_bb = ((((int)((__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_max_float((&(*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_5 * __pyx_v_u.strides[0]) ) + __pyx_t_4 * __pyx_v_u.strides[1]) )) + __pyx_t_3)) )))), (__pyx_v_b * __pyx_v_c)) - __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_min_float((&(*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dj.data) + __pyx_t_2)) )))), __pyx_v_a)) + __pyx_v_m0)) + 1) + __pyx_v_sw_fs);
/* … */
  __pyx_t_5 = 1;
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_v_bb = ((((int)((__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_max_float((&(*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_5 * __pyx_v_u.strides[0]) ) + __pyx_t_4 * __pyx_v_u.strides[1]) )) + __pyx_t_3)) )))), (__pyx_v_b * __pyx_v_c)) - __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_min_float((&(*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dj.data) + __pyx_t_2)) )))), __pyx_v_a)) + __pyx_v_m0)) + 1) + __pyx_v_sw_fs);
+147:         float_t[:, :, ::1] I = np.zeros((num_threads, aa, bb), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_aa); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_bb); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
  __pyx_t_1 = 0;
  __pyx_t_7 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 147, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_I = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_aa); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_bb); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
  __pyx_t_1 = 0;
  __pyx_t_7 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 147, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_I = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+148:         float_t[:, :, ::1] w = np.zeros((num_threads, aa, bb), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_zeros); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_aa); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_bb); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_6);
  __pyx_t_7 = 0;
  __pyx_t_8 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 148, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_w = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_zeros); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_aa); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_bb); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_6);
  __pyx_t_7 = 0;
  __pyx_t_8 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 148, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_w = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+149:         float_t[:, ::1] I0 = np.zeros((aa, bb), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_aa); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_bb); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_6);
  __pyx_t_8 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 149, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_I0 = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_aa); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_bb); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_6);
  __pyx_t_8 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 149, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_I0 = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
+150:     for i in prange(a, schedule='guided', num_threads=num_threads, nogil=True):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_12 = __pyx_v_a;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_14 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_t) schedule(guided)        __pyx_t_12 = __pyx_v_a;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_14 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_t) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_14; __pyx_t_13++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_13);
                            /* Initialize private variables to invalid values */
                            __pyx_v_t = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
/* … */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_12 = __pyx_v_a;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_14 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_t) schedule(guided)        __pyx_t_12 = __pyx_v_a;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_14 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_t) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_14; __pyx_t_13++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_13);
                            /* Initialize private variables to invalid values */
                            __pyx_v_t = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+151:         t = openmp.omp_get_thread_num()
                            __pyx_v_t = omp_get_thread_num();
/* … */
                            __pyx_v_t = omp_get_thread_num();
+152:         frame_reference(I[t], w[t], I_n[i], W, u, di[i] - n0, dj[i] - m0, ls)
                            __pyx_t_11.data = __pyx_v_I.data;
                            __pyx_t_11.memview = __pyx_v_I.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_11, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_11.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_11.shape[0] = __pyx_v_I.shape[1];
__pyx_t_11.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_11.suboffsets[0] = -1;

__pyx_t_11.shape[1] = __pyx_v_I.shape[2];
__pyx_t_11.strides[1] = __pyx_v_I.strides[2];
    __pyx_t_11.suboffsets[1] = -1;

__pyx_t_15.data = __pyx_v_w.data;
                            __pyx_t_15.memview = __pyx_v_w.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_15, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_w.strides[0];
        __pyx_t_15.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_15.shape[0] = __pyx_v_w.shape[1];
__pyx_t_15.strides[0] = __pyx_v_w.strides[1];
    __pyx_t_15.suboffsets[0] = -1;

__pyx_t_15.shape[1] = __pyx_v_w.shape[2];
__pyx_t_15.strides[1] = __pyx_v_w.strides[2];
    __pyx_t_15.suboffsets[1] = -1;

__pyx_t_16.data = __pyx_v_I_n.data;
                            __pyx_t_16.memview = __pyx_v_I_n.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_16, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I_n.strides[0];
        __pyx_t_16.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_16.shape[0] = __pyx_v_I_n.shape[1];
__pyx_t_16.strides[0] = __pyx_v_I_n.strides[1];
    __pyx_t_16.suboffsets[0] = -1;

__pyx_t_16.shape[1] = __pyx_v_I_n.shape[2];
__pyx_t_16.strides[1] = __pyx_v_I_n.strides[2];
    __pyx_t_16.suboffsets[1] = -1;

__pyx_t_2 = __pyx_v_i;
                            __pyx_t_3 = __pyx_v_i;
                            __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_frame_reference(__pyx_t_11, __pyx_t_15, __pyx_t_16, __pyx_v_W, __pyx_v_u, ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_di.data) + __pyx_t_2)) ))) - __pyx_v_n0), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dj.data) + __pyx_t_3)) ))) - __pyx_v_m0), __pyx_v_ls);
                            __PYX_XDEC_MEMVIEW(&__pyx_t_11, 0);
                            __pyx_t_11.memview = NULL;
                            __pyx_t_11.data = NULL;
                            __PYX_XDEC_MEMVIEW(&__pyx_t_15, 0);
                            __pyx_t_15.memview = NULL;
                            __pyx_t_15.data = NULL;
                            __PYX_XDEC_MEMVIEW(&__pyx_t_16, 0);
                            __pyx_t_16.memview = NULL;
                            __pyx_t_16.data = NULL;
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
/* … */
                            __pyx_t_11.data = __pyx_v_I.data;
                            __pyx_t_11.memview = __pyx_v_I.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_11, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_11.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_11.shape[0] = __pyx_v_I.shape[1];
__pyx_t_11.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_11.suboffsets[0] = -1;

__pyx_t_11.shape[1] = __pyx_v_I.shape[2];
__pyx_t_11.strides[1] = __pyx_v_I.strides[2];
    __pyx_t_11.suboffsets[1] = -1;

__pyx_t_15.data = __pyx_v_w.data;
                            __pyx_t_15.memview = __pyx_v_w.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_15, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_w.strides[0];
        __pyx_t_15.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_15.shape[0] = __pyx_v_w.shape[1];
__pyx_t_15.strides[0] = __pyx_v_w.strides[1];
    __pyx_t_15.suboffsets[0] = -1;

__pyx_t_15.shape[1] = __pyx_v_w.shape[2];
__pyx_t_15.strides[1] = __pyx_v_w.strides[2];
    __pyx_t_15.suboffsets[1] = -1;

__pyx_t_16.data = __pyx_v_I_n.data;
                            __pyx_t_16.memview = __pyx_v_I_n.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_16, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I_n.strides[0];
        __pyx_t_16.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_16.shape[0] = __pyx_v_I_n.shape[1];
__pyx_t_16.strides[0] = __pyx_v_I_n.strides[1];
    __pyx_t_16.suboffsets[0] = -1;

__pyx_t_16.shape[1] = __pyx_v_I_n.shape[2];
__pyx_t_16.strides[1] = __pyx_v_I_n.strides[2];
    __pyx_t_16.suboffsets[1] = -1;

__pyx_t_2 = __pyx_v_i;
                            __pyx_t_3 = __pyx_v_i;
                            __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_frame_reference(__pyx_t_11, __pyx_t_15, __pyx_t_16, __pyx_v_W, __pyx_v_u, ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_di.data) + __pyx_t_2)) ))) - __pyx_v_n0), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dj.data) + __pyx_t_3)) ))) - __pyx_v_m0), __pyx_v_ls);
                            __PYX_XDEC_MEMVIEW(&__pyx_t_11, 0);
                            __pyx_t_11.memview = NULL;
                            __pyx_t_11.data = NULL;
                            __PYX_XDEC_MEMVIEW(&__pyx_t_15, 0);
                            __pyx_t_15.memview = NULL;
                            __pyx_t_15.data = NULL;
                            __PYX_XDEC_MEMVIEW(&__pyx_t_16, 0);
                            __pyx_t_16.memview = NULL;
                            __pyx_t_16.data = NULL;
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+153:     for k in prange(bb, schedule='guided', num_threads=num_threads, nogil=True):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_14 = __pyx_v_bb;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_12 = (__pyx_t_14 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_Is) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) lastprivate(__pyx_v_ws) schedule(guided)        __pyx_t_14 = __pyx_v_bb;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_12 = (__pyx_t_14 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_Is) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) lastprivate(__pyx_v_ws) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13++){
                        {
                            __pyx_v_k = (int)(0 + 1 * __pyx_t_13);
                            /* Initialize private variables to invalid values */
                            __pyx_v_Is = ((__pyx_t_5numpy_float64_t)__PYX_NAN());
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_t = ((int)0xbad0bad0);
                            __pyx_v_ws = ((__pyx_t_5numpy_float64_t)__PYX_NAN());
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L14;
        }
        __pyx_L14:;
      }
  }
/* … */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_14 = __pyx_v_bb;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_12 = (__pyx_t_14 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_Is) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) lastprivate(__pyx_v_ws) schedule(guided)        __pyx_t_14 = __pyx_v_bb;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_12 = (__pyx_t_14 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_12 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_Is) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) lastprivate(__pyx_v_ws) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13++){
                        {
                            __pyx_v_k = (int)(0 + 1 * __pyx_t_13);
                            /* Initialize private variables to invalid values */
                            __pyx_v_Is = ((__pyx_t_5numpy_float32_t)__PYX_NAN());
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_t = ((int)0xbad0bad0);
                            __pyx_v_ws = ((__pyx_t_5numpy_float32_t)__PYX_NAN());
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L14;
        }
        __pyx_L14:;
      }
  }
+154:         t = openmp.omp_get_thread_num()
                            __pyx_v_t = omp_get_thread_num();
/* … */
                            __pyx_v_t = omp_get_thread_num();
+155:         for j in range(aa):
                            __pyx_t_17 = __pyx_v_aa;
                            __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_aa;
                            __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;
+156:             Is = 0; ws = 0
                              __pyx_v_Is = 0.0;
                              __pyx_v_ws = 0.0;
/* … */
                              __pyx_v_Is = 0.0;
                              __pyx_v_ws = 0.0;
+157:             for i in range(num_threads):
                              __pyx_t_20 = __pyx_v_num_threads;
                              __pyx_t_21 = __pyx_t_20;
                              for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
                                __pyx_v_i = __pyx_t_22;
/* … */
                              __pyx_t_20 = __pyx_v_num_threads;
                              __pyx_t_21 = __pyx_t_20;
                              for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
                                __pyx_v_i = __pyx_t_22;
+158:                 Is = Is + I[i, j, k]
                                __pyx_t_3 = __pyx_v_i;
                                __pyx_t_2 = __pyx_v_j;
                                __pyx_t_4 = __pyx_v_k;
                                __pyx_v_Is = (__pyx_v_Is + (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_3 * __pyx_v_I.strides[0]) ) + __pyx_t_2 * __pyx_v_I.strides[1]) )) + __pyx_t_4)) ))));
/* … */
                                __pyx_t_3 = __pyx_v_i;
                                __pyx_t_2 = __pyx_v_j;
                                __pyx_t_4 = __pyx_v_k;
                                __pyx_v_Is = (__pyx_v_Is + (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_3 * __pyx_v_I.strides[0]) ) + __pyx_t_2 * __pyx_v_I.strides[1]) )) + __pyx_t_4)) ))));
+159:                 ws = ws + w[i, j, k]
                                __pyx_t_4 = __pyx_v_i;
                                __pyx_t_2 = __pyx_v_j;
                                __pyx_t_3 = __pyx_v_k;
                                __pyx_v_ws = (__pyx_v_ws + (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_w.data + __pyx_t_4 * __pyx_v_w.strides[0]) ) + __pyx_t_2 * __pyx_v_w.strides[1]) )) + __pyx_t_3)) ))));
                              }
/* … */
                                __pyx_t_4 = __pyx_v_i;
                                __pyx_t_2 = __pyx_v_j;
                                __pyx_t_3 = __pyx_v_k;
                                __pyx_v_ws = (__pyx_v_ws + (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_w.data + __pyx_t_4 * __pyx_v_w.strides[0]) ) + __pyx_t_2 * __pyx_v_w.strides[1]) )) + __pyx_t_3)) ))));
                              }
+160:             if ws:
                              __pyx_t_23 = (__pyx_v_ws != 0);
                              if (__pyx_t_23) {
/* … */
                                goto __pyx_L23;
                              }
/* … */
                              __pyx_t_23 = (__pyx_v_ws != 0);
                              if (__pyx_t_23) {
/* … */
                                goto __pyx_L23;
                              }
+161:                 I0[j, k] = Is / ws
                                __pyx_t_3 = __pyx_v_j;
                                __pyx_t_2 = __pyx_v_k;
                                *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_3 * __pyx_v_I0.strides[0]) )) + __pyx_t_2)) )) = (__pyx_v_Is / __pyx_v_ws);
/* … */
                                __pyx_t_3 = __pyx_v_j;
                                __pyx_t_2 = __pyx_v_k;
                                *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_3 * __pyx_v_I0.strides[0]) )) + __pyx_t_2)) )) = (__pyx_v_Is / __pyx_v_ws);
 162:             else:
+163:                 I0[j, k] = 0
                              /*else*/ {
                                __pyx_t_2 = __pyx_v_j;
                                __pyx_t_3 = __pyx_v_k;
                                *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_2 * __pyx_v_I0.strides[0]) )) + __pyx_t_3)) )) = 0.0;
                              }
                              __pyx_L23:;
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
/* … */
                              /*else*/ {
                                __pyx_t_2 = __pyx_v_j;
                                __pyx_t_3 = __pyx_v_k;
                                *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_2 * __pyx_v_I0.strides[0]) )) + __pyx_t_3)) )) = 0.0;
                              }
                              __pyx_L23:;
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+164:     if return_nm0:
  __pyx_t_23 = (__pyx_v_return_nm0 != 0);
  if (__pyx_t_23) {
/* … */
  }
/* … */
  __pyx_t_23 = (__pyx_v_return_nm0 != 0);
  if (__pyx_t_23) {
/* … */
  }
+165:         return np.asarray(I0), <int>(n0), <int>(m0)
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_I0, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_8 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyInt_From_int(((int)__pyx_v_n0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_9 = __Pyx_PyInt_From_int(((int)__pyx_v_m0)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_9);
    __pyx_t_8 = 0;
    __pyx_t_6 = 0;
    __pyx_t_9 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
/* … */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_I0, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float32_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float32_t, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_8 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyInt_From_int(((int)__pyx_v_n0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_9 = __Pyx_PyInt_From_int(((int)__pyx_v_m0)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_9);
    __pyx_t_8 = 0;
    __pyx_t_6 = 0;
    __pyx_t_9 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 166:     else:
+167:         return np.asarray(I0)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_I0, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
/* … */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_I0, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float32_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float32_t, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 168: 
+169: cdef void mse_bi(float_t* m_ptr, float_t[::1] I, float_t[:, ::1] I0,
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_t_5numpy_float64_t *__pyx_v_m_ptr, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, __pyx_t_5numpy_float64_t __pyx_v_ux, __pyx_t_5numpy_float64_t __pyx_v_uy) {
  int __pyx_v_a;
  int __pyx_v_aa;
  int __pyx_v_bb;
  int __pyx_v_i;
  int __pyx_v_ss0;
  int __pyx_v_ss1;
  int __pyx_v_fs0;
  int __pyx_v_fs1;
  __pyx_t_5numpy_float64_t __pyx_v_SS_res;
  __pyx_t_5numpy_float64_t __pyx_v_SS_tot;
  __pyx_t_5numpy_float64_t __pyx_v_ss;
  __pyx_t_5numpy_float64_t __pyx_v_fs;
  __pyx_t_5numpy_float64_t __pyx_v_dss;
  __pyx_t_5numpy_float64_t __pyx_v_dfs;
  __pyx_t_5numpy_float64_t __pyx_v_I0_bi;
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_t_5numpy_float32_t *__pyx_v_m_ptr, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, __pyx_t_5numpy_float32_t __pyx_v_ux, __pyx_t_5numpy_float32_t __pyx_v_uy) {
  int __pyx_v_a;
  int __pyx_v_aa;
  int __pyx_v_bb;
  int __pyx_v_i;
  int __pyx_v_ss0;
  int __pyx_v_ss1;
  int __pyx_v_fs0;
  int __pyx_v_fs1;
  __pyx_t_5numpy_float32_t __pyx_v_SS_res;
  __pyx_t_5numpy_float32_t __pyx_v_SS_tot;
  __pyx_t_5numpy_float32_t __pyx_v_ss;
  __pyx_t_5numpy_float32_t __pyx_v_fs;
  __pyx_t_5numpy_float32_t __pyx_v_dss;
  __pyx_t_5numpy_float32_t __pyx_v_dfs;
  __pyx_t_5numpy_float32_t __pyx_v_I0_bi;
/* … */
  /* function exit code */
}
 170:                  float_t[::1] di, float_t[::1] dj, float_t ux, float_t uy) nogil:
 171:     cdef:
+172:         int a = I.shape[0] - 1, aa = I0.shape[0], bb = I0.shape[1]
  __pyx_v_a = ((__pyx_v_I.shape[0]) - 1);
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
/* … */
  __pyx_v_a = ((__pyx_v_I.shape[0]) - 1);
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
 173:         int i, ss0, ss1, fs0, fs1
+174:         float_t SS_res = 0, SS_tot = 0, ss, fs, dss, dfs, I0_bi
  __pyx_v_SS_res = 0.0;
  __pyx_v_SS_tot = 0.0;
/* … */
  __pyx_v_SS_res = 0.0;
  __pyx_v_SS_tot = 0.0;
+175:     for i in range(a):
  __pyx_t_1 = __pyx_v_a;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
/* … */
  __pyx_t_1 = __pyx_v_a;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+176:         ss = ux - di[i]
    __pyx_t_4 = __pyx_v_i;
    __pyx_v_ss = (__pyx_v_ux - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_di.data) + __pyx_t_4)) ))));
/* … */
    __pyx_t_4 = __pyx_v_i;
    __pyx_v_ss = (__pyx_v_ux - (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_di.data) + __pyx_t_4)) ))));
+177:         fs = uy - dj[i]
    __pyx_t_4 = __pyx_v_i;
    __pyx_v_fs = (__pyx_v_uy - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dj.data) + __pyx_t_4)) ))));
/* … */
    __pyx_t_4 = __pyx_v_i;
    __pyx_v_fs = (__pyx_v_uy - (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dj.data) + __pyx_t_4)) ))));
+178:         if ss <= 0:
    __pyx_t_5 = ((__pyx_v_ss <= 0.0) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
/* … */
    __pyx_t_5 = ((__pyx_v_ss <= 0.0) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+179:             dss = 0; ss0 = 0; ss1 = 0
      __pyx_v_dss = 0.0;
      __pyx_v_ss0 = 0;
      __pyx_v_ss1 = 0;
/* … */
      __pyx_v_dss = 0.0;
      __pyx_v_ss0 = 0;
      __pyx_v_ss1 = 0;
+180:         elif ss >= aa - 1:
    __pyx_t_5 = ((__pyx_v_ss >= (__pyx_v_aa - 1)) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
/* … */
    __pyx_t_5 = ((__pyx_v_ss >= (__pyx_v_aa - 1)) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+181:             dss = 0; ss0 = aa - 1; ss1 = aa - 1
      __pyx_v_dss = 0.0;
      __pyx_v_ss0 = (__pyx_v_aa - 1);
      __pyx_v_ss1 = (__pyx_v_aa - 1);
/* … */
      __pyx_v_dss = 0.0;
      __pyx_v_ss0 = (__pyx_v_aa - 1);
      __pyx_v_ss1 = (__pyx_v_aa - 1);
 182:         else:
+183:             dss = ss - floor(ss)
    /*else*/ {
      __pyx_v_dss = (__pyx_v_ss - floor(__pyx_v_ss));
/* … */
    /*else*/ {
      __pyx_v_dss = (__pyx_v_ss - floor(__pyx_v_ss));
+184:             ss0 = <int>(floor(ss)); ss1 = ss0 + 1
      __pyx_v_ss0 = ((int)floor(__pyx_v_ss));
      __pyx_v_ss1 = (__pyx_v_ss0 + 1);
    }
    __pyx_L5:;
/* … */
      __pyx_v_ss0 = ((int)floor(__pyx_v_ss));
      __pyx_v_ss1 = (__pyx_v_ss0 + 1);
    }
    __pyx_L5:;
+185:         if fs <= 0:
    __pyx_t_5 = ((__pyx_v_fs <= 0.0) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L6;
    }
/* … */
    __pyx_t_5 = ((__pyx_v_fs <= 0.0) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L6;
    }
+186:             dfs = 0; fs0 = 0; fs1 = 0
      __pyx_v_dfs = 0.0;
      __pyx_v_fs0 = 0;
      __pyx_v_fs1 = 0;
/* … */
      __pyx_v_dfs = 0.0;
      __pyx_v_fs0 = 0;
      __pyx_v_fs1 = 0;
+187:         elif fs >= bb - 1:
    __pyx_t_5 = ((__pyx_v_fs >= (__pyx_v_bb - 1)) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L6;
    }
/* … */
    __pyx_t_5 = ((__pyx_v_fs >= (__pyx_v_bb - 1)) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L6;
    }
+188:             dfs = 0; fs0 = bb - 1; fs1 = bb - 1
      __pyx_v_dfs = 0.0;
      __pyx_v_fs0 = (__pyx_v_bb - 1);
      __pyx_v_fs1 = (__pyx_v_bb - 1);
/* … */
      __pyx_v_dfs = 0.0;
      __pyx_v_fs0 = (__pyx_v_bb - 1);
      __pyx_v_fs1 = (__pyx_v_bb - 1);
 189:         else:
+190:             dfs = fs - floor(fs)
    /*else*/ {
      __pyx_v_dfs = (__pyx_v_fs - floor(__pyx_v_fs));
/* … */
    /*else*/ {
      __pyx_v_dfs = (__pyx_v_fs - floor(__pyx_v_fs));
+191:             fs0 = <int>(floor(fs)); fs1 = fs0 + 1
      __pyx_v_fs0 = ((int)floor(__pyx_v_fs));
      __pyx_v_fs1 = (__pyx_v_fs0 + 1);
    }
    __pyx_L6:;
/* … */
      __pyx_v_fs0 = ((int)floor(__pyx_v_fs));
      __pyx_v_fs1 = (__pyx_v_fs0 + 1);
    }
    __pyx_L6:;
+192:         I0_bi = (1 - dss) * (1 - dfs) * I0[ss0, fs0] + \
    __pyx_t_4 = __pyx_v_ss0;
    __pyx_t_6 = __pyx_v_fs0;
/* … */
    __pyx_t_4 = __pyx_v_ss0;
    __pyx_t_6 = __pyx_v_fs0;
+193:                 (1 - dss) * dfs * I0[ss0, fs1] + \
    __pyx_t_7 = __pyx_v_ss0;
    __pyx_t_8 = __pyx_v_fs1;
/* … */
    __pyx_t_7 = __pyx_v_ss0;
    __pyx_t_8 = __pyx_v_fs1;
+194:                 dss * (1 - dfs) * I0[ss1, fs0] + \
    __pyx_t_9 = __pyx_v_ss1;
    __pyx_t_10 = __pyx_v_fs0;
/* … */
    __pyx_v_I0_bi = ((((((1.0 - __pyx_v_dss) * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_4 * __pyx_v_I0.strides[0]) )) + __pyx_t_6)) )))) + (((1.0 - __pyx_v_dss) * __pyx_v_dfs) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_7 * __pyx_v_I0.strides[0]) )) + __pyx_t_8)) ))))) + ((__pyx_v_dss * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_9 * __pyx_v_I0.strides[0]) )) + __pyx_t_10)) ))))) + ((__pyx_v_dss * __pyx_v_dfs) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_11 * __pyx_v_I0.strides[0]) )) + __pyx_t_12)) )))));
/* … */
    __pyx_t_9 = __pyx_v_ss1;
    __pyx_t_10 = __pyx_v_fs0;
/* … */
    __pyx_v_I0_bi = ((((((1.0 - __pyx_v_dss) * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_4 * __pyx_v_I0.strides[0]) )) + __pyx_t_6)) )))) + (((1.0 - __pyx_v_dss) * __pyx_v_dfs) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_7 * __pyx_v_I0.strides[0]) )) + __pyx_t_8)) ))))) + ((__pyx_v_dss * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_9 * __pyx_v_I0.strides[0]) )) + __pyx_t_10)) ))))) + ((__pyx_v_dss * __pyx_v_dfs) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_11 * __pyx_v_I0.strides[0]) )) + __pyx_t_12)) )))));
+195:                 dss * dfs * I0[ss1, fs1]
    __pyx_t_11 = __pyx_v_ss1;
    __pyx_t_12 = __pyx_v_fs1;
/* … */
    __pyx_t_11 = __pyx_v_ss1;
    __pyx_t_12 = __pyx_v_fs1;
+196:         SS_res += (I[i] - I0_bi)**2
    __pyx_t_12 = __pyx_v_i;
    __pyx_v_SS_res = (__pyx_v_SS_res + pow(((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_I.data) + __pyx_t_12)) ))) - __pyx_v_I0_bi), 2.0));
/* … */
    __pyx_t_12 = __pyx_v_i;
    __pyx_v_SS_res = (__pyx_v_SS_res + powf(((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_I.data) + __pyx_t_12)) ))) - __pyx_v_I0_bi), 2.0));
+197:         SS_tot += (I[i] - 1)**2
    __pyx_t_12 = __pyx_v_i;
    __pyx_v_SS_tot = (__pyx_v_SS_tot + pow(((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_I.data) + __pyx_t_12)) ))) - 1.0), 2.0));
  }
/* … */
    __pyx_t_12 = __pyx_v_i;
    __pyx_v_SS_tot = (__pyx_v_SS_tot + powf(((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_I.data) + __pyx_t_12)) ))) - 1.0), 2.0));
  }
+198:     m_ptr[0] = SS_res; m_ptr[1] = SS_tot
  (__pyx_v_m_ptr[0]) = __pyx_v_SS_res;
  (__pyx_v_m_ptr[1]) = __pyx_v_SS_tot;
/* … */
  (__pyx_v_m_ptr[0]) = __pyx_v_SS_res;
  (__pyx_v_m_ptr[1]) = __pyx_v_SS_tot;
+199:     if m_ptr[2] >= 0:
  __pyx_t_5 = (((__pyx_v_m_ptr[2]) >= 0.0) != 0);
  if (__pyx_t_5) {
/* … */
  }
/* … */
  __pyx_t_5 = (((__pyx_v_m_ptr[2]) >= 0.0) != 0);
  if (__pyx_t_5) {
/* … */
  }
+200:         m_ptr[2] = 4 * I[a] * (SS_res / SS_tot**2 + SS_res**2 / SS_tot**3)
    __pyx_t_12 = __pyx_v_a;
    (__pyx_v_m_ptr[2]) = ((4.0 * (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_I.data) + __pyx_t_12)) )))) * ((__pyx_v_SS_res / pow(__pyx_v_SS_tot, 2.0)) + (pow(__pyx_v_SS_res, 2.0) / pow(__pyx_v_SS_tot, 3.0))));
/* … */
    __pyx_t_12 = __pyx_v_a;
    (__pyx_v_m_ptr[2]) = ((4.0 * (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_I.data) + __pyx_t_12)) )))) * ((__pyx_v_SS_res / powf(__pyx_v_SS_tot, 2.0)) + (powf(__pyx_v_SS_res, 2.0) / powf(__pyx_v_SS_tot, 3.0))));
 201: 
+202: cdef void mse_diff_bi(float_t* m_ptr, float_t[:, :, ::1] SS_m, float_t[:, ::1] I,
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_t_5numpy_float64_t *__pyx_v_m_ptr, __Pyx_memviewslice __pyx_v_SS_m, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_rss, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __pyx_t_5numpy_float64_t __pyx_v_di0, __pyx_t_5numpy_float64_t __pyx_v_dj0, __pyx_t_5numpy_float64_t __pyx_v_di, __pyx_t_5numpy_float64_t __pyx_v_dj) {
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_ss_0;
  int __pyx_v_fs_0;
  int __pyx_v_ss_1;
  int __pyx_v_fs_1;
  int __pyx_v_aa;
  int __pyx_v_bb;
  __pyx_t_5numpy_float64_t __pyx_v_ss0;
  __pyx_t_5numpy_float64_t __pyx_v_fs0;
  __pyx_t_5numpy_float64_t __pyx_v_ss1;
  __pyx_t_5numpy_float64_t __pyx_v_fs1;
  __pyx_t_5numpy_float64_t __pyx_v_dss;
  __pyx_t_5numpy_float64_t __pyx_v_dfs;
  __pyx_t_5numpy_float64_t __pyx_v_mse;
  __pyx_t_5numpy_float64_t __pyx_v_mse_var;
  __pyx_t_5numpy_float64_t __pyx_v_I0_bi;
  __pyx_t_5numpy_float64_t __pyx_v_res_0;
  __pyx_t_5numpy_float64_t __pyx_v_tot_0;
  __pyx_t_5numpy_float64_t __pyx_v_res;
  __pyx_t_5numpy_float64_t __pyx_v_tot;
  __pyx_t_5numpy_float64_t __pyx_v_SS_res;
  __pyx_t_5numpy_float64_t __pyx_v_SS_tot;
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_t_5numpy_float32_t *__pyx_v_m_ptr, __Pyx_memviewslice __pyx_v_SS_m, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_rss, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __pyx_t_5numpy_float32_t __pyx_v_di0, __pyx_t_5numpy_float32_t __pyx_v_dj0, __pyx_t_5numpy_float32_t __pyx_v_di, __pyx_t_5numpy_float32_t __pyx_v_dj) {
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_ss_0;
  int __pyx_v_fs_0;
  int __pyx_v_ss_1;
  int __pyx_v_fs_1;
  int __pyx_v_aa;
  int __pyx_v_bb;
  __pyx_t_5numpy_float32_t __pyx_v_ss0;
  __pyx_t_5numpy_float32_t __pyx_v_fs0;
  __pyx_t_5numpy_float32_t __pyx_v_ss1;
  __pyx_t_5numpy_float32_t __pyx_v_fs1;
  __pyx_t_5numpy_float32_t __pyx_v_dss;
  __pyx_t_5numpy_float32_t __pyx_v_dfs;
  __pyx_t_5numpy_float32_t __pyx_v_mse;
  __pyx_t_5numpy_float32_t __pyx_v_mse_var;
  __pyx_t_5numpy_float32_t __pyx_v_I0_bi;
  __pyx_t_5numpy_float32_t __pyx_v_res_0;
  __pyx_t_5numpy_float32_t __pyx_v_tot_0;
  __pyx_t_5numpy_float32_t __pyx_v_res;
  __pyx_t_5numpy_float32_t __pyx_v_tot;
  __pyx_t_5numpy_float32_t __pyx_v_SS_res;
  __pyx_t_5numpy_float32_t __pyx_v_SS_tot;
/* … */
  /* function exit code */
}
 203:                       float_t[:, ::1] rss, float_t[:, ::1] I0, float_t[:, :, ::1] u,
 204:                       float_t di0, float_t dj0, float_t di, float_t dj) nogil:
 205:     cdef:
+206:         int b = I.shape[0], c = I.shape[1], j, k
  __pyx_v_b = (__pyx_v_I.shape[0]);
  __pyx_v_c = (__pyx_v_I.shape[1]);
/* … */
  __pyx_v_b = (__pyx_v_I.shape[0]);
  __pyx_v_c = (__pyx_v_I.shape[1]);
 207:         int ss_0, fs_0, ss_1, fs_1
+208:         int aa = I0.shape[0], bb = I0.shape[1]
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
/* … */
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
 209:         float_t ss0, fs0, ss1, fs1, dss, dfs
+210:         float_t mse = 0, mse_var = 0, I0_bi, res_0, tot_0, res, tot, SS_res, SS_tot
  __pyx_v_mse = 0.0;
  __pyx_v_mse_var = 0.0;
/* … */
  __pyx_v_mse = 0.0;
  __pyx_v_mse_var = 0.0;
+211:     for j in range(b):
  __pyx_t_1 = __pyx_v_b;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_j = __pyx_t_3;
/* … */
  __pyx_t_1 = __pyx_v_b;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_j = __pyx_t_3;
+212:         for k in range(c):
    __pyx_t_4 = __pyx_v_c;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_k = __pyx_t_6;
/* … */
    __pyx_t_4 = __pyx_v_c;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_k = __pyx_t_6;
+213:             ss0 = u[0, j, k] - di0; fs0 = u[1, j, k] - dj0
      __pyx_t_7 = 0;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_9 = __pyx_v_k;
      __pyx_v_ss0 = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_7 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_9)) ))) - __pyx_v_di0);
      __pyx_t_9 = 1;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_fs0 = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_9 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_7)) ))) - __pyx_v_dj0);
/* … */
      __pyx_t_7 = 0;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_9 = __pyx_v_k;
      __pyx_v_ss0 = ((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_7 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_9)) ))) - __pyx_v_di0);
      __pyx_t_9 = 1;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_fs0 = ((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_9 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_7)) ))) - __pyx_v_dj0);
+214:             ss1 = u[0, j, k] - di; fs1 = u[1, j, k] - dj
      __pyx_t_7 = 0;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_9 = __pyx_v_k;
      __pyx_v_ss1 = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_7 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_9)) ))) - __pyx_v_di);
      __pyx_t_9 = 1;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_fs1 = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_9 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_7)) ))) - __pyx_v_dj);
/* … */
      __pyx_t_7 = 0;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_9 = __pyx_v_k;
      __pyx_v_ss1 = ((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_7 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_9)) ))) - __pyx_v_di);
      __pyx_t_9 = 1;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_fs1 = ((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_9 * __pyx_v_u.strides[0]) ) + __pyx_t_8 * __pyx_v_u.strides[1]) )) + __pyx_t_7)) ))) - __pyx_v_dj);
+215:             if ss0 <= 0:
      __pyx_t_10 = ((__pyx_v_ss0 <= 0.0) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L7;
      }
/* … */
      __pyx_t_10 = ((__pyx_v_ss0 <= 0.0) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L7;
      }
+216:                 dss = 0; ss_0 = 0; ss_1 = 0
        __pyx_v_dss = 0.0;
        __pyx_v_ss_0 = 0;
        __pyx_v_ss_1 = 0;
/* … */
        __pyx_v_dss = 0.0;
        __pyx_v_ss_0 = 0;
        __pyx_v_ss_1 = 0;
+217:             elif ss0 >= aa - 1:
      __pyx_t_10 = ((__pyx_v_ss0 >= (__pyx_v_aa - 1)) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L7;
      }
/* … */
      __pyx_t_10 = ((__pyx_v_ss0 >= (__pyx_v_aa - 1)) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L7;
      }
+218:                 dss = 0; ss_0 = aa - 1; ss_1 = aa - 1
        __pyx_v_dss = 0.0;
        __pyx_v_ss_0 = (__pyx_v_aa - 1);
        __pyx_v_ss_1 = (__pyx_v_aa - 1);
/* … */
        __pyx_v_dss = 0.0;
        __pyx_v_ss_0 = (__pyx_v_aa - 1);
        __pyx_v_ss_1 = (__pyx_v_aa - 1);
 219:             else:
+220:                 dss = ss0 - floor(ss0)
      /*else*/ {
        __pyx_v_dss = (__pyx_v_ss0 - floor(__pyx_v_ss0));
/* … */
      /*else*/ {
        __pyx_v_dss = (__pyx_v_ss0 - floor(__pyx_v_ss0));
+221:                 ss_0 = <int>(floor(ss0)); ss_1 = ss_0 + 1
        __pyx_v_ss_0 = ((int)floor(__pyx_v_ss0));
        __pyx_v_ss_1 = (__pyx_v_ss_0 + 1);
      }
      __pyx_L7:;
/* … */
        __pyx_v_ss_0 = ((int)floor(__pyx_v_ss0));
        __pyx_v_ss_1 = (__pyx_v_ss_0 + 1);
      }
      __pyx_L7:;
+222:             if fs0 <= 0:
      __pyx_t_10 = ((__pyx_v_fs0 <= 0.0) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L8;
      }
/* … */
      __pyx_t_10 = ((__pyx_v_fs0 <= 0.0) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L8;
      }
+223:                 dfs = 0; fs_0 = 0; fs_1 = 0
        __pyx_v_dfs = 0.0;
        __pyx_v_fs_0 = 0;
        __pyx_v_fs_1 = 0;
/* … */
        __pyx_v_dfs = 0.0;
        __pyx_v_fs_0 = 0;
        __pyx_v_fs_1 = 0;
+224:             elif fs0 >= bb - 1:
      __pyx_t_10 = ((__pyx_v_fs0 >= (__pyx_v_bb - 1)) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L8;
      }
/* … */
      __pyx_t_10 = ((__pyx_v_fs0 >= (__pyx_v_bb - 1)) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L8;
      }
+225:                 dfs = 0; fs_0 = bb - 1; fs_1 = bb - 1
        __pyx_v_dfs = 0.0;
        __pyx_v_fs_0 = (__pyx_v_bb - 1);
        __pyx_v_fs_1 = (__pyx_v_bb - 1);
/* … */
        __pyx_v_dfs = 0.0;
        __pyx_v_fs_0 = (__pyx_v_bb - 1);
        __pyx_v_fs_1 = (__pyx_v_bb - 1);
 226:             else:
+227:                 dfs = fs0 - floor(fs0)
      /*else*/ {
        __pyx_v_dfs = (__pyx_v_fs0 - floor(__pyx_v_fs0));
/* … */
      /*else*/ {
        __pyx_v_dfs = (__pyx_v_fs0 - floor(__pyx_v_fs0));
+228:                 fs_0 = <int>(floor(fs0)); fs_1 = fs_0 + 1
        __pyx_v_fs_0 = ((int)floor(__pyx_v_fs0));
        __pyx_v_fs_1 = (__pyx_v_fs_0 + 1);
      }
      __pyx_L8:;
/* … */
        __pyx_v_fs_0 = ((int)floor(__pyx_v_fs0));
        __pyx_v_fs_1 = (__pyx_v_fs_0 + 1);
      }
      __pyx_L8:;
+229:             I0_bi = (1 - dss) * (1 - dfs) * I0[ss_0, fs_0] + \
      __pyx_t_7 = __pyx_v_ss_0;
      __pyx_t_8 = __pyx_v_fs_0;
/* … */
      __pyx_t_7 = __pyx_v_ss_0;
      __pyx_t_8 = __pyx_v_fs_0;
+230:                     (1 - dss) * dfs * I0[ss_0, fs_1] + \
      __pyx_t_9 = __pyx_v_ss_0;
      __pyx_t_11 = __pyx_v_fs_1;
/* … */
      __pyx_t_9 = __pyx_v_ss_0;
      __pyx_t_11 = __pyx_v_fs_1;
+231:                     dss * (1 - dfs) * I0[ss_1, fs_0] + \
      __pyx_t_12 = __pyx_v_ss_1;
      __pyx_t_13 = __pyx_v_fs_0;
/* … */
      __pyx_v_I0_bi = ((((((1.0 - __pyx_v_dss) * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_7 * __pyx_v_I0.strides[0]) )) + __pyx_t_8)) )))) + (((1.0 - __pyx_v_dss) * __pyx_v_dfs) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_9 * __pyx_v_I0.strides[0]) )) + __pyx_t_11)) ))))) + ((__pyx_v_dss * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_12 * __pyx_v_I0.strides[0]) )) + __pyx_t_13)) ))))) + ((__pyx_v_dss * __pyx_v_dfs) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_14 * __pyx_v_I0.strides[0]) )) + __pyx_t_15)) )))));
/* … */
      __pyx_t_12 = __pyx_v_ss_1;
      __pyx_t_13 = __pyx_v_fs_0;
/* … */
      __pyx_v_I0_bi = ((((((1.0 - __pyx_v_dss) * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_7 * __pyx_v_I0.strides[0]) )) + __pyx_t_8)) )))) + (((1.0 - __pyx_v_dss) * __pyx_v_dfs) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_9 * __pyx_v_I0.strides[0]) )) + __pyx_t_11)) ))))) + ((__pyx_v_dss * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_12 * __pyx_v_I0.strides[0]) )) + __pyx_t_13)) ))))) + ((__pyx_v_dss * __pyx_v_dfs) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_14 * __pyx_v_I0.strides[0]) )) + __pyx_t_15)) )))));
+232:                     dss * dfs * I0[ss_1, fs_1]
      __pyx_t_14 = __pyx_v_ss_1;
      __pyx_t_15 = __pyx_v_fs_1;
/* … */
      __pyx_t_14 = __pyx_v_ss_1;
      __pyx_t_15 = __pyx_v_fs_1;
+233:             res_0 = (I[j, k] - I0_bi)**2
      __pyx_t_15 = __pyx_v_j;
      __pyx_t_14 = __pyx_v_k;
      __pyx_v_res_0 = pow(((*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_15 * __pyx_v_I.strides[0]) )) + __pyx_t_14)) ))) - __pyx_v_I0_bi), 2.0);
/* … */
      __pyx_t_15 = __pyx_v_j;
      __pyx_t_14 = __pyx_v_k;
      __pyx_v_res_0 = powf(((*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_15 * __pyx_v_I.strides[0]) )) + __pyx_t_14)) ))) - __pyx_v_I0_bi), 2.0);
+234:             tot_0 = (I[j, k] - 1)**2
      __pyx_t_14 = __pyx_v_j;
      __pyx_t_15 = __pyx_v_k;
      __pyx_v_tot_0 = pow(((*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_14 * __pyx_v_I.strides[0]) )) + __pyx_t_15)) ))) - 1.0), 2.0);
/* … */
      __pyx_t_14 = __pyx_v_j;
      __pyx_t_15 = __pyx_v_k;
      __pyx_v_tot_0 = powf(((*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_14 * __pyx_v_I.strides[0]) )) + __pyx_t_15)) ))) - 1.0), 2.0);
 235: 
+236:             if ss1 <= 0:
      __pyx_t_10 = ((__pyx_v_ss1 <= 0.0) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L9;
      }
/* … */
      __pyx_t_10 = ((__pyx_v_ss1 <= 0.0) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L9;
      }
+237:                 dss = 0; ss_0 = 0; ss_1 = 0
        __pyx_v_dss = 0.0;
        __pyx_v_ss_0 = 0;
        __pyx_v_ss_1 = 0;
/* … */
        __pyx_v_dss = 0.0;
        __pyx_v_ss_0 = 0;
        __pyx_v_ss_1 = 0;
+238:             elif ss1 >= aa - 1:
      __pyx_t_10 = ((__pyx_v_ss1 >= (__pyx_v_aa - 1)) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L9;
      }
/* … */
      __pyx_t_10 = ((__pyx_v_ss1 >= (__pyx_v_aa - 1)) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L9;
      }
+239:                 dss = 0; ss_0 = aa - 1; ss_1 = aa - 1
        __pyx_v_dss = 0.0;
        __pyx_v_ss_0 = (__pyx_v_aa - 1);
        __pyx_v_ss_1 = (__pyx_v_aa - 1);
/* … */
        __pyx_v_dss = 0.0;
        __pyx_v_ss_0 = (__pyx_v_aa - 1);
        __pyx_v_ss_1 = (__pyx_v_aa - 1);
 240:             else:
+241:                 dss = ss1 - floor(ss1)
      /*else*/ {
        __pyx_v_dss = (__pyx_v_ss1 - floor(__pyx_v_ss1));
/* … */
      /*else*/ {
        __pyx_v_dss = (__pyx_v_ss1 - floor(__pyx_v_ss1));
+242:                 ss_0 = <int>(floor(ss1)); ss_1 = ss_0 + 1
        __pyx_v_ss_0 = ((int)floor(__pyx_v_ss1));
        __pyx_v_ss_1 = (__pyx_v_ss_0 + 1);
      }
      __pyx_L9:;
/* … */
        __pyx_v_ss_0 = ((int)floor(__pyx_v_ss1));
        __pyx_v_ss_1 = (__pyx_v_ss_0 + 1);
      }
      __pyx_L9:;
+243:             if fs1 <= 0:
      __pyx_t_10 = ((__pyx_v_fs1 <= 0.0) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L10;
      }
/* … */
      __pyx_t_10 = ((__pyx_v_fs1 <= 0.0) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L10;
      }
+244:                 dfs = 0; fs_0 = 0; fs_1 = 0
        __pyx_v_dfs = 0.0;
        __pyx_v_fs_0 = 0;
        __pyx_v_fs_1 = 0;
/* … */
        __pyx_v_dfs = 0.0;
        __pyx_v_fs_0 = 0;
        __pyx_v_fs_1 = 0;
+245:             elif fs1 >= bb - 1:
      __pyx_t_10 = ((__pyx_v_fs1 >= (__pyx_v_bb - 1)) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L10;
      }
/* … */
      __pyx_t_10 = ((__pyx_v_fs1 >= (__pyx_v_bb - 1)) != 0);
      if (__pyx_t_10) {
/* … */
        goto __pyx_L10;
      }
+246:                 dfs = 0; fs_0 = bb - 1; fs_1 = bb - 1
        __pyx_v_dfs = 0.0;
        __pyx_v_fs_0 = (__pyx_v_bb - 1);
        __pyx_v_fs_1 = (__pyx_v_bb - 1);
/* … */
        __pyx_v_dfs = 0.0;
        __pyx_v_fs_0 = (__pyx_v_bb - 1);
        __pyx_v_fs_1 = (__pyx_v_bb - 1);
 247:             else:
+248:                 dfs = fs1 - floor(fs1)
      /*else*/ {
        __pyx_v_dfs = (__pyx_v_fs1 - floor(__pyx_v_fs1));
/* … */
      /*else*/ {
        __pyx_v_dfs = (__pyx_v_fs1 - floor(__pyx_v_fs1));
+249:                 fs_0 = <int>(floor(fs1)); fs_1 = fs_0 + 1
        __pyx_v_fs_0 = ((int)floor(__pyx_v_fs1));
        __pyx_v_fs_1 = (__pyx_v_fs_0 + 1);
      }
      __pyx_L10:;
/* … */
        __pyx_v_fs_0 = ((int)floor(__pyx_v_fs1));
        __pyx_v_fs_1 = (__pyx_v_fs_0 + 1);
      }
      __pyx_L10:;
+250:             I0_bi = (1 - dss) * (1 - dfs) * I0[ss_0, fs_0] + \
      __pyx_t_15 = __pyx_v_ss_0;
      __pyx_t_14 = __pyx_v_fs_0;
/* … */
      __pyx_t_15 = __pyx_v_ss_0;
      __pyx_t_14 = __pyx_v_fs_0;
+251:                     (1 - dss) * dfs * I0[ss_0, fs_1] + \
      __pyx_t_13 = __pyx_v_ss_0;
      __pyx_t_12 = __pyx_v_fs_1;
/* … */
      __pyx_t_13 = __pyx_v_ss_0;
      __pyx_t_12 = __pyx_v_fs_1;
+252:                     dss * (1 - dfs) * I0[ss_1, fs_0] + \
      __pyx_t_11 = __pyx_v_ss_1;
      __pyx_t_9 = __pyx_v_fs_0;
/* … */
      __pyx_v_I0_bi = ((((((1.0 - __pyx_v_dss) * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_15 * __pyx_v_I0.strides[0]) )) + __pyx_t_14)) )))) + (((1.0 - __pyx_v_dss) * __pyx_v_dfs) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_13 * __pyx_v_I0.strides[0]) )) + __pyx_t_12)) ))))) + ((__pyx_v_dss * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_11 * __pyx_v_I0.strides[0]) )) + __pyx_t_9)) ))))) + ((__pyx_v_dss * __pyx_v_dfs) * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_8 * __pyx_v_I0.strides[0]) )) + __pyx_t_7)) )))));
/* … */
      __pyx_t_11 = __pyx_v_ss_1;
      __pyx_t_9 = __pyx_v_fs_0;
/* … */
      __pyx_v_I0_bi = ((((((1.0 - __pyx_v_dss) * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_15 * __pyx_v_I0.strides[0]) )) + __pyx_t_14)) )))) + (((1.0 - __pyx_v_dss) * __pyx_v_dfs) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_13 * __pyx_v_I0.strides[0]) )) + __pyx_t_12)) ))))) + ((__pyx_v_dss * (1.0 - __pyx_v_dfs)) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_11 * __pyx_v_I0.strides[0]) )) + __pyx_t_9)) ))))) + ((__pyx_v_dss * __pyx_v_dfs) * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I0.data + __pyx_t_8 * __pyx_v_I0.strides[0]) )) + __pyx_t_7)) )))));
+253:                     dss * dfs * I0[ss_1, fs_1]
      __pyx_t_8 = __pyx_v_ss_1;
      __pyx_t_7 = __pyx_v_fs_1;
/* … */
      __pyx_t_8 = __pyx_v_ss_1;
      __pyx_t_7 = __pyx_v_fs_1;
+254:             res = (I[j, k] - I0_bi)**2
      __pyx_t_7 = __pyx_v_j;
      __pyx_t_8 = __pyx_v_k;
      __pyx_v_res = pow(((*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_7 * __pyx_v_I.strides[0]) )) + __pyx_t_8)) ))) - __pyx_v_I0_bi), 2.0);
/* … */
      __pyx_t_7 = __pyx_v_j;
      __pyx_t_8 = __pyx_v_k;
      __pyx_v_res = powf(((*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_7 * __pyx_v_I.strides[0]) )) + __pyx_t_8)) ))) - __pyx_v_I0_bi), 2.0);
+255:             tot = (I[j, k] - 1)**2
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_tot = pow(((*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) )) + __pyx_t_7)) ))) - 1.0), 2.0);
/* … */
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_tot = powf(((*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) )) + __pyx_t_7)) ))) - 1.0), 2.0);
 256: 
+257:             SS_res = SS_m[0, j, k] - res_0 + res; SS_tot = SS_m[1, j, k] - tot_0 + tot
      __pyx_t_7 = 0;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_9 = __pyx_v_k;
      __pyx_v_SS_res = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SS_m.data + __pyx_t_7 * __pyx_v_SS_m.strides[0]) ) + __pyx_t_8 * __pyx_v_SS_m.strides[1]) )) + __pyx_t_9)) ))) - __pyx_v_res_0) + __pyx_v_res);
      __pyx_t_9 = 1;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_SS_tot = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SS_m.data + __pyx_t_9 * __pyx_v_SS_m.strides[0]) ) + __pyx_t_8 * __pyx_v_SS_m.strides[1]) )) + __pyx_t_7)) ))) - __pyx_v_tot_0) + __pyx_v_tot);
/* … */
      __pyx_t_7 = 0;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_9 = __pyx_v_k;
      __pyx_v_SS_res = (((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SS_m.data + __pyx_t_7 * __pyx_v_SS_m.strides[0]) ) + __pyx_t_8 * __pyx_v_SS_m.strides[1]) )) + __pyx_t_9)) ))) - __pyx_v_res_0) + __pyx_v_res);
      __pyx_t_9 = 1;
      __pyx_t_8 = __pyx_v_j;
      __pyx_t_7 = __pyx_v_k;
      __pyx_v_SS_tot = (((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SS_m.data + __pyx_t_9 * __pyx_v_SS_m.strides[0]) ) + __pyx_t_8 * __pyx_v_SS_m.strides[1]) )) + __pyx_t_7)) ))) - __pyx_v_tot_0) + __pyx_v_tot);
+258:             mse += SS_res / SS_tot / b / c
      __pyx_v_mse = (__pyx_v_mse + (((__pyx_v_SS_res / __pyx_v_SS_tot) / ((__pyx_t_5numpy_float64_t)__pyx_v_b)) / ((__pyx_t_5numpy_float64_t)__pyx_v_c)));
/* … */
      __pyx_v_mse = (__pyx_v_mse + (((__pyx_v_SS_res / __pyx_v_SS_tot) / ((__pyx_t_5numpy_float32_t)__pyx_v_b)) / ((__pyx_t_5numpy_float32_t)__pyx_v_c)));
+259:             mse_var += 4 * rss[j, k] * (SS_res / SS_tot**2 + SS_res**2 / SS_tot**3) / b**2 / c**2
      __pyx_t_7 = __pyx_v_j;
      __pyx_t_8 = __pyx_v_k;
      __pyx_v_mse_var = (__pyx_v_mse_var + ((((4.0 * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_rss.data + __pyx_t_7 * __pyx_v_rss.strides[0]) )) + __pyx_t_8)) )))) * ((__pyx_v_SS_res / pow(__pyx_v_SS_tot, 2.0)) + (pow(__pyx_v_SS_res, 2.0) / pow(__pyx_v_SS_tot, 3.0)))) / ((__pyx_t_5numpy_float64_t)__Pyx_pow_long(((long)__pyx_v_b), 2))) / ((__pyx_t_5numpy_float64_t)__Pyx_pow_long(((long)__pyx_v_c), 2))));
    }
  }
/* … */
      __pyx_t_7 = __pyx_v_j;
      __pyx_t_8 = __pyx_v_k;
      __pyx_v_mse_var = (__pyx_v_mse_var + ((((4.0 * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_rss.data + __pyx_t_7 * __pyx_v_rss.strides[0]) )) + __pyx_t_8)) )))) * ((__pyx_v_SS_res / powf(__pyx_v_SS_tot, 2.0)) + (powf(__pyx_v_SS_res, 2.0) / powf(__pyx_v_SS_tot, 3.0)))) / ((__pyx_t_5numpy_float32_t)__Pyx_pow_long(((long)__pyx_v_b), 2))) / ((__pyx_t_5numpy_float32_t)__Pyx_pow_long(((long)__pyx_v_c), 2))));
    }
  }
+260:     m_ptr[0] = mse; m_ptr[1] = mse_var
  (__pyx_v_m_ptr[0]) = __pyx_v_mse;
  (__pyx_v_m_ptr[1]) = __pyx_v_mse_var;
/* … */
  (__pyx_v_m_ptr[0]) = __pyx_v_mse;
  (__pyx_v_m_ptr[1]) = __pyx_v_mse_var;
 261: 
+262: cdef void krig_data_c(float_t[::1] I, float_t[:, :, ::1] I_n, float_t[:, ::1] W, float_t[:, :, ::1] u,
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_u, int __pyx_v_j, int __pyx_v_k, __pyx_t_5numpy_float64_t __pyx_v_ls) {
  int __pyx_v_a;
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_i;
  int __pyx_v_jj;
  int __pyx_v_kk;
  int __pyx_v_djk;
  int __pyx_v_jj0;
  int __pyx_v_jj1;
  int __pyx_v_kk0;
  int __pyx_v_kk1;
  __pyx_t_5numpy_float64_t __pyx_v_w0;
  __pyx_t_5numpy_float64_t __pyx_v_r;
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_u, int __pyx_v_j, int __pyx_v_k, __pyx_t_5numpy_float32_t __pyx_v_ls) {
  int __pyx_v_a;
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_i;
  int __pyx_v_jj;
  int __pyx_v_kk;
  int __pyx_v_djk;
  int __pyx_v_jj0;
  int __pyx_v_jj1;
  int __pyx_v_kk0;
  int __pyx_v_kk1;
  __pyx_t_5numpy_float32_t __pyx_v_w0;
  __pyx_t_5numpy_float32_t __pyx_v_r;
/* … */
  /* function exit code */
}
 263:                       int j, int k, float_t ls) nogil:
 264:     cdef:
+265:         int a = I_n.shape[0], b = I_n.shape[1], c = I_n.shape[2], i, jj, kk
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
/* … */
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
+266:         int djk = <int>(ceil(2 * ls))
  __pyx_v_djk = ((int)ceil((2.0 * __pyx_v_ls)));
/* … */
  __pyx_v_djk = ((int)ceil((2.0 * __pyx_v_ls)));
+267:         int jj0 = j - djk if j - djk > 0 else 0
  if ((((__pyx_v_j - __pyx_v_djk) > 0) != 0)) {
    __pyx_t_1 = (__pyx_v_j - __pyx_v_djk);
  } else {
    __pyx_t_1 = 0;
  }
  __pyx_v_jj0 = __pyx_t_1;
/* … */
  if ((((__pyx_v_j - __pyx_v_djk) > 0) != 0)) {
    __pyx_t_1 = (__pyx_v_j - __pyx_v_djk);
  } else {
    __pyx_t_1 = 0;
  }
  __pyx_v_jj0 = __pyx_t_1;
+268:         int jj1 = j + djk if j + djk < b else b
  if ((((__pyx_v_j + __pyx_v_djk) < __pyx_v_b) != 0)) {
    __pyx_t_1 = (__pyx_v_j + __pyx_v_djk);
  } else {
    __pyx_t_1 = __pyx_v_b;
  }
  __pyx_v_jj1 = __pyx_t_1;
/* … */
  if ((((__pyx_v_j + __pyx_v_djk) < __pyx_v_b) != 0)) {
    __pyx_t_1 = (__pyx_v_j + __pyx_v_djk);
  } else {
    __pyx_t_1 = __pyx_v_b;
  }
  __pyx_v_jj1 = __pyx_t_1;
+269:         int kk0 = k - djk if k - djk > 0 else 0
  if ((((__pyx_v_k - __pyx_v_djk) > 0) != 0)) {
    __pyx_t_1 = (__pyx_v_k - __pyx_v_djk);
  } else {
    __pyx_t_1 = 0;
  }
  __pyx_v_kk0 = __pyx_t_1;
/* … */
  if ((((__pyx_v_k - __pyx_v_djk) > 0) != 0)) {
    __pyx_t_1 = (__pyx_v_k - __pyx_v_djk);
  } else {
    __pyx_t_1 = 0;
  }
  __pyx_v_kk0 = __pyx_t_1;
+270:         int kk1 = k + djk if k + djk < c else c
  if ((((__pyx_v_k + __pyx_v_djk) < __pyx_v_c) != 0)) {
    __pyx_t_1 = (__pyx_v_k + __pyx_v_djk);
  } else {
    __pyx_t_1 = __pyx_v_c;
  }
  __pyx_v_kk1 = __pyx_t_1;
/* … */
  if ((((__pyx_v_k + __pyx_v_djk) < __pyx_v_c) != 0)) {
    __pyx_t_1 = (__pyx_v_k + __pyx_v_djk);
  } else {
    __pyx_t_1 = __pyx_v_c;
  }
  __pyx_v_kk1 = __pyx_t_1;
+271:         float_t w0 = 0, r
  __pyx_v_w0 = 0.0;
/* … */
  __pyx_v_w0 = 0.0;
+272:     for i in range(a + 1):
  __pyx_t_2 = (__pyx_v_a + 1);
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_3; __pyx_t_1+=1) {
    __pyx_v_i = __pyx_t_1;
/* … */
  __pyx_t_2 = (__pyx_v_a + 1);
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_3; __pyx_t_1+=1) {
    __pyx_v_i = __pyx_t_1;
+273:         I[i] = 0
    __pyx_t_4 = __pyx_v_i;
    *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_I.data) + __pyx_t_4)) )) = 0.0;
  }
/* … */
    __pyx_t_4 = __pyx_v_i;
    *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_I.data) + __pyx_t_4)) )) = 0.0;
  }
+274:     for jj in range(jj0, jj1):
  __pyx_t_1 = __pyx_v_jj1;
  __pyx_t_5 = __pyx_t_1;
  for (__pyx_t_6 = __pyx_v_jj0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_jj = __pyx_t_6;
/* … */
  __pyx_t_1 = __pyx_v_jj1;
  __pyx_t_5 = __pyx_t_1;
  for (__pyx_t_6 = __pyx_v_jj0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_jj = __pyx_t_6;
+275:         for kk in range(kk0, kk1):
    __pyx_t_7 = __pyx_v_kk1;
    __pyx_t_8 = __pyx_t_7;
    for (__pyx_t_9 = __pyx_v_kk0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
      __pyx_v_kk = __pyx_t_9;
/* … */
    __pyx_t_7 = __pyx_v_kk1;
    __pyx_t_8 = __pyx_t_7;
    for (__pyx_t_9 = __pyx_v_kk0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
      __pyx_v_kk = __pyx_t_9;
+276:             r = rbf((u[0, jj, kk] - u[0, j, k])**2 + (u[1, jj, kk] - u[1, j, k])**2, ls)
      __pyx_t_4 = 0;
      __pyx_t_10 = __pyx_v_jj;
      __pyx_t_11 = __pyx_v_kk;
      __pyx_t_12 = 0;
      __pyx_t_13 = __pyx_v_j;
      __pyx_t_14 = __pyx_v_k;
      __pyx_t_15 = 1;
      __pyx_t_16 = __pyx_v_jj;
      __pyx_t_17 = __pyx_v_kk;
      __pyx_t_18 = 1;
      __pyx_t_19 = __pyx_v_j;
      __pyx_t_20 = __pyx_v_k;
      __pyx_v_r = __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_rbf((pow(((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_4 * __pyx_v_u.strides[0]) ) + __pyx_t_10 * __pyx_v_u.strides[1]) )) + __pyx_t_11)) ))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_12 * __pyx_v_u.strides[0]) ) + __pyx_t_13 * __pyx_v_u.strides[1]) )) + __pyx_t_14)) )))), 2.0) + pow(((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_15 * __pyx_v_u.strides[0]) ) + __pyx_t_16 * __pyx_v_u.strides[1]) )) + __pyx_t_17)) ))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_18 * __pyx_v_u.strides[0]) ) + __pyx_t_19 * __pyx_v_u.strides[1]) )) + __pyx_t_20)) )))), 2.0)), __pyx_v_ls);
/* … */
      __pyx_t_4 = 0;
      __pyx_t_10 = __pyx_v_jj;
      __pyx_t_11 = __pyx_v_kk;
      __pyx_t_12 = 0;
      __pyx_t_13 = __pyx_v_j;
      __pyx_t_14 = __pyx_v_k;
      __pyx_t_15 = 1;
      __pyx_t_16 = __pyx_v_jj;
      __pyx_t_17 = __pyx_v_kk;
      __pyx_t_18 = 1;
      __pyx_t_19 = __pyx_v_j;
      __pyx_t_20 = __pyx_v_k;
      __pyx_v_r = __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_rbf((powf(((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_4 * __pyx_v_u.strides[0]) ) + __pyx_t_10 * __pyx_v_u.strides[1]) )) + __pyx_t_11)) ))) - (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_12 * __pyx_v_u.strides[0]) ) + __pyx_t_13 * __pyx_v_u.strides[1]) )) + __pyx_t_14)) )))), 2.0) + powf(((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_15 * __pyx_v_u.strides[0]) ) + __pyx_t_16 * __pyx_v_u.strides[1]) )) + __pyx_t_17)) ))) - (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_18 * __pyx_v_u.strides[0]) ) + __pyx_t_19 * __pyx_v_u.strides[1]) )) + __pyx_t_20)) )))), 2.0)), __pyx_v_ls);
+277:             w0 += r
      __pyx_v_w0 = (__pyx_v_w0 + __pyx_v_r);
/* … */
      __pyx_v_w0 = (__pyx_v_w0 + __pyx_v_r);
+278:             if w0 * W[jj, kk]:
      __pyx_t_20 = __pyx_v_jj;
      __pyx_t_19 = __pyx_v_kk;
      __pyx_t_21 = ((__pyx_v_w0 * (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_20 * __pyx_v_W.strides[0]) )) + __pyx_t_19)) )))) != 0);
      if (__pyx_t_21) {
/* … */
      }
    }
  }
/* … */
      __pyx_t_20 = __pyx_v_jj;
      __pyx_t_19 = __pyx_v_kk;
      __pyx_t_21 = ((__pyx_v_w0 * (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_20 * __pyx_v_W.strides[0]) )) + __pyx_t_19)) )))) != 0);
      if (__pyx_t_21) {
/* … */
      }
    }
  }
+279:                 I[a] += r**2 / W[jj, kk]
        __pyx_t_19 = __pyx_v_jj;
        __pyx_t_20 = __pyx_v_kk;
        __pyx_t_18 = __pyx_v_a;
        *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_I.data) + __pyx_t_18)) )) += (pow(__pyx_v_r, 2.0) / (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_19 * __pyx_v_W.strides[0]) )) + __pyx_t_20)) ))));
/* … */
        __pyx_t_19 = __pyx_v_jj;
        __pyx_t_20 = __pyx_v_kk;
        __pyx_t_18 = __pyx_v_a;
        *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_I.data) + __pyx_t_18)) )) += (powf(__pyx_v_r, 2.0) / (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_19 * __pyx_v_W.strides[0]) )) + __pyx_t_20)) ))));
+280:                 for i in range(a):
        __pyx_t_22 = __pyx_v_a;
        __pyx_t_23 = __pyx_t_22;
        for (__pyx_t_24 = 0; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
          __pyx_v_i = __pyx_t_24;
/* … */
        __pyx_t_22 = __pyx_v_a;
        __pyx_t_23 = __pyx_t_22;
        for (__pyx_t_24 = 0; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
          __pyx_v_i = __pyx_t_24;
+281:                     I[i] += r / w0 * (I_n[i, jj, kk] / W[jj, kk] - I[i])
          __pyx_t_20 = __pyx_v_i;
          __pyx_t_19 = __pyx_v_jj;
          __pyx_t_18 = __pyx_v_kk;
          __pyx_t_17 = __pyx_v_jj;
          __pyx_t_16 = __pyx_v_kk;
          __pyx_t_15 = __pyx_v_i;
          __pyx_t_14 = __pyx_v_i;
          *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_I.data) + __pyx_t_14)) )) += ((__pyx_v_r / __pyx_v_w0) * (((*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I_n.data + __pyx_t_20 * __pyx_v_I_n.strides[0]) ) + __pyx_t_19 * __pyx_v_I_n.strides[1]) )) + __pyx_t_18)) ))) / (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_17 * __pyx_v_W.strides[0]) )) + __pyx_t_16)) )))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_I.data) + __pyx_t_15)) )))));
        }
/* … */
          __pyx_t_20 = __pyx_v_i;
          __pyx_t_19 = __pyx_v_jj;
          __pyx_t_18 = __pyx_v_kk;
          __pyx_t_17 = __pyx_v_jj;
          __pyx_t_16 = __pyx_v_kk;
          __pyx_t_15 = __pyx_v_i;
          __pyx_t_14 = __pyx_v_i;
          *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_I.data) + __pyx_t_14)) )) += ((__pyx_v_r / __pyx_v_w0) * (((*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I_n.data + __pyx_t_20 * __pyx_v_I_n.strides[0]) ) + __pyx_t_19 * __pyx_v_I_n.strides[1]) )) + __pyx_t_18)) ))) / (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_W.data + __pyx_t_17 * __pyx_v_W.strides[0]) )) + __pyx_t_16)) )))) - (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_I.data) + __pyx_t_15)) )))));
        }
+282:     if w0:
  __pyx_t_21 = (__pyx_v_w0 != 0);
  if (__pyx_t_21) {
/* … */
  }
/* … */
  __pyx_t_21 = (__pyx_v_w0 != 0);
  if (__pyx_t_21) {
/* … */
  }
+283:         I[a] /= w0**2
    __pyx_t_15 = __pyx_v_a;
    *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_I.data) + __pyx_t_15)) )) /= pow(__pyx_v_w0, 2.0);
/* … */
    __pyx_t_15 = __pyx_v_a;
    *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_I.data) + __pyx_t_15)) )) /= powf(__pyx_v_w0, 2.0);
 284: 
+285: cdef void subpixel_ref_1d(float_t[::1] x, float_t* mse_m, float_t mu) nogil:
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_1d(__Pyx_memviewslice __pyx_v_x, __pyx_t_5numpy_float64_t *__pyx_v_mse_m, __pyx_t_5numpy_float64_t __pyx_v_mu) {
  __pyx_t_5numpy_float64_t __pyx_v_dfs;
  __pyx_t_5numpy_float64_t __pyx_v_det;
  __pyx_t_5numpy_float64_t __pyx_v_dd;
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_1d(__Pyx_memviewslice __pyx_v_x, __pyx_t_5numpy_float32_t *__pyx_v_mse_m, __pyx_t_5numpy_float32_t __pyx_v_mu) {
  __pyx_t_5numpy_float32_t __pyx_v_dfs;
  __pyx_t_5numpy_float32_t __pyx_v_det;
  __pyx_t_5numpy_float32_t __pyx_v_dd;
/* … */
  /* function exit code */
}
 286:     cdef:
+287:         float_t dfs = 0, det, dd
  __pyx_v_dfs = 0.0;
/* … */
  __pyx_v_dfs = 0.0;
+288:     det = 4 * (mse_m[2] + mse_m[0] - 2 * mse_m[1])
  __pyx_v_det = (4.0 * (((__pyx_v_mse_m[2]) + (__pyx_v_mse_m[0])) - (2.0 * (__pyx_v_mse_m[1]))));
/* … */
  __pyx_v_det = (4.0 * (((__pyx_v_mse_m[2]) + (__pyx_v_mse_m[0])) - (2.0 * (__pyx_v_mse_m[1]))));
+289:     if det != 0:
  __pyx_t_1 = ((__pyx_v_det != 0.0) != 0);
  if (__pyx_t_1) {
/* … */
  }
/* … */
  __pyx_t_1 = ((__pyx_v_det != 0.0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+290:         dfs = (mse_m[0] - mse_m[2]) / det * mu
    __pyx_v_dfs = ((((__pyx_v_mse_m[0]) - (__pyx_v_mse_m[2])) / __pyx_v_det) * __pyx_v_mu);
/* … */
    __pyx_v_dfs = ((((__pyx_v_mse_m[0]) - (__pyx_v_mse_m[2])) / __pyx_v_det) * __pyx_v_mu);
+291:         dd = sqrt(dfs**2)
    __pyx_v_dd = sqrt(pow(__pyx_v_dfs, 2.0));
/* … */
    __pyx_v_dd = sqrt(powf(__pyx_v_dfs, 2.0));
+292:         if dd > 1:
    __pyx_t_1 = ((__pyx_v_dd > 1.0) != 0);
    if (__pyx_t_1) {
/* … */
    }
/* … */
    __pyx_t_1 = ((__pyx_v_dd > 1.0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+293:             dfs /= dd
      __pyx_v_dfs = (__pyx_v_dfs / __pyx_v_dd);
/* … */
      __pyx_v_dfs = (__pyx_v_dfs / __pyx_v_dd);
 294: 
+295:     x[1] += dfs
  __pyx_t_2 = 1;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_x.data) + __pyx_t_2)) )) += __pyx_v_dfs;
/* … */
  __pyx_t_2 = 1;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_x.data) + __pyx_t_2)) )) += __pyx_v_dfs;
 296: 
+297: cdef void subpixel_ref_2d(float_t[::1] x, float_t* mse_m, float_t mu) nogil:
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_2d(__Pyx_memviewslice __pyx_v_x, __pyx_t_5numpy_float64_t *__pyx_v_mse_m, __pyx_t_5numpy_float64_t __pyx_v_mu) {
  __pyx_t_5numpy_float64_t __pyx_v_dss;
  __pyx_t_5numpy_float64_t __pyx_v_dfs;
  __pyx_t_5numpy_float64_t __pyx_v_det;
  __pyx_t_5numpy_float64_t __pyx_v_dd;
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_2d(__Pyx_memviewslice __pyx_v_x, __pyx_t_5numpy_float32_t *__pyx_v_mse_m, __pyx_t_5numpy_float32_t __pyx_v_mu) {
  __pyx_t_5numpy_float32_t __pyx_v_dss;
  __pyx_t_5numpy_float32_t __pyx_v_dfs;
  __pyx_t_5numpy_float32_t __pyx_v_det;
  __pyx_t_5numpy_float32_t __pyx_v_dd;
/* … */
  /* function exit code */
}
 298:     cdef:
+299:         float_t dss = 0, dfs = 0, det, dd
  __pyx_v_dss = 0.0;
  __pyx_v_dfs = 0.0;
/* … */
  __pyx_v_dss = 0.0;
  __pyx_v_dfs = 0.0;
+300:     det = 4 * (mse_m[5] + mse_m[1] - 2 * mse_m[3]) * (mse_m[4] + mse_m[2] - 2 * mse_m[3]) - \
  __pyx_v_det = (((4.0 * (((__pyx_v_mse_m[5]) + (__pyx_v_mse_m[1])) - (2.0 * (__pyx_v_mse_m[3])))) * (((__pyx_v_mse_m[4]) + (__pyx_v_mse_m[2])) - (2.0 * (__pyx_v_mse_m[3])))) - pow((((((((__pyx_v_mse_m[6]) + (__pyx_v_mse_m[0])) + (2.0 * (__pyx_v_mse_m[3]))) - (__pyx_v_mse_m[1])) - (__pyx_v_mse_m[5])) - (__pyx_v_mse_m[2])) - (__pyx_v_mse_m[4])), 2.0));
/* … */
  __pyx_v_det = (((4.0 * (((__pyx_v_mse_m[5]) + (__pyx_v_mse_m[1])) - (2.0 * (__pyx_v_mse_m[3])))) * (((__pyx_v_mse_m[4]) + (__pyx_v_mse_m[2])) - (2.0 * (__pyx_v_mse_m[3])))) - powf((((((((__pyx_v_mse_m[6]) + (__pyx_v_mse_m[0])) + (2.0 * (__pyx_v_mse_m[3]))) - (__pyx_v_mse_m[1])) - (__pyx_v_mse_m[5])) - (__pyx_v_mse_m[2])) - (__pyx_v_mse_m[4])), 2.0));
 301:           (mse_m[6] + mse_m[0] + 2 * mse_m[3] - mse_m[1] - mse_m[5] - mse_m[2] - mse_m[4])**2
+302:     if det != 0:
  __pyx_t_1 = ((__pyx_v_det != 0.0) != 0);
  if (__pyx_t_1) {
/* … */
  }
/* … */
  __pyx_t_1 = ((__pyx_v_det != 0.0) != 0);
  if (__pyx_t_1) {
/* … */
  }
 303:         dss = ((mse_m[6] + mse_m[0] + 2 * mse_m[3] - mse_m[1] - mse_m[5] - mse_m[2] - mse_m[4]) * \
 304:                (mse_m[4] - mse_m[2]) - 2 * (mse_m[4] + mse_m[2] - 2 * mse_m[3]) * \
+305:                (mse_m[5] - mse_m[1])) / det * mu / 2
    __pyx_v_dss = ((((((((((((__pyx_v_mse_m[6]) + (__pyx_v_mse_m[0])) + (2.0 * (__pyx_v_mse_m[3]))) - (__pyx_v_mse_m[1])) - (__pyx_v_mse_m[5])) - (__pyx_v_mse_m[2])) - (__pyx_v_mse_m[4])) * ((__pyx_v_mse_m[4]) - (__pyx_v_mse_m[2]))) - ((2.0 * (((__pyx_v_mse_m[4]) + (__pyx_v_mse_m[2])) - (2.0 * (__pyx_v_mse_m[3])))) * ((__pyx_v_mse_m[5]) - (__pyx_v_mse_m[1])))) / __pyx_v_det) * __pyx_v_mu) / 2.0);
/* … */
    __pyx_v_dss = ((((((((((((__pyx_v_mse_m[6]) + (__pyx_v_mse_m[0])) + (2.0 * (__pyx_v_mse_m[3]))) - (__pyx_v_mse_m[1])) - (__pyx_v_mse_m[5])) - (__pyx_v_mse_m[2])) - (__pyx_v_mse_m[4])) * ((__pyx_v_mse_m[4]) - (__pyx_v_mse_m[2]))) - ((2.0 * (((__pyx_v_mse_m[4]) + (__pyx_v_mse_m[2])) - (2.0 * (__pyx_v_mse_m[3])))) * ((__pyx_v_mse_m[5]) - (__pyx_v_mse_m[1])))) / __pyx_v_det) * __pyx_v_mu) / 2.0);
 306:         dfs = ((mse_m[6] + mse_m[0] + 2 * mse_m[3] - mse_m[1] - mse_m[5] - mse_m[2] - mse_m[4]) * \
 307:                (mse_m[5] - mse_m[1]) - 2 * (mse_m[5] + mse_m[1] - 2 * mse_m[3]) * \
+308:                (mse_m[4] - mse_m[2])) / det * mu / 2
    __pyx_v_dfs = ((((((((((((__pyx_v_mse_m[6]) + (__pyx_v_mse_m[0])) + (2.0 * (__pyx_v_mse_m[3]))) - (__pyx_v_mse_m[1])) - (__pyx_v_mse_m[5])) - (__pyx_v_mse_m[2])) - (__pyx_v_mse_m[4])) * ((__pyx_v_mse_m[5]) - (__pyx_v_mse_m[1]))) - ((2.0 * (((__pyx_v_mse_m[5]) + (__pyx_v_mse_m[1])) - (2.0 * (__pyx_v_mse_m[3])))) * ((__pyx_v_mse_m[4]) - (__pyx_v_mse_m[2])))) / __pyx_v_det) * __pyx_v_mu) / 2.0);
/* … */
    __pyx_v_dfs = ((((((((((((__pyx_v_mse_m[6]) + (__pyx_v_mse_m[0])) + (2.0 * (__pyx_v_mse_m[3]))) - (__pyx_v_mse_m[1])) - (__pyx_v_mse_m[5])) - (__pyx_v_mse_m[2])) - (__pyx_v_mse_m[4])) * ((__pyx_v_mse_m[5]) - (__pyx_v_mse_m[1]))) - ((2.0 * (((__pyx_v_mse_m[5]) + (__pyx_v_mse_m[1])) - (2.0 * (__pyx_v_mse_m[3])))) * ((__pyx_v_mse_m[4]) - (__pyx_v_mse_m[2])))) / __pyx_v_det) * __pyx_v_mu) / 2.0);
+309:         dd = sqrt(dfs**2 + dss**2)
    __pyx_v_dd = sqrt((pow(__pyx_v_dfs, 2.0) + pow(__pyx_v_dss, 2.0)));
/* … */
    __pyx_v_dd = sqrt((powf(__pyx_v_dfs, 2.0) + powf(__pyx_v_dss, 2.0)));
+310:         if dd > 1:
    __pyx_t_1 = ((__pyx_v_dd > 1.0) != 0);
    if (__pyx_t_1) {
/* … */
    }
/* … */
    __pyx_t_1 = ((__pyx_v_dd > 1.0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+311:             dss /= dd; dfs /= dd
      __pyx_v_dss = (__pyx_v_dss / __pyx_v_dd);
      __pyx_v_dfs = (__pyx_v_dfs / __pyx_v_dd);
/* … */
      __pyx_v_dss = (__pyx_v_dss / __pyx_v_dd);
      __pyx_v_dfs = (__pyx_v_dfs / __pyx_v_dd);
 312: 
+313:     x[0] += dss; x[1] += dfs
  __pyx_t_2 = 0;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_x.data) + __pyx_t_2)) )) += __pyx_v_dss;
  __pyx_t_2 = 1;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_x.data) + __pyx_t_2)) )) += __pyx_v_dfs;
/* … */
  __pyx_t_2 = 0;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_x.data) + __pyx_t_2)) )) += __pyx_v_dss;
  __pyx_t_2 = 1;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_x.data) + __pyx_t_2)) )) += __pyx_v_dfs;
 314: 
+315: cdef void update_pm_c(float_t[::1] I, float_t[:, ::1] I0, float_t[::1] u,
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_update_pm_c(__Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_ss, int __pyx_v_sw_fs) {
  int __pyx_v_ss_min;
  int __pyx_v_fs_min;
  int __pyx_v_ss_max;
  int __pyx_v_fs_max;
  int __pyx_v_ss;
  int __pyx_v_fs;
  __pyx_t_5numpy_float64_t __pyx_v_mse_min;
  __pyx_t_5numpy_float64_t __pyx_v_mse_max;
  __pyx_t_5numpy_float64_t __pyx_v_mse_var;
  __pyx_t_5numpy_float64_t __pyx_v_mse;
  __pyx_t_5numpy_float64_t __pyx_v_l1;
  __pyx_t_5numpy_float64_t __pyx_v_mu;
  __pyx_t_5numpy_float64_t __pyx_v_mv_ptr[3];
  __pyx_t_5numpy_float64_t __pyx_v_mse_m[7];
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_update_pm_c(__Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_ss, int __pyx_v_sw_fs) {
  int __pyx_v_ss_min;
  int __pyx_v_fs_min;
  int __pyx_v_ss_max;
  int __pyx_v_fs_max;
  int __pyx_v_ss;
  int __pyx_v_fs;
  __pyx_t_5numpy_float32_t __pyx_v_mse_min;
  __pyx_t_5numpy_float32_t __pyx_v_mse_max;
  __pyx_t_5numpy_float32_t __pyx_v_mse_var;
  __pyx_t_5numpy_float32_t __pyx_v_mse;
  __pyx_t_5numpy_float32_t __pyx_v_l1;
  __pyx_t_5numpy_float32_t __pyx_v_mu;
  __pyx_t_5numpy_float32_t __pyx_v_mv_ptr[3];
  __pyx_t_5numpy_float32_t __pyx_v_mse_m[7];
/* … */
  /* function exit code */
}
 316:                        float_t[::1] di, float_t[::1] dj, int sw_ss, int sw_fs) nogil:
 317:     cdef:
+318:         int ss_min = -sw_ss, fs_min = -sw_fs, ss_max = -sw_ss, fs_max = -sw_fs, ss, fs
  __pyx_v_ss_min = (-__pyx_v_sw_ss);
  __pyx_v_fs_min = (-__pyx_v_sw_fs);
  __pyx_v_ss_max = (-__pyx_v_sw_ss);
  __pyx_v_fs_max = (-__pyx_v_sw_fs);
/* … */
  __pyx_v_ss_min = (-__pyx_v_sw_ss);
  __pyx_v_fs_min = (-__pyx_v_sw_fs);
  __pyx_v_ss_max = (-__pyx_v_sw_ss);
  __pyx_v_fs_max = (-__pyx_v_sw_fs);
+319:         float_t mse_min = FLOAT_MAX, mse_max = -FLOAT_MAX, mse_var = FLOAT_MAX, mse, l1, mu
  __pyx_v_mse_min = 1.7976931348623157e+308;
  __pyx_v_mse_max = -1.7976931348623157e+308;
  __pyx_v_mse_var = 1.7976931348623157e+308;
/* … */
  __pyx_v_mse_min = 1.7976931348623157e+308;
  __pyx_v_mse_max = -1.7976931348623157e+308;
  __pyx_v_mse_var = 1.7976931348623157e+308;
 320:         float_t mv_ptr[3]
 321:         float_t mse_m[7]
+322:     for ss in range(-sw_ss, sw_ss + 1):
  __pyx_t_1 = (__pyx_v_sw_ss + 1);
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = (-__pyx_v_sw_ss); __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_ss = __pyx_t_3;
/* … */
  __pyx_t_1 = (__pyx_v_sw_ss + 1);
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = (-__pyx_v_sw_ss); __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_ss = __pyx_t_3;
+323:         for fs in range(-sw_fs, sw_fs + 1):
    __pyx_t_4 = (__pyx_v_sw_fs + 1);
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = (-__pyx_v_sw_fs); __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_fs = __pyx_t_6;
/* … */
    __pyx_t_4 = (__pyx_v_sw_fs + 1);
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = (-__pyx_v_sw_fs); __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_fs = __pyx_t_6;
+324:             mse_bi(mv_ptr, I, I0, di, dj, u[0] + ss, u[1] + fs)
      __pyx_t_7 = 0;
      __pyx_t_8 = 1;
      __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_7)) ))) + __pyx_v_ss), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + __pyx_v_fs));
/* … */
      __pyx_t_7 = 0;
      __pyx_t_8 = 1;
      __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_7)) ))) + __pyx_v_ss), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + __pyx_v_fs));
+325:             mse = mv_ptr[0] / mv_ptr[1]
      __pyx_v_mse = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
/* … */
      __pyx_v_mse = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
+326:             if mse < mse_min:
      __pyx_t_9 = ((__pyx_v_mse < __pyx_v_mse_min) != 0);
      if (__pyx_t_9) {
/* … */
      }
/* … */
      __pyx_t_9 = ((__pyx_v_mse < __pyx_v_mse_min) != 0);
      if (__pyx_t_9) {
/* … */
      }
+327:                 mse_min = mse; mse_var = mv_ptr[2]; ss_min = ss; fs_min = fs;
        __pyx_v_mse_min = __pyx_v_mse;
        __pyx_v_mse_var = (__pyx_v_mv_ptr[2]);
        __pyx_v_ss_min = __pyx_v_ss;
        __pyx_v_fs_min = __pyx_v_fs;
/* … */
        __pyx_v_mse_min = __pyx_v_mse;
        __pyx_v_mse_var = (__pyx_v_mv_ptr[2]);
        __pyx_v_ss_min = __pyx_v_ss;
        __pyx_v_fs_min = __pyx_v_fs;
+328:             if mse > mse_max:
      __pyx_t_9 = ((__pyx_v_mse > __pyx_v_mse_max) != 0);
      if (__pyx_t_9) {
/* … */
      }
    }
  }
/* … */
      __pyx_t_9 = ((__pyx_v_mse > __pyx_v_mse_max) != 0);
      if (__pyx_t_9) {
/* … */
      }
    }
  }
+329:                 mse_max = mse; ss_max = ss; fs_max = fs
        __pyx_v_mse_max = __pyx_v_mse;
        __pyx_v_ss_max = __pyx_v_ss;
        __pyx_v_fs_max = __pyx_v_fs;
/* … */
        __pyx_v_mse_max = __pyx_v_mse;
        __pyx_v_ss_max = __pyx_v_ss;
        __pyx_v_fs_max = __pyx_v_fs;
+330:     u[0] += ss_min; u[1] += fs_min
  __pyx_t_8 = 0;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) )) += __pyx_v_ss_min;
  __pyx_t_8 = 1;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) )) += __pyx_v_fs_min;
/* … */
  __pyx_t_8 = 0;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) )) += __pyx_v_ss_min;
  __pyx_t_8 = 1;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) )) += __pyx_v_fs_min;
+331:     l1 = 2 * (mse_max - mse_min) / ((ss_max - ss_min)**2 + (fs_max - fs_min)**2)
  __pyx_v_l1 = ((2.0 * (__pyx_v_mse_max - __pyx_v_mse_min)) / ((__pyx_t_5numpy_float64_t)(__Pyx_pow_long(((long)(__pyx_v_ss_max - __pyx_v_ss_min)), 2) + __Pyx_pow_long(((long)(__pyx_v_fs_max - __pyx_v_fs_min)), 2))));
/* … */
  __pyx_v_l1 = ((2.0 * (__pyx_v_mse_max - __pyx_v_mse_min)) / ((__pyx_t_5numpy_float32_t)(__Pyx_pow_long(((long)(__pyx_v_ss_max - __pyx_v_ss_min)), 2) + __Pyx_pow_long(((long)(__pyx_v_fs_max - __pyx_v_fs_min)), 2))));
+332:     mu = (3 * mse_var**0.5 / l1)**0.33
  __pyx_v_mu = pow(((3.0 * pow(__pyx_v_mse_var, ((__pyx_t_5numpy_float64_t)0.5))) / __pyx_v_l1), ((__pyx_t_5numpy_float64_t)0.33));
/* … */
  __pyx_v_mu = pow(((3.0 * pow(((double)__pyx_v_mse_var), 0.5)) / ((double)__pyx_v_l1)), 0.33);
+333:     mu = mu if mu > 2 else 2
  if (((__pyx_v_mu > 2.0) != 0)) {
    __pyx_t_10 = __pyx_v_mu;
  } else {
    __pyx_t_10 = 2.0;
  }
  __pyx_v_mu = __pyx_t_10;
/* … */
  if (((__pyx_v_mu > 2.0) != 0)) {
    __pyx_t_10 = __pyx_v_mu;
  } else {
    __pyx_t_10 = 2.0;
  }
  __pyx_v_mu = __pyx_t_10;
+334:     if sw_ss:
  __pyx_t_9 = (__pyx_v_sw_ss != 0);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L9;
  }
/* … */
  __pyx_t_9 = (__pyx_v_sw_ss != 0);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L9;
  }
+335:         mse_bi(mv_ptr, I, I0, di, dj, u[0] - mu / 2, u[1] - mu / 2)
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) ))) - (__pyx_v_mu / 2.0)), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) ))) - (__pyx_v_mu / 2.0)), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
+336:         mse_m[0] = mv_ptr[0] / mv_ptr[1]
    (__pyx_v_mse_m[0]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
/* … */
    (__pyx_v_mse_m[0]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
+337:         mse_bi(mv_ptr, I, I0, di, dj, u[0] - mu / 2, u[1])
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) ))));
/* … */
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) ))));
+338:         mse_m[1] = mv_ptr[0] / mv_ptr[1]
    (__pyx_v_mse_m[1]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
/* … */
    (__pyx_v_mse_m[1]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
+339:         mse_bi(mv_ptr, I, I0, di, dj, u[0], u[1] - mu / 2)
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
+340:         mse_m[2] = mv_ptr[0] / mv_ptr[1]
    (__pyx_v_mse_m[2]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
/* … */
    (__pyx_v_mse_m[2]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
+341:         mse_m[3] = mse_min
    (__pyx_v_mse_m[3]) = __pyx_v_mse_min;
/* … */
    (__pyx_v_mse_m[3]) = __pyx_v_mse_min;
+342:         mse_bi(mv_ptr, I, I0, di, dj, u[0], u[1] + mu / 2)
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_7)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_7)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)));
+343:         mse_m[4] = mv_ptr[0] / mv_ptr[1]
    (__pyx_v_mse_m[4]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
/* … */
    (__pyx_v_mse_m[4]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
+344:         mse_bi(mv_ptr, I, I0, di, dj, u[0] + mu / 2, u[1])
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_7)) ))));
/* … */
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_7)) ))));
+345:         mse_m[5] = mv_ptr[0] / mv_ptr[1]
    (__pyx_v_mse_m[5]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
/* … */
    (__pyx_v_mse_m[5]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
+346:         mse_bi(mv_ptr, I, I0, di, dj, u[0] + mu / 2, u[1] + mu / 2)
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_7)) ))) + (__pyx_v_mu / 2.0)), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_7)) ))) + (__pyx_v_mu / 2.0)), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)));
+347:         mse_m[6] = mv_ptr[0] / mv_ptr[1]
    (__pyx_v_mse_m[6]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
/* … */
    (__pyx_v_mse_m[6]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
+348:         subpixel_ref_2d(u, mse_m, mu)
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_2d(__pyx_v_u, __pyx_v_mse_m, __pyx_v_mu);
/* … */
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_2d(__pyx_v_u, __pyx_v_mse_m, __pyx_v_mu);
 349:     else:
+350:         mse_bi(mv_ptr, I, I0, di, dj, u[0], u[1] - mu / 2)
  /*else*/ {
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
/* … */
  /*else*/ {
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
+351:         mse_m[0] = mv_ptr[0] / mv_ptr[1]
    (__pyx_v_mse_m[0]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
/* … */
    (__pyx_v_mse_m[0]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
+352:         mse_m[1] = mse_min
    (__pyx_v_mse_m[1]) = __pyx_v_mse_min;
/* … */
    (__pyx_v_mse_m[1]) = __pyx_v_mse_min;
+353:         mse_bi(mv_ptr, I, I0, di, dj, u[0], u[1] + mu / 2)
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_7)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mv_ptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_7)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)));
+354:         mse_m[2] = mv_ptr[0] / mv_ptr[1]
    (__pyx_v_mse_m[2]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
/* … */
    (__pyx_v_mse_m[2]) = ((__pyx_v_mv_ptr[0]) / (__pyx_v_mv_ptr[1]));
+355:         subpixel_ref_1d(u, mse_m, mu)
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_1d(__pyx_v_u, __pyx_v_mse_m, __pyx_v_mu);
  }
  __pyx_L9:;
/* … */
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_1d(__pyx_v_u, __pyx_v_mse_m, __pyx_v_mu);
  }
  __pyx_L9:;
 356: 
+357: def update_pixel_map_gs(float_t[:, :, ::1] I_n, float_t[:, ::1] W, float_t[:, ::1] I0,
/* Python wrapper */
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_3update_pixel_map_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyrost_3bin_6pyrost_2update_pixel_map_gs[] = "update_pixel_map_gs(signatures, args, kwargs, defaults)\nUpdate the pixel mapping by minimizing mean-squared-error\n    (MSE). Perform a grid search within the search window of `sw_ss`,\n    `sw_fs` size along the slow and fast axes accordingly in order to\n    minimize the MSE.\n\n    Parameters\n    ----------\n    I_n : numpy.ndarray\n        Measured intensity frames.\n    W : numpy.ndarray\n        Measured frames' whitefield.\n    I0 : numpy.ndarray\n        Reference image of the sample.\n    u0 : numpy.ndarray\n        Initial pixel mapping.\n    di : numpy.ndarray\n        Sample's translations along the slow detector axis\n        in pixels.\n    dj : numpy.ndarray\n        Sample's translations along the fast detector axis\n        in pixels.\n    sw_ss : int\n        Search window size in pixels along the slow detector\n        axis.\n    sw_fs : int\n        Search window size in pixels along the fast detector\n        axis.\n    ls : float\n        Reference image length scale in pixels.\n    num_threads : int, optional\n        Number of threads.\n\n    Returns\n    -------\n    u : numpy.ndarray\n        Updated pixel mapping array.\n\n    Notes\n    -----\n    The following error metric is being minimized:\n\n    .. math::\n\n        MSE[i, j] = \\frac{\\sum_n \\left( I_g[n]\n        - I_{ref}[ii_n, jj_n] \\right)^2}{\\sum_n \\left(\n        I_g[n] - 1 \\right)^2}\n    \n    Where :math:`I_g[n]` is a kriged intensity profile of the\n    particular detector coordinate :math:`I_n[n, i, j]`. Intensity\n    profile :math:`I_n[n, i, j]` is kriged with gaussian radial\n    basis function :math:`\\phi`:\n\n    .. math::\n        I_g[n] = \\frac{\\sum_{\\Delta i, \\Delta j} I_n[n, i + \\Delta i,\n        j + \\Delta j] W[i + \\Delta i, j + \\Delta j] \n        \\phi[\\Delta u[0], \\Delta u[1]]}\n        {\\sum_{\\Delta i, \\Delta j} W[i + \\Delta i, j + \\Delta j]^2\n        \\phi[\\Delta u[0], \\Delta u[1]]}\n    \n    .. math::\n        \\Delta u[0] = u[0"", i + \\Delta i, j + \\Delta j] - u[0, i, j]\n    \n    .. math::\n        \\Delta u[1] = u[1, i + \\Delta i, j + \\Delta j] - u[1, i, j]\n\n    .. math::\n        \\phi [\\Delta ii_{ref}, \\Delta jj_{ref}] = \n        \\exp\\left[{-\\frac{(\\Delta ii_{ref})^2 + \n        (\\Delta jj_{ref})^2}{ls^2}}\\right]\n    ";
static PyMethodDef __pyx_mdef_6pyrost_3bin_6pyrost_3update_pixel_map_gs = {"update_pixel_map_gs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyrost_3bin_6pyrost_3update_pixel_map_gs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_2update_pixel_map_gs};
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_3update_pixel_map_gs(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;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 357, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 357, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_signatures = values[0];
    __pyx_v_args = values[1];
    __pyx_v_kwargs = values[2];
    __pyx_v_defaults = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 357, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_2update_pixel_map_gs(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_2update_pixel_map_gs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
  PyObject *__pyx_v_dest_sig = NULL;
  Py_ssize_t __pyx_v_i;
  PyTypeObject *__pyx_v_ndarray = 0;
  __Pyx_memviewslice __pyx_v_memslice;
  Py_ssize_t __pyx_v_itemsize;
  CYTHON_UNUSED int __pyx_v_dtype_signed;
  char __pyx_v_kind;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_dtype = NULL;
  PyObject *__pyx_v_arg_base = NULL;
  PyObject *__pyx_v_candidates = NULL;
  PyObject *__pyx_v_sig = NULL;
  int __pyx_v_match_found;
  PyObject *__pyx_v_src_sig = NULL;
  PyObject *__pyx_v_dst_type = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_pixel_map_gs", 0);
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 357, __pyx_L1_error)
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
  }
  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_itemsize = -1L;
  if (unlikely(__pyx_v_args == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 357, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 357, __pyx_L1_error)
  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 357, __pyx_L1_error)
    }
    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    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, 357, __pyx_L1_error)
  }
  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_I_n, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 357, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 357, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_I_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  /*else*/ {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 357, __pyx_L1_error)
    }
    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 357, __pyx_L1_error)
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_int_9);
    __Pyx_GIVEREF(__pyx_int_9);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_9);
    __Pyx_INCREF(__pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_n_s_s);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 357, __pyx_L1_error)
  }
  __pyx_L6:;
  while (1) {
    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_dtype = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L12;
      }
      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_arg_base = __pyx_t_6;
        __pyx_t_6 = 0;
        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
        __pyx_t_2 = (__pyx_t_3 != 0);
        if (__pyx_t_2) {
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_v_dtype = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L13;
        }
        /*else*/ {
          __Pyx_INCREF(Py_None);
          __pyx_v_dtype = Py_None;
        }
        __pyx_L13:;
        goto __pyx_L12;
      }
      /*else*/ {
        __Pyx_INCREF(Py_None);
        __pyx_v_dtype = Py_None;
      }
      __pyx_L12:;
      __pyx_v_itemsize = -1L;
      __pyx_t_2 = (__pyx_v_dtype != Py_None);
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_itemsize = __pyx_t_5;
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_kind = __pyx_t_7;
        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
        switch (__pyx_v_kind) {
          case 'i':
          case 'u':
          break;
          case 'f':
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L16_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 357, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L16_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 357, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L19_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 357, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L19_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 357, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          break;
          case 'c':
          break;
          case 'O':
          break;
          default: break;
        }
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L22_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L22_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 357, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L26_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L26_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 357, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 357, __pyx_L1_error)
    goto __pyx_L10_break;
  }
  __pyx_L10_break:;
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_signatures == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 357, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_v_match_found = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 357, __pyx_L1_error)
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_i = __pyx_t_17;
      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (__pyx_t_2) {
          __pyx_v_match_found = 1;
          goto __pyx_L34;
        }
        /*else*/ {
          __pyx_v_match_found = 0;
          goto __pyx_L32_break;
        }
        __pyx_L34:;
      }
    }
    __pyx_L32_break:;
    __pyx_t_2 = (__pyx_v_match_found != 0);
    if (__pyx_t_2) {
      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 357, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
  __pyx_t_3 = ((!__pyx_t_2) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 357, __pyx_L1_error)
  }
  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 357, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 357, __pyx_L1_error)
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_signatures == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 357, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dest_sig);
  __Pyx_XDECREF(__pyx_v_ndarray);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_arg_base);
  __Pyx_XDECREF(__pyx_v_candidates);
  __Pyx_XDECREF(__pyx_v_sig);
  __Pyx_XDECREF(__pyx_v_src_sig);
  __Pyx_XDECREF(__pyx_v_dst_type);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_68__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_21update_pixel_map_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_21update_pixel_map_gs = {"__pyx_fuse_0update_pixel_map_gs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_21update_pixel_map_gs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_2update_pixel_map_gs};
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_21update_pixel_map_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_sw_ss;
  int __pyx_v_sw_fs;
  __pyx_t_5numpy_float64_t __pyx_v_ls;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_pixel_map_gs (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u0,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_sw_ss,&__pyx_n_s_sw_fs,&__pyx_n_s_ls,&__pyx_n_s_num_threads,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    __pyx_defaults6 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 1); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 2); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 3); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 4); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 5); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_ss)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 6); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_fs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 7); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 8); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_pixel_map_gs") < 0)) __PYX_ERR(0, 357, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 357, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 357, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 357, __pyx_L3_error)
    __pyx_v_u0 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u0.memview)) __PYX_ERR(0, 358, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 358, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 358, __pyx_L3_error)
    __pyx_v_sw_ss = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_sw_ss == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error)
    __pyx_v_sw_fs = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_sw_fs == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_ls == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error)
    if (values[9]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[9]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 357, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_pixel_map_gs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_20update_pixel_map_gs(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u0, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_ss, __pyx_v_sw_fs, __pyx_v_ls, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_20update_pixel_map_gs(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u0, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_ss, int __pyx_v_sw_fs, __pyx_t_5numpy_float64_t __pyx_v_ls, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  int __pyx_v_a;
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __Pyx_memviewslice __pyx_v_u_buf = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_0update_pixel_map_gs", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_pixel_map_gs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u_buf, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_70__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults7, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_23update_pixel_map_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_23update_pixel_map_gs = {"__pyx_fuse_1update_pixel_map_gs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_23update_pixel_map_gs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_2update_pixel_map_gs};
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_23update_pixel_map_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_sw_ss;
  int __pyx_v_sw_fs;
  __pyx_t_5numpy_float32_t __pyx_v_ls;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_pixel_map_gs (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u0,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_sw_ss,&__pyx_n_s_sw_fs,&__pyx_n_s_ls,&__pyx_n_s_num_threads,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    __pyx_defaults7 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults7, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 1); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 2); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 3); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 4); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 5); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_ss)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 6); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_fs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 7); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, 8); __PYX_ERR(0, 357, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_pixel_map_gs") < 0)) __PYX_ERR(0, 357, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 357, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 357, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 357, __pyx_L3_error)
    __pyx_v_u0 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u0.memview)) __PYX_ERR(0, 358, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 358, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 358, __pyx_L3_error)
    __pyx_v_sw_ss = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_sw_ss == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error)
    __pyx_v_sw_fs = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_sw_fs == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_ls == ((npy_float32)-1)) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error)
    if (values[9]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[9]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_pixel_map_gs", 0, 9, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 357, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_pixel_map_gs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_22update_pixel_map_gs(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u0, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_ss, __pyx_v_sw_fs, __pyx_v_ls, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_22update_pixel_map_gs(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u0, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_ss, int __pyx_v_sw_fs, __pyx_t_5numpy_float32_t __pyx_v_ls, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  int __pyx_v_a;
  int __pyx_v_b;
  int __pyx_v_c;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __Pyx_memviewslice __pyx_v_u_buf = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_1update_pixel_map_gs", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_pixel_map_gs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u_buf, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __pyx_t_3 = 0;
/* … */
  __pyx_tuple__27 = PyTuple_Pack(20, __pyx_n_s_I_n, __pyx_n_s_W, __pyx_n_s_I0, __pyx_n_s_u0, __pyx_n_s_di, __pyx_n_s_dj, __pyx_n_s_sw_ss, __pyx_n_s_sw_fs, __pyx_n_s_ls, __pyx_n_s_num_threads, __pyx_n_s_dtype, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_c, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_t, __pyx_n_s_u_buf, __pyx_n_s_u, __pyx_n_s_I); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_21update_pixel_map_gs, 0, __pyx_n_s_update_pixel_map_gs, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_2, sizeof(__pyx_defaults6), 0)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_2)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_1);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_2, __pyx_pf_6pyrost_3bin_6pyrost_68__defaults__);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_float64_t, __pyx_t_2) < 0) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_23update_pixel_map_gs, 0, __pyx_n_s_update_pixel_map_gs, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_2, sizeof(__pyx_defaults7), 0)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults7, __pyx_t_2)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_1);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_2, __pyx_pf_6pyrost_3bin_6pyrost_70__defaults__);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_float32_t, __pyx_t_2) < 0) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_mdef_6pyrost_3bin_6pyrost_3update_pixel_map_gs, 0, __pyx_n_s_update_pixel_map_gs, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_1);
  ((__pyx_FusedFunctionObject *) __pyx_t_2)->__signatures__ = __pyx_t_3;
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_pixel_map_gs, __pyx_t_2) < 0) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(10, 0, 20, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyrost_bin_pyrost_pyx, __pyx_n_s_update_pixel_map_gs, 357, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 357, __pyx_L1_error)
 358:                         float_t[:, :, ::1] u0, float_t[::1] di, float_t[::1] dj,
+359:                         int sw_ss, int sw_fs, float_t ls, unsigned num_threads=1):
  __pyx_t_3 = __Pyx_PyInt_From_long(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
 360:     r"""Update the pixel mapping by minimizing mean-squared-error
 361:     (MSE). Perform a grid search within the search window of `sw_ss`,
 362:     `sw_fs` size along the slow and fast axes accordingly in order to
 363:     minimize the MSE.
 364: 
 365:     Parameters
 366:     ----------
 367:     I_n : numpy.ndarray
 368:         Measured intensity frames.
 369:     W : numpy.ndarray
 370:         Measured frames' whitefield.
 371:     I0 : numpy.ndarray
 372:         Reference image of the sample.
 373:     u0 : numpy.ndarray
 374:         Initial pixel mapping.
 375:     di : numpy.ndarray
 376:         Sample's translations along the slow detector axis
 377:         in pixels.
 378:     dj : numpy.ndarray
 379:         Sample's translations along the fast detector axis
 380:         in pixels.
 381:     sw_ss : int
 382:         Search window size in pixels along the slow detector
 383:         axis.
 384:     sw_fs : int
 385:         Search window size in pixels along the fast detector
 386:         axis.
 387:     ls : float
 388:         Reference image length scale in pixels.
 389:     num_threads : int, optional
 390:         Number of threads.
 391: 
 392:     Returns
 393:     -------
 394:     u : numpy.ndarray
 395:         Updated pixel mapping array.
 396: 
 397:     Notes
 398:     -----
 399:     The following error metric is being minimized:
 400: 
 401:     .. math::
 402: 
 403:         MSE[i, j] = \frac{\sum_n \left( I_g[n]
 404:         - I_{ref}[ii_n, jj_n] \right)^2}{\sum_n \left(
 405:         I_g[n] - 1 \right)^2}
 406:     
 407:     Where :math:`I_g[n]` is a kriged intensity profile of the
 408:     particular detector coordinate :math:`I_n[n, i, j]`. Intensity
 409:     profile :math:`I_n[n, i, j]` is kriged with gaussian radial
 410:     basis function :math:`\phi`:
 411: 
 412:     .. math::
 413:         I_g[n] = \frac{\sum_{\Delta i, \Delta j} I_n[n, i + \Delta i,
 414:         j + \Delta j] W[i + \Delta i, j + \Delta j] 
 415:         \phi[\Delta u[0], \Delta u[1]]}
 416:         {\sum_{\Delta i, \Delta j} W[i + \Delta i, j + \Delta j]^2
 417:         \phi[\Delta u[0], \Delta u[1]]}
 418:     
 419:     .. math::
 420:         \Delta u[0] = u[0, i + \Delta i, j + \Delta j] - u[0, i, j]
 421:     
 422:     .. math::
 423:         \Delta u[1] = u[1, i + \Delta i, j + \Delta j] - u[1, i, j]
 424: 
 425:     .. math::
 426:         \phi [\Delta ii_{ref}, \Delta jj_{ref}] = 
 427:         \exp\left[{-\frac{(\Delta ii_{ref})^2 + 
 428:         (\Delta jj_{ref})^2}{ls^2}}\right]
 429:     """
 430:     cdef:
+431:         str dtype = 'float64' if float_t is np.float64_t else 'float32'
  if ((1 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  if ((0 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+432:         int a = I_n.shape[0], b = I_n.shape[1], c = I_n.shape[2]
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
/* … */
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
 433:         int j, k, t
+434:         float_t[:, ::1] u_buf = np.empty((num_threads, 2), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 434, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_u_buf = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 434, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_u_buf = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+435:         float_t[:, :, ::1] u = np.empty((2, b, c), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_b); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_c); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 435, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_u = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_b); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_c); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 435, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 435, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_u = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+436:         float_t[:, ::1] I = np.empty((num_threads, a + 1), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 436, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_I = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 436, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_I = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+437:     for k in prange(c, schedule='guided', num_threads=num_threads, nogil=True):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_7 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided)        __pyx_t_7 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_k = (int)(0 + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_t = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
/* … */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_7 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided)        __pyx_t_7 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_k = (int)(0 + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_t = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+438:         t = openmp.omp_get_thread_num()
                            __pyx_v_t = omp_get_thread_num();
/* … */
                            __pyx_v_t = omp_get_thread_num();
+439:         for j in range(b):
                            __pyx_t_10 = __pyx_v_b;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_j = __pyx_t_12;
/* … */
                            __pyx_t_10 = __pyx_v_b;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_j = __pyx_t_12;
+440:             krig_data_c(I[t], I_n, W, u0, j, k, ls)
                              __pyx_t_13.data = __pyx_v_I.data;
                              __pyx_t_13.memview = __pyx_v_I.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_13, __pyx_v_I_n, __pyx_v_W, __pyx_v_u0, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                              __pyx_t_13.memview = NULL;
                              __pyx_t_13.data = NULL;
/* … */
                              __pyx_t_13.data = __pyx_v_I.data;
                              __pyx_t_13.memview = __pyx_v_I.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_13, __pyx_v_I_n, __pyx_v_W, __pyx_v_u0, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                              __pyx_t_13.memview = NULL;
                              __pyx_t_13.data = NULL;
+441:             u_buf[t, 0] = u0[0, j, k]; u_buf[t, 1] = u0[1, j, k]
                              __pyx_t_14 = 0;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_16 = __pyx_v_k;
                              __pyx_t_17 = __pyx_v_t;
                              __pyx_t_18 = 0;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_17 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_18)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u0.data + __pyx_t_14 * __pyx_v_u0.strides[0]) ) + __pyx_t_15 * __pyx_v_u0.strides[1]) )) + __pyx_t_16)) )));
                              __pyx_t_16 = 1;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_14 = __pyx_v_k;
                              __pyx_t_18 = __pyx_v_t;
                              __pyx_t_17 = 1;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_18 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_17)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u0.data + __pyx_t_16 * __pyx_v_u0.strides[0]) ) + __pyx_t_15 * __pyx_v_u0.strides[1]) )) + __pyx_t_14)) )));
/* … */
                              __pyx_t_14 = 0;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_16 = __pyx_v_k;
                              __pyx_t_17 = __pyx_v_t;
                              __pyx_t_18 = 0;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_17 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_18)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u0.data + __pyx_t_14 * __pyx_v_u0.strides[0]) ) + __pyx_t_15 * __pyx_v_u0.strides[1]) )) + __pyx_t_16)) )));
                              __pyx_t_16 = 1;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_14 = __pyx_v_k;
                              __pyx_t_18 = __pyx_v_t;
                              __pyx_t_17 = 1;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_18 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_17)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u0.data + __pyx_t_16 * __pyx_v_u0.strides[0]) ) + __pyx_t_15 * __pyx_v_u0.strides[1]) )) + __pyx_t_14)) )));
+442:             update_pm_c(I[t], I0, u_buf[t], di, dj, sw_ss, sw_fs)
                              __pyx_t_13.data = __pyx_v_I.data;
                              __pyx_t_13.memview = __pyx_v_I.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_19.data = __pyx_v_u_buf.data;
                              __pyx_t_19.memview = __pyx_v_u_buf.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_19, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_u_buf.strides[0];
        __pyx_t_19.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_19.shape[0] = __pyx_v_u_buf.shape[1];
__pyx_t_19.strides[0] = __pyx_v_u_buf.strides[1];
    __pyx_t_19.suboffsets[0] = -1;

__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_update_pm_c(__pyx_t_13, __pyx_v_I0, __pyx_t_19, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_ss, __pyx_v_sw_fs);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                              __pyx_t_13.memview = NULL;
                              __pyx_t_13.data = NULL;
                              __PYX_XDEC_MEMVIEW(&__pyx_t_19, 0);
                              __pyx_t_19.memview = NULL;
                              __pyx_t_19.data = NULL;
/* … */
                              __pyx_t_13.data = __pyx_v_I.data;
                              __pyx_t_13.memview = __pyx_v_I.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_19.data = __pyx_v_u_buf.data;
                              __pyx_t_19.memview = __pyx_v_u_buf.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_19, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_u_buf.strides[0];
        __pyx_t_19.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_19.shape[0] = __pyx_v_u_buf.shape[1];
__pyx_t_19.strides[0] = __pyx_v_u_buf.strides[1];
    __pyx_t_19.suboffsets[0] = -1;

__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_update_pm_c(__pyx_t_13, __pyx_v_I0, __pyx_t_19, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_ss, __pyx_v_sw_fs);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                              __pyx_t_13.memview = NULL;
                              __pyx_t_13.data = NULL;
                              __PYX_XDEC_MEMVIEW(&__pyx_t_19, 0);
                              __pyx_t_19.memview = NULL;
                              __pyx_t_19.data = NULL;
+443:             u[0, j, k] = u_buf[t, 0]; u[1, j, k] = u_buf[t, 1]
                              __pyx_t_14 = __pyx_v_t;
                              __pyx_t_15 = 0;
                              __pyx_t_16 = 0;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = __pyx_v_k;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_16 * __pyx_v_u.strides[0]) ) + __pyx_t_17 * __pyx_v_u.strides[1]) )) + __pyx_t_18)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_14 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_15)) )));
                              __pyx_t_15 = __pyx_v_t;
                              __pyx_t_14 = 1;
                              __pyx_t_18 = 1;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_16 = __pyx_v_k;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_18 * __pyx_v_u.strides[0]) ) + __pyx_t_17 * __pyx_v_u.strides[1]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_15 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_14)) )));
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
/* … */
                              __pyx_t_14 = __pyx_v_t;
                              __pyx_t_15 = 0;
                              __pyx_t_16 = 0;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = __pyx_v_k;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_16 * __pyx_v_u.strides[0]) ) + __pyx_t_17 * __pyx_v_u.strides[1]) )) + __pyx_t_18)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_14 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_15)) )));
                              __pyx_t_15 = __pyx_v_t;
                              __pyx_t_14 = 1;
                              __pyx_t_18 = 1;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_16 = __pyx_v_k;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_18 * __pyx_v_u.strides[0]) ) + __pyx_t_17 * __pyx_v_u.strides[1]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_15 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_14)) )));
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+444:     return np.asarray(u)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_u, 3, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
/* … */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_u, 3, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float32_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float32_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 445: 
+446: cdef void init_newton_c(float_t[::1] sptr, float_t[::1] I, float_t[:, ::1] I0,
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_init_newton_c(__Pyx_memviewslice __pyx_v_sptr, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_fs) {
  int __pyx_v_fs;
  int __pyx_v_fs_max;
  __pyx_t_5numpy_float64_t __pyx_v_mse_min;
  __pyx_t_5numpy_float64_t __pyx_v_mse_max;
  __pyx_t_5numpy_float64_t __pyx_v_mse;
  __pyx_t_5numpy_float64_t __pyx_v_l1;
  __pyx_t_5numpy_float64_t __pyx_v_d0;
  __pyx_t_5numpy_float64_t __pyx_v_l;
  __pyx_t_5numpy_float64_t __pyx_v_dist;
  __pyx_t_5numpy_float64_t __pyx_v_mptr[3];
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_init_newton_c(__Pyx_memviewslice __pyx_v_sptr, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_fs) {
  int __pyx_v_fs;
  int __pyx_v_fs_max;
  __pyx_t_5numpy_float32_t __pyx_v_mse_min;
  __pyx_t_5numpy_float32_t __pyx_v_mse_max;
  __pyx_t_5numpy_float32_t __pyx_v_mse;
  __pyx_t_5numpy_float32_t __pyx_v_l1;
  __pyx_t_5numpy_float32_t __pyx_v_d0;
  __pyx_t_5numpy_float32_t __pyx_v_l;
  __pyx_t_5numpy_float32_t __pyx_v_dist;
  __pyx_t_5numpy_float32_t __pyx_v_mptr[3];
/* … */
  /* function exit code */
}
 447:                         float_t[::1] u, float_t[::1] di, float_t[::1] dj, int sw_fs) nogil:
 448:     cdef:
+449:         int fs, fs_max = -sw_fs
  __pyx_v_fs_max = (-__pyx_v_sw_fs);
/* … */
  __pyx_v_fs_max = (-__pyx_v_sw_fs);
+450:         float_t mse_min = FLOAT_MAX, mse_max = -FLOAT_MAX, mse, l1, d0, l, dist
  __pyx_v_mse_min = 1.7976931348623157e+308;
  __pyx_v_mse_max = -1.7976931348623157e+308;
/* … */
  __pyx_v_mse_min = 1.7976931348623157e+308;
  __pyx_v_mse_max = -1.7976931348623157e+308;
 451:         float_t mptr[3]
+452:     mptr[1] = NO_VAR; sptr[0] = 0; sptr[2] = 0
  (__pyx_v_mptr[1]) = -1.0;
  __pyx_t_1 = 0;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_1)) )) = 0.0;
  __pyx_t_1 = 2;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_1)) )) = 0.0;
/* … */
  (__pyx_v_mptr[1]) = -1.0;
  __pyx_t_1 = 0;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_1)) )) = 0.0;
  __pyx_t_1 = 2;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_1)) )) = 0.0;
+453:     for fs in range(-sw_fs, sw_fs + 1):
  __pyx_t_2 = (__pyx_v_sw_fs + 1);
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = (-__pyx_v_sw_fs); __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_fs = __pyx_t_4;
/* … */
  __pyx_t_2 = (__pyx_v_sw_fs + 1);
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = (-__pyx_v_sw_fs); __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_fs = __pyx_t_4;
+454:         mse_bi(mptr, I, I0, di, dj, u[0], u[1] + fs)
    __pyx_t_1 = 0;
    __pyx_t_5 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_1)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_5)) ))) + __pyx_v_fs));
/* … */
    __pyx_t_1 = 0;
    __pyx_t_5 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_1)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_5)) ))) + __pyx_v_fs));
+455:         mse = mptr[0] / mptr[1]
    __pyx_v_mse = ((__pyx_v_mptr[0]) / (__pyx_v_mptr[1]));
/* … */
    __pyx_v_mse = ((__pyx_v_mptr[0]) / (__pyx_v_mptr[1]));
+456:         if mse < mse_min:
    __pyx_t_6 = ((__pyx_v_mse < __pyx_v_mse_min) != 0);
    if (__pyx_t_6) {
/* … */
    }
/* … */
    __pyx_t_6 = ((__pyx_v_mse < __pyx_v_mse_min) != 0);
    if (__pyx_t_6) {
/* … */
    }
+457:             mse_min = mse; sptr[1] = fs
      __pyx_v_mse_min = __pyx_v_mse;
      __pyx_t_5 = 1;
      *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_5)) )) = __pyx_v_fs;
/* … */
      __pyx_v_mse_min = __pyx_v_mse;
      __pyx_t_5 = 1;
      *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_5)) )) = __pyx_v_fs;
+458:         if mse > mse_max:
    __pyx_t_6 = ((__pyx_v_mse > __pyx_v_mse_max) != 0);
    if (__pyx_t_6) {
/* … */
    }
  }
/* … */
    __pyx_t_6 = ((__pyx_v_mse > __pyx_v_mse_max) != 0);
    if (__pyx_t_6) {
/* … */
    }
  }
+459:             mse_max = mse; fs_max = fs
      __pyx_v_mse_max = __pyx_v_mse;
      __pyx_v_fs_max = __pyx_v_fs;
/* … */
      __pyx_v_mse_max = __pyx_v_mse;
      __pyx_v_fs_max = __pyx_v_fs;
+460:     d0 = (fs_max - sptr[1])**2
  __pyx_t_5 = 1;
  __pyx_v_d0 = pow((__pyx_v_fs_max - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_5)) )))), 2.0);
/* … */
  __pyx_t_5 = 1;
  __pyx_v_d0 = powf((__pyx_v_fs_max - (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_5)) )))), 2.0);
+461:     l1 = 2 * (mse_max - mse_min) / d0
  __pyx_v_l1 = ((2.0 * (__pyx_v_mse_max - __pyx_v_mse_min)) / __pyx_v_d0);
/* … */
  __pyx_v_l1 = ((2.0 * (__pyx_v_mse_max - __pyx_v_mse_min)) / __pyx_v_d0);
+462:     for fs in range(-sw_fs, sw_fs + 1):
  __pyx_t_2 = (__pyx_v_sw_fs + 1);
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = (-__pyx_v_sw_fs); __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_fs = __pyx_t_4;
/* … */
  __pyx_t_2 = (__pyx_v_sw_fs + 1);
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = (-__pyx_v_sw_fs); __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_fs = __pyx_t_4;
+463:         dist = (fs - sptr[1])**2
    __pyx_t_5 = 1;
    __pyx_v_dist = pow((__pyx_v_fs - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_5)) )))), 2.0);
/* … */
    __pyx_t_5 = 1;
    __pyx_v_dist = powf((__pyx_v_fs - (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_5)) )))), 2.0);
+464:         if dist > d0 / 4 and dist < d0:
    __pyx_t_7 = ((__pyx_v_dist > (__pyx_v_d0 / 4.0)) != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_6 = __pyx_t_7;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_7 = ((__pyx_v_dist < __pyx_v_d0) != 0);
    __pyx_t_6 = __pyx_t_7;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_6) {
/* … */
    }
  }
/* … */
    __pyx_t_7 = ((__pyx_v_dist > (__pyx_v_d0 / 4.0)) != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_6 = __pyx_t_7;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_7 = ((__pyx_v_dist < __pyx_v_d0) != 0);
    __pyx_t_6 = __pyx_t_7;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_6) {
/* … */
    }
  }
+465:             mse_bi(mptr, I, I0, di, dj, u[0], u[1] + fs)
      __pyx_t_5 = 0;
      __pyx_t_1 = 1;
      __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_5)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_1)) ))) + __pyx_v_fs));
/* … */
      __pyx_t_5 = 0;
      __pyx_t_1 = 1;
      __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_5)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_1)) ))) + __pyx_v_fs));
+466:             l = 2 * (mptr[0] / mptr[1] - mse_min) / dist
      __pyx_v_l = ((2.0 * (((__pyx_v_mptr[0]) / (__pyx_v_mptr[1])) - __pyx_v_mse_min)) / __pyx_v_dist);
/* … */
      __pyx_v_l = ((2.0 * (((__pyx_v_mptr[0]) / (__pyx_v_mptr[1])) - __pyx_v_mse_min)) / __pyx_v_dist);
+467:             if l > l1:
      __pyx_t_6 = ((__pyx_v_l > __pyx_v_l1) != 0);
      if (__pyx_t_6) {
/* … */
      }
/* … */
      __pyx_t_6 = ((__pyx_v_l > __pyx_v_l1) != 0);
      if (__pyx_t_6) {
/* … */
      }
+468:                 l1 = l
        __pyx_v_l1 = __pyx_v_l;
/* … */
        __pyx_v_l1 = __pyx_v_l;
+469:     sptr[2] = l1
  __pyx_t_1 = 2;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_1)) )) = __pyx_v_l1;
/* … */
  __pyx_t_1 = 2;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_1)) )) = __pyx_v_l1;
 470: 
+471: cdef void newton_1d_c(float_t[::1] sptr, float_t[::1] I, float_t[:, ::1] I0, float_t[::1] u,
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_newton_1d_c(__Pyx_memviewslice __pyx_v_sptr, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_max_iter, __pyx_t_5numpy_float64_t __pyx_v_x_tol, int __pyx_v_sw_fs) {
  __pyx_t_5numpy_float64_t __pyx_v_fs;
  __pyx_t_5numpy_float64_t __pyx_v_mu;
  __pyx_t_5numpy_float64_t __pyx_v_dfs;
  __pyx_t_5numpy_float64_t __pyx_v_mptr0[3];
  __pyx_t_5numpy_float64_t __pyx_v_mptr1[3];
  __pyx_t_5numpy_float64_t __pyx_v_mptr2[3];
  CYTHON_UNUSED int __pyx_v_k;
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_newton_1d_c(__Pyx_memviewslice __pyx_v_sptr, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_max_iter, __pyx_t_5numpy_float32_t __pyx_v_x_tol, int __pyx_v_sw_fs) {
  __pyx_t_5numpy_float32_t __pyx_v_fs;
  __pyx_t_5numpy_float32_t __pyx_v_mu;
  __pyx_t_5numpy_float32_t __pyx_v_dfs;
  __pyx_t_5numpy_float32_t __pyx_v_mptr0[3];
  __pyx_t_5numpy_float32_t __pyx_v_mptr1[3];
  __pyx_t_5numpy_float32_t __pyx_v_mptr2[3];
  CYTHON_UNUSED int __pyx_v_k;
/* … */
  /* function exit code */
}
 472:                       float_t[::1] di, float_t[::1] dj, int max_iter, float_t x_tol, int sw_fs) nogil:
 473:     cdef:
 474:         float_t fs, mu, dfs
 475:         float_t mptr0[3]
 476:         float_t mptr1[3]
 477:         float_t mptr2[3]
+478:     if sptr[2] == 0:
  __pyx_t_1 = 2;
  __pyx_t_2 = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_1)) ))) == 0.0) != 0);
  if (__pyx_t_2) {
/* … */
  }
/* … */
  __pyx_t_1 = 2;
  __pyx_t_2 = (((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_1)) ))) == 0.0) != 0);
  if (__pyx_t_2) {
/* … */
  }
+479:         init_newton_c(sptr, I, I0, u, di, dj, sw_fs)
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_init_newton_c(__pyx_v_sptr, __pyx_v_I, __pyx_v_I0, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_fs);
/* … */
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_init_newton_c(__pyx_v_sptr, __pyx_v_I, __pyx_v_I0, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_fs);
+480:     fs = sptr[1]; mptr1[1] = NO_VAR; mptr2[1] = NO_VAR
  __pyx_t_1 = 1;
  __pyx_v_fs = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_1)) )));
  (__pyx_v_mptr1[1]) = -1.0;
  (__pyx_v_mptr2[1]) = -1.0;
/* … */
  __pyx_t_1 = 1;
  __pyx_v_fs = (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_1)) )));
  (__pyx_v_mptr1[1]) = -1.0;
  (__pyx_v_mptr2[1]) = -1.0;
+481:     for k in range(max_iter):
  __pyx_t_3 = __pyx_v_max_iter;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_k = __pyx_t_5;
/* … */
  __pyx_t_3 = __pyx_v_max_iter;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_k = __pyx_t_5;
+482:         mse_bi(mptr0, I, I0, di, dj, u[0], u[1] + fs)
    __pyx_t_1 = 0;
    __pyx_t_6 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr0, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_1)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_6)) ))) + __pyx_v_fs));
/* … */
    __pyx_t_1 = 0;
    __pyx_t_6 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr0, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_1)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_6)) ))) + __pyx_v_fs));
+483:         mu = (3 * mptr0[2]**0.5 / sptr[2])**0.33
    __pyx_t_6 = 2;
    __pyx_v_mu = pow(((3.0 * pow((__pyx_v_mptr0[2]), ((__pyx_t_5numpy_float64_t)0.5))) / (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_6)) )))), ((__pyx_t_5numpy_float64_t)0.33));
/* … */
    __pyx_t_6 = 2;
    __pyx_v_mu = pow(((3.0 * pow(((double)(__pyx_v_mptr0[2])), 0.5)) / ((double)(*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_6)) ))))), 0.33);
+484:         mse_bi(mptr1, I, I0, di, dj, u[0], u[1] + fs - mu / 2)
    __pyx_t_6 = 0;
    __pyx_t_1 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr1, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_6)) ))), (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_1)) ))) + __pyx_v_fs) - (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_6 = 0;
    __pyx_t_1 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr1, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_6)) ))), (((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_1)) ))) + __pyx_v_fs) - (__pyx_v_mu / 2.0)));
+485:         mse_bi(mptr2, I, I0, di, dj, u[0], u[1] + fs + mu / 2)
    __pyx_t_1 = 0;
    __pyx_t_6 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr2, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_1)) ))), (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_6)) ))) + __pyx_v_fs) + (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_1 = 0;
    __pyx_t_6 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr2, __pyx_v_I, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_1)) ))), (((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_6)) ))) + __pyx_v_fs) + (__pyx_v_mu / 2.0)));
+486:         dfs = -(mptr2[0] / mptr2[1] - mptr1[0] / mptr1[1]) / mu / sptr[2]
    __pyx_t_6 = 2;
    __pyx_v_dfs = (((-(((__pyx_v_mptr2[0]) / (__pyx_v_mptr2[1])) - ((__pyx_v_mptr1[0]) / (__pyx_v_mptr1[1])))) / __pyx_v_mu) / (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_6)) ))));
/* … */
    __pyx_t_6 = 2;
    __pyx_v_dfs = (((-(((__pyx_v_mptr2[0]) / (__pyx_v_mptr2[1])) - ((__pyx_v_mptr1[0]) / (__pyx_v_mptr1[1])))) / __pyx_v_mu) / (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_6)) ))));
+487:         fs += dfs
    __pyx_v_fs = (__pyx_v_fs + __pyx_v_dfs);
/* … */
    __pyx_v_fs = (__pyx_v_fs + __pyx_v_dfs);
+488:         if dfs < x_tol and dfs > -x_tol:
    __pyx_t_7 = ((__pyx_v_dfs < __pyx_v_x_tol) != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_2 = __pyx_t_7;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_7 = ((__pyx_v_dfs > (-__pyx_v_x_tol)) != 0);
    __pyx_t_2 = __pyx_t_7;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
/* … */
    __pyx_t_7 = ((__pyx_v_dfs < __pyx_v_x_tol) != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_2 = __pyx_t_7;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_7 = ((__pyx_v_dfs > (-__pyx_v_x_tol)) != 0);
    __pyx_t_2 = __pyx_t_7;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+489:             u[1] += fs; sptr[1] = fs
      __pyx_t_6 = 1;
      *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_6)) )) += __pyx_v_fs;
      __pyx_t_6 = 1;
      *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_6)) )) = __pyx_v_fs;
/* … */
      __pyx_t_6 = 1;
      *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_6)) )) += __pyx_v_fs;
      __pyx_t_6 = 1;
      *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_6)) )) = __pyx_v_fs;
+490:             break
      goto __pyx_L5_break;
/* … */
      goto __pyx_L5_break;
+491:         if fs >= sw_fs + 1 or fs < -sw_fs:
    __pyx_t_7 = ((__pyx_v_fs >= (__pyx_v_sw_fs + 1)) != 0);
    if (!__pyx_t_7) {
    } else {
      __pyx_t_2 = __pyx_t_7;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_7 = ((__pyx_v_fs < (-__pyx_v_sw_fs)) != 0);
    __pyx_t_2 = __pyx_t_7;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
  }
  /*else*/ {
/* … */
    __pyx_t_7 = ((__pyx_v_fs >= (__pyx_v_sw_fs + 1)) != 0);
    if (!__pyx_t_7) {
    } else {
      __pyx_t_2 = __pyx_t_7;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_7 = ((__pyx_v_fs < (-__pyx_v_sw_fs)) != 0);
    __pyx_t_2 = __pyx_t_7;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
  }
  /*else*/ {
+492:             u[1] += sptr[1]
      __pyx_t_6 = 1;
      __pyx_t_1 = 1;
      *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_1)) )) += (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_6)) )));
/* … */
      __pyx_t_6 = 1;
      __pyx_t_1 = 1;
      *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_1)) )) += (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_6)) )));
+493:             break
      goto __pyx_L5_break;
/* … */
      goto __pyx_L5_break;
 494:     else:
+495:         u[1] += fs; sptr[1] = fs
    __pyx_t_6 = 1;
    *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_u.data) + __pyx_t_6)) )) += __pyx_v_fs;
    __pyx_t_6 = 1;
    *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_sptr.data) + __pyx_t_6)) )) = __pyx_v_fs;
  }
  __pyx_L5_break:;
/* … */
    __pyx_t_6 = 1;
    *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_u.data) + __pyx_t_6)) )) += __pyx_v_fs;
    __pyx_t_6 = 1;
    *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_sptr.data) + __pyx_t_6)) )) = __pyx_v_fs;
  }
  __pyx_L5_break:;
 496: 
+497: def update_pixel_map_nm(float_t[:, :, ::1] I_n, float_t[:, ::1] W, float_t[:, ::1] I0, float_t[:, :, ::1] u0,
/* Python wrapper */
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_5update_pixel_map_nm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyrost_3bin_6pyrost_4update_pixel_map_nm[] = "update_pixel_map_nm(signatures, args, kwargs, defaults)\nUpdate the pixel mapping by minimizing mean-squared-error\n    (MSE). Perform an iterative Newton's method within the search window\n    of `sw_ss`, `sw_fs` size along the slow and fast axes accordingly\n    in order to minimize the MSE. only works with 1D scans.\n\n    Parameters\n    ----------\n    I_n : numpy.ndarray\n        Measured intensity frames.\n    W : numpy.ndarray\n        Measured frames' whitefield.\n    I0 : numpy.ndarray\n        Reference image of the sample.\n    u : numpy.ndarray\n        Initial pixel mapping.\n    di : numpy.ndarray\n        Sample's translations along the slow detector axis\n        in pixels.\n    dj : numpy.ndarray\n        Sample's translations along the fast detector axis\n        in pixels.\n    sw_ss : int\n        Search window size in pixels along the slow detector\n        axis.\n    sw_fs : int\n        Search window size in pixels along the fast detector\n        axis.\n    ls : float\n        Reference image length scale in pixels.\n    max_iter : int, optional\n        Maximum number of iterations.\n    x_tol : float, optional\n        Tolerance for termination by the change of `u`.\n    num_threads : int, optional\n        Number of threads.\n\n    Returns\n    -------\n    u : numpy.ndarray\n        Updated pixel mapping array.\n\n    Notes\n    -----\n    :func:`update_pixel_map_nm` employs finite difference of MSE\n    instead of conventional numerical derivative. Finite difference\n    yields smaller variance in the case of noise present in the data\n    [MW]_:\n\n    .. math::\n        \\varepsilon (h) = \\frac{f(x + h) - f(x)}{h}\n\n    Where variance is minimized if :math:`h = h_M`:\n\n    .. math::\n        h_M = 8^{0.25} \\sqrt{\\frac{\\mathrm{Var}[f]}\n        {\\left| \\max{f^{\\prime\\prime}} \\right|}}\n\n    See Also\n    --------\n    update_pixel_map_gs : Description of error metric which\n        is being minimized.\n\n    References\n   "" ----------\n    .. [MW] Jorge J. Mor\303\251, and Stefan M. Wild, \"Estimating Derivatives\n            of Noisy Simulations\", ACM Trans. Math. Softw., Vol. 38,\n            Number 3, April 2012.\n    ";
static PyMethodDef __pyx_mdef_6pyrost_3bin_6pyrost_5update_pixel_map_nm = {"update_pixel_map_nm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyrost_3bin_6pyrost_5update_pixel_map_nm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_4update_pixel_map_nm};
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_5update_pixel_map_nm(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;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 497, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 497, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_signatures = values[0];
    __pyx_v_args = values[1];
    __pyx_v_kwargs = values[2];
    __pyx_v_defaults = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 497, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_4update_pixel_map_nm(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_4update_pixel_map_nm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
  PyObject *__pyx_v_dest_sig = NULL;
  Py_ssize_t __pyx_v_i;
  PyTypeObject *__pyx_v_ndarray = 0;
  __Pyx_memviewslice __pyx_v_memslice;
  Py_ssize_t __pyx_v_itemsize;
  CYTHON_UNUSED int __pyx_v_dtype_signed;
  char __pyx_v_kind;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_dtype = NULL;
  PyObject *__pyx_v_arg_base = NULL;
  PyObject *__pyx_v_candidates = NULL;
  PyObject *__pyx_v_sig = NULL;
  int __pyx_v_match_found;
  PyObject *__pyx_v_src_sig = NULL;
  PyObject *__pyx_v_dst_type = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_pixel_map_nm", 0);
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 497, __pyx_L1_error)
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
  }
  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_itemsize = -1L;
  if (unlikely(__pyx_v_args == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 497, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 497, __pyx_L1_error)
  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 497, __pyx_L1_error)
    }
    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    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, 497, __pyx_L1_error)
  }
  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_I_n, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 497, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 497, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_I_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  /*else*/ {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 497, __pyx_L1_error)
    }
    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 497, __pyx_L1_error)
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_int_8);
    __Pyx_GIVEREF(__pyx_int_8);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_8);
    __Pyx_INCREF(__pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_n_s_s);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 497, __pyx_L1_error)
  }
  __pyx_L6:;
  while (1) {
    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_dtype = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L12;
      }
      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_arg_base = __pyx_t_6;
        __pyx_t_6 = 0;
        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
        __pyx_t_2 = (__pyx_t_3 != 0);
        if (__pyx_t_2) {
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_v_dtype = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L13;
        }
        /*else*/ {
          __Pyx_INCREF(Py_None);
          __pyx_v_dtype = Py_None;
        }
        __pyx_L13:;
        goto __pyx_L12;
      }
      /*else*/ {
        __Pyx_INCREF(Py_None);
        __pyx_v_dtype = Py_None;
      }
      __pyx_L12:;
      __pyx_v_itemsize = -1L;
      __pyx_t_2 = (__pyx_v_dtype != Py_None);
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 497, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_itemsize = __pyx_t_5;
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 497, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_kind = __pyx_t_7;
        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
        switch (__pyx_v_kind) {
          case 'i':
          case 'u':
          break;
          case 'f':
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L16_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 497, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L16_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 497, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L19_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 497, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L19_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 497, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          break;
          case 'c':
          break;
          case 'O':
          break;
          default: break;
        }
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L22_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L22_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 497, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L26_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L26_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 497, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 497, __pyx_L1_error)
    goto __pyx_L10_break;
  }
  __pyx_L10_break:;
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_signatures == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 497, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_v_match_found = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 497, __pyx_L1_error)
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_i = __pyx_t_17;
      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 497, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 497, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (__pyx_t_2) {
          __pyx_v_match_found = 1;
          goto __pyx_L34;
        }
        /*else*/ {
          __pyx_v_match_found = 0;
          goto __pyx_L32_break;
        }
        __pyx_L34:;
      }
    }
    __pyx_L32_break:;
    __pyx_t_2 = (__pyx_v_match_found != 0);
    if (__pyx_t_2) {
      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 497, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
  __pyx_t_3 = ((!__pyx_t_2) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 497, __pyx_L1_error)
  }
  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 497, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 497, __pyx_L1_error)
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_signatures == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 497, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dest_sig);
  __Pyx_XDECREF(__pyx_v_ndarray);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_arg_base);
  __Pyx_XDECREF(__pyx_v_candidates);
  __Pyx_XDECREF(__pyx_v_sig);
  __Pyx_XDECREF(__pyx_v_src_sig);
  __Pyx_XDECREF(__pyx_v_dst_type);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_76__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_self)->__pyx_arg_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_self)->__pyx_arg_x_tol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_3, 1, Py_None);
  __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_27update_pixel_map_nm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_27update_pixel_map_nm = {"__pyx_fuse_0update_pixel_map_nm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_27update_pixel_map_nm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_4update_pixel_map_nm};
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_27update_pixel_map_nm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_sw_fs;
  __pyx_t_5numpy_float64_t __pyx_v_ls;
  int __pyx_v_max_iter;
  __pyx_t_5numpy_float64_t __pyx_v_x_tol;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_pixel_map_nm (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u0,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_sw_fs,&__pyx_n_s_ls,&__pyx_n_s_max_iter,&__pyx_n_s_x_tol,&__pyx_n_s_num_threads,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    __pyx_defaults10 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 1); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 2); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 3); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 4); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 5); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_fs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 6); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 7); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_iter);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x_tol);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_pixel_map_nm") < 0)) __PYX_ERR(0, 497, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 497, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 497, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 497, __pyx_L3_error)
    __pyx_v_u0 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u0.memview)) __PYX_ERR(0, 497, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 498, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 498, __pyx_L3_error)
    __pyx_v_sw_fs = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_sw_fs == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 498, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_ls == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(0, 498, __pyx_L3_error)
    if (values[8]) {
      __pyx_v_max_iter = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_max_iter == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 499, __pyx_L3_error)
    } else {
      __pyx_v_max_iter = __pyx_dynamic_args->__pyx_arg_max_iter;
    }
    if (values[9]) {
      __pyx_v_x_tol = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_x_tol == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(0, 499, __pyx_L3_error)
    } else {
      __pyx_v_x_tol = __pyx_dynamic_args->__pyx_arg_x_tol;
    }
    if (values[10]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[10]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 499, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 497, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_pixel_map_nm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_26update_pixel_map_nm(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u0, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_fs, __pyx_v_ls, __pyx_v_max_iter, __pyx_v_x_tol, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_26update_pixel_map_nm(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u0, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_fs, __pyx_t_5numpy_float64_t __pyx_v_ls, int __pyx_v_max_iter, __pyx_t_5numpy_float64_t __pyx_v_x_tol, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  npy_intp __pyx_v_c;
  CYTHON_UNUSED npy_intp __pyx_v_aa;
  CYTHON_UNUSED npy_intp __pyx_v_bb;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u_buf = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_sptr = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_0update_pixel_map_nm", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_pixel_map_nm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u_buf, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sptr, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_78__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_self)->__pyx_arg_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_self)->__pyx_arg_x_tol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_3, 1, Py_None);
  __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_29update_pixel_map_nm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_29update_pixel_map_nm = {"__pyx_fuse_1update_pixel_map_nm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_29update_pixel_map_nm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_4update_pixel_map_nm};
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_29update_pixel_map_nm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_sw_fs;
  __pyx_t_5numpy_float32_t __pyx_v_ls;
  int __pyx_v_max_iter;
  __pyx_t_5numpy_float32_t __pyx_v_x_tol;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_pixel_map_nm (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u0,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_sw_fs,&__pyx_n_s_ls,&__pyx_n_s_max_iter,&__pyx_n_s_x_tol,&__pyx_n_s_num_threads,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    __pyx_defaults11 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 1); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 2); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 3); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 4); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 5); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_fs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 6); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, 7); __PYX_ERR(0, 497, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_iter);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x_tol);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_pixel_map_nm") < 0)) __PYX_ERR(0, 497, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 497, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 497, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 497, __pyx_L3_error)
    __pyx_v_u0 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u0.memview)) __PYX_ERR(0, 497, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 498, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 498, __pyx_L3_error)
    __pyx_v_sw_fs = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_sw_fs == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 498, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_ls == ((npy_float32)-1)) && PyErr_Occurred())) __PYX_ERR(0, 498, __pyx_L3_error)
    if (values[8]) {
      __pyx_v_max_iter = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_max_iter == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 499, __pyx_L3_error)
    } else {
      __pyx_v_max_iter = __pyx_dynamic_args->__pyx_arg_max_iter;
    }
    if (values[9]) {
      __pyx_v_x_tol = __pyx_PyFloat_AsFloat(values[9]); if (unlikely((__pyx_v_x_tol == ((npy_float32)-1)) && PyErr_Occurred())) __PYX_ERR(0, 499, __pyx_L3_error)
    } else {
      __pyx_v_x_tol = __pyx_dynamic_args->__pyx_arg_x_tol;
    }
    if (values[10]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[10]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 499, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_pixel_map_nm", 0, 8, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 497, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_pixel_map_nm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_28update_pixel_map_nm(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u0, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_fs, __pyx_v_ls, __pyx_v_max_iter, __pyx_v_x_tol, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_28update_pixel_map_nm(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u0, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_fs, __pyx_t_5numpy_float32_t __pyx_v_ls, int __pyx_v_max_iter, __pyx_t_5numpy_float32_t __pyx_v_x_tol, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  npy_intp __pyx_v_c;
  CYTHON_UNUSED npy_intp __pyx_v_aa;
  CYTHON_UNUSED npy_intp __pyx_v_bb;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u_buf = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_sptr = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_1update_pixel_map_nm", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_pixel_map_nm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u_buf, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sptr, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
/* … */
  __pyx_tuple__29 = PyTuple_Pack(24, __pyx_n_s_I_n, __pyx_n_s_W, __pyx_n_s_I0, __pyx_n_s_u0, __pyx_n_s_di, __pyx_n_s_dj, __pyx_n_s_sw_fs, __pyx_n_s_ls, __pyx_n_s_max_iter, __pyx_n_s_x_tol, __pyx_n_s_num_threads, __pyx_n_s_dtype, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_c, __pyx_n_s_aa, __pyx_n_s_bb, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_t, __pyx_n_s_u, __pyx_n_s_u_buf, __pyx_n_s_I, __pyx_n_s_sptr); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_27update_pixel_map_nm, 0, __pyx_n_s_update_pixel_map_nm, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_2, sizeof(__pyx_defaults10), 0)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_t_2)->__pyx_arg_max_iter = 0x1F4;
  __Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_t_2)->__pyx_arg_x_tol = 1e-12;
  __Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_t_2)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_4);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_2, __pyx_pf_6pyrost_3bin_6pyrost_76__defaults__);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_float64_t, __pyx_t_2) < 0) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_29update_pixel_map_nm, 0, __pyx_n_s_update_pixel_map_nm, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_2, sizeof(__pyx_defaults11), 0)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_t_2)->__pyx_arg_max_iter = 0x1F4;
  __Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_t_2)->__pyx_arg_x_tol = 1e-12;
  __Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_t_2)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_4);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_2, __pyx_pf_6pyrost_3bin_6pyrost_78__defaults__);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_float32_t, __pyx_t_2) < 0) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_mdef_6pyrost_3bin_6pyrost_5update_pixel_map_nm, 0, __pyx_n_s_update_pixel_map_nm, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_4);
  ((__pyx_FusedFunctionObject *) __pyx_t_2)->__signatures__ = __pyx_t_3;
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_pixel_map_nm, __pyx_t_2) < 0) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(11, 0, 24, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyrost_bin_pyrost_pyx, __pyx_n_s_update_pixel_map_nm, 497, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 497, __pyx_L1_error)
 498:                         float_t[::1] di, float_t[::1] dj, int sw_fs, float_t ls,
+499:                         int max_iter=500, float_t x_tol=1e-12, unsigned num_threads=1):
  __pyx_t_1 = __Pyx_PyInt_From_long(0x1F4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(1e-12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_long(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
 500:     r"""Update the pixel mapping by minimizing mean-squared-error
 501:     (MSE). Perform an iterative Newton's method within the search window
 502:     of `sw_ss`, `sw_fs` size along the slow and fast axes accordingly
 503:     in order to minimize the MSE. only works with 1D scans.
 504: 
 505:     Parameters
 506:     ----------
 507:     I_n : numpy.ndarray
 508:         Measured intensity frames.
 509:     W : numpy.ndarray
 510:         Measured frames' whitefield.
 511:     I0 : numpy.ndarray
 512:         Reference image of the sample.
 513:     u : numpy.ndarray
 514:         Initial pixel mapping.
 515:     di : numpy.ndarray
 516:         Sample's translations along the slow detector axis
 517:         in pixels.
 518:     dj : numpy.ndarray
 519:         Sample's translations along the fast detector axis
 520:         in pixels.
 521:     sw_ss : int
 522:         Search window size in pixels along the slow detector
 523:         axis.
 524:     sw_fs : int
 525:         Search window size in pixels along the fast detector
 526:         axis.
 527:     ls : float
 528:         Reference image length scale in pixels.
 529:     max_iter : int, optional
 530:         Maximum number of iterations.
 531:     x_tol : float, optional
 532:         Tolerance for termination by the change of `u`.
 533:     num_threads : int, optional
 534:         Number of threads.
 535: 
 536:     Returns
 537:     -------
 538:     u : numpy.ndarray
 539:         Updated pixel mapping array.
 540: 
 541:     Notes
 542:     -----
 543:     :func:`update_pixel_map_nm` employs finite difference of MSE
 544:     instead of conventional numerical derivative. Finite difference
 545:     yields smaller variance in the case of noise present in the data
 546:     [MW]_:
 547: 
 548:     .. math::
 549:         \varepsilon (h) = \frac{f(x + h) - f(x)}{h}
 550: 
 551:     Where variance is minimized if :math:`h = h_M`:
 552: 
 553:     .. math::
 554:         h_M = 8^{0.25} \sqrt{\frac{\mathrm{Var}[f]}
 555:         {\left| \max{f^{\prime\prime}} \right|}}
 556: 
 557:     See Also
 558:     --------
 559:     update_pixel_map_gs : Description of error metric which
 560:         is being minimized.
 561: 
 562:     References
 563:     ----------
 564:     .. [MW] Jorge J. Moré, and Stefan M. Wild, "Estimating Derivatives
 565:             of Noisy Simulations", ACM Trans. Math. Softw., Vol. 38,
 566:             Number 3, April 2012.
 567:     """
 568:     cdef:
+569:         str dtype = 'float64' if float_t is np.float64_t else 'float32'
  if ((1 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  if ((0 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+570:         np.npy_intp a = I_n.shape[0], b = I_n.shape[1], c = I_n.shape[2]
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
/* … */
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
+571:         np.npy_intp aa = I0.shape[0], bb = I0.shape[1]
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
/* … */
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
 572:         int j, k, t
+573:         float_t[:, :, ::1] u = np.empty((b, c, 2), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_c); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_int_2);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 573, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_u = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_c); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_int_2);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 573, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 573, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_u = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+574:         float_t[:, ::1] u_buf = np.empty((num_threads, 2), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 574, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_u_buf = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 574, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_u_buf = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+575:         float_t[:, ::1] I = np.empty((num_threads, a + 1), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 575, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_I = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 575, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_I = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+576:         float_t[:, ::1] sptr = np.zeros((num_threads, 3), dtype=dtype) # ss, fs, l1
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_3);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 576, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_sptr = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_3);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 576, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_sptr = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+577:     for k in prange(c, schedule='static', num_threads=num_threads, nogil=True):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_7 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(static)        __pyx_t_7 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(static) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_k = (int)(0 + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_t = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
/* … */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_7 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(static)        __pyx_t_7 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_9 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(static) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                        {
                            __pyx_v_k = (int)(0 + 1 * __pyx_t_8);
                            /* Initialize private variables to invalid values */
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_t = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+578:         t = openmp.omp_get_thread_num()
                            __pyx_v_t = omp_get_thread_num();
/* … */
                            __pyx_v_t = omp_get_thread_num();
+579:         for j in range(b):
                            __pyx_t_10 = __pyx_v_b;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_j = __pyx_t_12;
/* … */
                            __pyx_t_10 = __pyx_v_b;
                            __pyx_t_11 = __pyx_t_10;
                            for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                              __pyx_v_j = __pyx_t_12;
+580:             krig_data_c(I[t], I_n, W, u0, j, k, ls)
                              __pyx_t_13.data = __pyx_v_I.data;
                              __pyx_t_13.memview = __pyx_v_I.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_13, __pyx_v_I_n, __pyx_v_W, __pyx_v_u0, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                              __pyx_t_13.memview = NULL;
                              __pyx_t_13.data = NULL;
/* … */
                              __pyx_t_13.data = __pyx_v_I.data;
                              __pyx_t_13.memview = __pyx_v_I.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_13, __pyx_v_I_n, __pyx_v_W, __pyx_v_u0, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                              __pyx_t_13.memview = NULL;
                              __pyx_t_13.data = NULL;
+581:             u_buf[t, 0] = u0[0, j, k]; u_buf[t, 1] = u0[1, j, k]
                              __pyx_t_14 = 0;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_16 = __pyx_v_k;
                              __pyx_t_17 = __pyx_v_t;
                              __pyx_t_18 = 0;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_17 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_18)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u0.data + __pyx_t_14 * __pyx_v_u0.strides[0]) ) + __pyx_t_15 * __pyx_v_u0.strides[1]) )) + __pyx_t_16)) )));
                              __pyx_t_16 = 1;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_14 = __pyx_v_k;
                              __pyx_t_18 = __pyx_v_t;
                              __pyx_t_17 = 1;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_18 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_17)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u0.data + __pyx_t_16 * __pyx_v_u0.strides[0]) ) + __pyx_t_15 * __pyx_v_u0.strides[1]) )) + __pyx_t_14)) )));
/* … */
                              __pyx_t_14 = 0;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_16 = __pyx_v_k;
                              __pyx_t_17 = __pyx_v_t;
                              __pyx_t_18 = 0;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_17 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_18)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u0.data + __pyx_t_14 * __pyx_v_u0.strides[0]) ) + __pyx_t_15 * __pyx_v_u0.strides[1]) )) + __pyx_t_16)) )));
                              __pyx_t_16 = 1;
                              __pyx_t_15 = __pyx_v_j;
                              __pyx_t_14 = __pyx_v_k;
                              __pyx_t_18 = __pyx_v_t;
                              __pyx_t_17 = 1;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_18 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_17)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u0.data + __pyx_t_16 * __pyx_v_u0.strides[0]) ) + __pyx_t_15 * __pyx_v_u0.strides[1]) )) + __pyx_t_14)) )));
+582:             newton_1d_c(sptr[t], I[t], I0, u_buf[t], di, dj, max_iter, x_tol, sw_fs)
                              __pyx_t_13.data = __pyx_v_sptr.data;
                              __pyx_t_13.memview = __pyx_v_sptr.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_sptr.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_sptr.shape[1];
__pyx_t_13.strides[0] = __pyx_v_sptr.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_19.data = __pyx_v_I.data;
                              __pyx_t_19.memview = __pyx_v_I.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_19, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_19.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_19.shape[0] = __pyx_v_I.shape[1];
__pyx_t_19.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_19.suboffsets[0] = -1;

__pyx_t_20.data = __pyx_v_u_buf.data;
                              __pyx_t_20.memview = __pyx_v_u_buf.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_20, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_u_buf.strides[0];
        __pyx_t_20.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_20.shape[0] = __pyx_v_u_buf.shape[1];
__pyx_t_20.strides[0] = __pyx_v_u_buf.strides[1];
    __pyx_t_20.suboffsets[0] = -1;

__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_newton_1d_c(__pyx_t_13, __pyx_t_19, __pyx_v_I0, __pyx_t_20, __pyx_v_di, __pyx_v_dj, __pyx_v_max_iter, __pyx_v_x_tol, __pyx_v_sw_fs);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                              __pyx_t_13.memview = NULL;
                              __pyx_t_13.data = NULL;
                              __PYX_XDEC_MEMVIEW(&__pyx_t_19, 0);
                              __pyx_t_19.memview = NULL;
                              __pyx_t_19.data = NULL;
                              __PYX_XDEC_MEMVIEW(&__pyx_t_20, 0);
                              __pyx_t_20.memview = NULL;
                              __pyx_t_20.data = NULL;
/* … */
                              __pyx_t_13.data = __pyx_v_sptr.data;
                              __pyx_t_13.memview = __pyx_v_sptr.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_sptr.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_sptr.shape[1];
__pyx_t_13.strides[0] = __pyx_v_sptr.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_19.data = __pyx_v_I.data;
                              __pyx_t_19.memview = __pyx_v_I.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_19, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_19.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_19.shape[0] = __pyx_v_I.shape[1];
__pyx_t_19.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_19.suboffsets[0] = -1;

__pyx_t_20.data = __pyx_v_u_buf.data;
                              __pyx_t_20.memview = __pyx_v_u_buf.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_20, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_u_buf.strides[0];
        __pyx_t_20.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_20.shape[0] = __pyx_v_u_buf.shape[1];
__pyx_t_20.strides[0] = __pyx_v_u_buf.strides[1];
    __pyx_t_20.suboffsets[0] = -1;

__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_newton_1d_c(__pyx_t_13, __pyx_t_19, __pyx_v_I0, __pyx_t_20, __pyx_v_di, __pyx_v_dj, __pyx_v_max_iter, __pyx_v_x_tol, __pyx_v_sw_fs);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                              __pyx_t_13.memview = NULL;
                              __pyx_t_13.data = NULL;
                              __PYX_XDEC_MEMVIEW(&__pyx_t_19, 0);
                              __pyx_t_19.memview = NULL;
                              __pyx_t_19.data = NULL;
                              __PYX_XDEC_MEMVIEW(&__pyx_t_20, 0);
                              __pyx_t_20.memview = NULL;
                              __pyx_t_20.data = NULL;
+583:             u[0, j, k] = u_buf[t, 0]; u[1, j, k] = u_buf[t, 1]
                              __pyx_t_14 = __pyx_v_t;
                              __pyx_t_15 = 0;
                              __pyx_t_16 = 0;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = __pyx_v_k;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_16 * __pyx_v_u.strides[0]) ) + __pyx_t_17 * __pyx_v_u.strides[1]) )) + __pyx_t_18)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_14 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_15)) )));
                              __pyx_t_15 = __pyx_v_t;
                              __pyx_t_14 = 1;
                              __pyx_t_18 = 1;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_16 = __pyx_v_k;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_18 * __pyx_v_u.strides[0]) ) + __pyx_t_17 * __pyx_v_u.strides[1]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_15 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_14)) )));
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
/* … */
                              __pyx_t_14 = __pyx_v_t;
                              __pyx_t_15 = 0;
                              __pyx_t_16 = 0;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_18 = __pyx_v_k;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_16 * __pyx_v_u.strides[0]) ) + __pyx_t_17 * __pyx_v_u.strides[1]) )) + __pyx_t_18)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_14 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_15)) )));
                              __pyx_t_15 = __pyx_v_t;
                              __pyx_t_14 = 1;
                              __pyx_t_18 = 1;
                              __pyx_t_17 = __pyx_v_j;
                              __pyx_t_16 = __pyx_v_k;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_18 * __pyx_v_u.strides[0]) ) + __pyx_t_17 * __pyx_v_u.strides[1]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_u_buf.data + __pyx_t_15 * __pyx_v_u_buf.strides[0]) )) + __pyx_t_14)) )));
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+584:     return np.asarray(u)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_u, 3, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
/* … */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_u, 3, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float32_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float32_t, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 585: 
+586: cdef void update_t_c(float_t[:, :, ::1] SS_m, float_t[:, ::1] I, float_t[:, ::1] rss, float_t[:, ::1] I0,
static void __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_update_t_c(__Pyx_memviewslice __pyx_v_SS_m, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_rss, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_dij, int __pyx_v_sw_ss, int __pyx_v_sw_fs) {
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_ss_min;
  int __pyx_v_fs_min;
  int __pyx_v_ss_max;
  int __pyx_v_fs_max;
  __pyx_t_5numpy_float64_t __pyx_v_mse_min;
  __pyx_t_5numpy_float64_t __pyx_v_mse_var;
  __pyx_t_5numpy_float64_t __pyx_v_mse_max;
  __pyx_t_5numpy_float64_t __pyx_v_l1;
  __pyx_t_5numpy_float64_t __pyx_v_mu;
  __pyx_t_5numpy_float64_t __pyx_v_m_ptr[2];
  __pyx_t_5numpy_float64_t __pyx_v_mse_m[7];
/* … */
  /* function exit code */
}

static void __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_update_t_c(__Pyx_memviewslice __pyx_v_SS_m, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_rss, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_dij, int __pyx_v_sw_ss, int __pyx_v_sw_fs) {
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_ss_min;
  int __pyx_v_fs_min;
  int __pyx_v_ss_max;
  int __pyx_v_fs_max;
  __pyx_t_5numpy_float32_t __pyx_v_mse_min;
  __pyx_t_5numpy_float32_t __pyx_v_mse_var;
  __pyx_t_5numpy_float32_t __pyx_v_mse_max;
  __pyx_t_5numpy_float32_t __pyx_v_l1;
  __pyx_t_5numpy_float32_t __pyx_v_mu;
  __pyx_t_5numpy_float32_t __pyx_v_m_ptr[2];
  __pyx_t_5numpy_float32_t __pyx_v_mse_m[7];
/* … */
  /* function exit code */
}
 587:                      float_t[:, :, ::1] u, float_t[::1] dij, int sw_ss, int sw_fs) nogil:
 588:     cdef:
 589:         int ii, jj
+590:         int ss_min = -sw_ss, fs_min = -sw_fs, ss_max = -sw_ss, fs_max = -sw_fs
  __pyx_v_ss_min = (-__pyx_v_sw_ss);
  __pyx_v_fs_min = (-__pyx_v_sw_fs);
  __pyx_v_ss_max = (-__pyx_v_sw_ss);
  __pyx_v_fs_max = (-__pyx_v_sw_fs);
/* … */
  __pyx_v_ss_min = (-__pyx_v_sw_ss);
  __pyx_v_fs_min = (-__pyx_v_sw_fs);
  __pyx_v_ss_max = (-__pyx_v_sw_ss);
  __pyx_v_fs_max = (-__pyx_v_sw_fs);
+591:         float_t mse_min = FLOAT_MAX, mse_var = FLOAT_MAX, mse_max = -FLOAT_MAX, l1, mu
  __pyx_v_mse_min = 1.7976931348623157e+308;
  __pyx_v_mse_var = 1.7976931348623157e+308;
  __pyx_v_mse_max = -1.7976931348623157e+308;
/* … */
  __pyx_v_mse_min = 1.7976931348623157e+308;
  __pyx_v_mse_var = 1.7976931348623157e+308;
  __pyx_v_mse_max = -1.7976931348623157e+308;
 592:         float_t m_ptr[2]
 593:         float_t mse_m[7]
+594:     for ii in range(-sw_ss, sw_ss + 1):
  __pyx_t_1 = (__pyx_v_sw_ss + 1);
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = (-__pyx_v_sw_ss); __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_ii = __pyx_t_3;
/* … */
  __pyx_t_1 = (__pyx_v_sw_ss + 1);
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = (-__pyx_v_sw_ss); __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_ii = __pyx_t_3;
+595:         for jj in range(-sw_fs, sw_fs + 1):
    __pyx_t_4 = (__pyx_v_sw_fs + 1);
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = (-__pyx_v_sw_fs); __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_jj = __pyx_t_6;
/* … */
    __pyx_t_4 = (__pyx_v_sw_fs + 1);
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = (-__pyx_v_sw_fs); __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_jj = __pyx_t_6;
+596:             mse_diff_bi(m_ptr, SS_m, I, rss, I0, u, dij[0], dij[1], dij[0] + ii, dij[1] + jj)
      __pyx_t_7 = 0;
      __pyx_t_8 = 1;
      __pyx_t_9 = 0;
      __pyx_t_10 = 1;
      __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_9)) ))) + __pyx_v_ii), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) ))) + __pyx_v_jj));
/* … */
      __pyx_t_7 = 0;
      __pyx_t_8 = 1;
      __pyx_t_9 = 0;
      __pyx_t_10 = 1;
      __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_9)) ))) + __pyx_v_ii), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) ))) + __pyx_v_jj));
+597:             if m_ptr[0] < mse_min:
      __pyx_t_11 = (((__pyx_v_m_ptr[0]) < __pyx_v_mse_min) != 0);
      if (__pyx_t_11) {
/* … */
      }
/* … */
      __pyx_t_11 = (((__pyx_v_m_ptr[0]) < __pyx_v_mse_min) != 0);
      if (__pyx_t_11) {
/* … */
      }
+598:                 mse_min = m_ptr[0]; mse_var = m_ptr[1]; ss_min = ii; fs_min = jj
        __pyx_v_mse_min = (__pyx_v_m_ptr[0]);
        __pyx_v_mse_var = (__pyx_v_m_ptr[1]);
        __pyx_v_ss_min = __pyx_v_ii;
        __pyx_v_fs_min = __pyx_v_jj;
/* … */
        __pyx_v_mse_min = (__pyx_v_m_ptr[0]);
        __pyx_v_mse_var = (__pyx_v_m_ptr[1]);
        __pyx_v_ss_min = __pyx_v_ii;
        __pyx_v_fs_min = __pyx_v_jj;
+599:             if m_ptr[0] > mse_max:
      __pyx_t_11 = (((__pyx_v_m_ptr[0]) > __pyx_v_mse_max) != 0);
      if (__pyx_t_11) {
/* … */
      }
    }
  }
/* … */
      __pyx_t_11 = (((__pyx_v_m_ptr[0]) > __pyx_v_mse_max) != 0);
      if (__pyx_t_11) {
/* … */
      }
    }
  }
+600:                 mse_max = m_ptr[0]; ss_max = ii; fs_max = jj
        __pyx_v_mse_max = (__pyx_v_m_ptr[0]);
        __pyx_v_ss_max = __pyx_v_ii;
        __pyx_v_fs_max = __pyx_v_jj;
/* … */
        __pyx_v_mse_max = (__pyx_v_m_ptr[0]);
        __pyx_v_ss_max = __pyx_v_ii;
        __pyx_v_fs_max = __pyx_v_jj;
+601:     dij[0] += ss_min; dij[1] += fs_min
  __pyx_t_10 = 0;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) )) += __pyx_v_ss_min;
  __pyx_t_10 = 1;
  *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) )) += __pyx_v_fs_min;
/* … */
  __pyx_t_10 = 0;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) )) += __pyx_v_ss_min;
  __pyx_t_10 = 1;
  *((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) )) += __pyx_v_fs_min;
+602:     l1 = 2 * (mse_max - mse_min) / ((ss_max - ss_min)**2 + (fs_max - fs_min)**2)
  __pyx_v_l1 = ((2.0 * (__pyx_v_mse_max - __pyx_v_mse_min)) / ((__pyx_t_5numpy_float64_t)(__Pyx_pow_long(((long)(__pyx_v_ss_max - __pyx_v_ss_min)), 2) + __Pyx_pow_long(((long)(__pyx_v_fs_max - __pyx_v_fs_min)), 2))));
/* … */
  __pyx_v_l1 = ((2.0 * (__pyx_v_mse_max - __pyx_v_mse_min)) / ((__pyx_t_5numpy_float32_t)(__Pyx_pow_long(((long)(__pyx_v_ss_max - __pyx_v_ss_min)), 2) + __Pyx_pow_long(((long)(__pyx_v_fs_max - __pyx_v_fs_min)), 2))));
+603:     mu = (3 * mse_var**0.5 / l1)**0.33
  __pyx_v_mu = pow(((3.0 * pow(__pyx_v_mse_var, ((__pyx_t_5numpy_float64_t)0.5))) / __pyx_v_l1), ((__pyx_t_5numpy_float64_t)0.33));
/* … */
  __pyx_v_mu = pow(((3.0 * pow(((double)__pyx_v_mse_var), 0.5)) / ((double)__pyx_v_l1)), 0.33);
+604:     mu = mu if mu > 2 else 2
  if (((__pyx_v_mu > 2.0) != 0)) {
    __pyx_t_12 = __pyx_v_mu;
  } else {
    __pyx_t_12 = 2.0;
  }
  __pyx_v_mu = __pyx_t_12;
/* … */
  if (((__pyx_v_mu > 2.0) != 0)) {
    __pyx_t_12 = __pyx_v_mu;
  } else {
    __pyx_t_12 = 2.0;
  }
  __pyx_v_mu = __pyx_t_12;
+605:     if sw_ss:
  __pyx_t_11 = (__pyx_v_sw_ss != 0);
  if (__pyx_t_11) {
/* … */
    goto __pyx_L9;
  }
/* … */
  __pyx_t_11 = (__pyx_v_sw_ss != 0);
  if (__pyx_t_11) {
/* … */
    goto __pyx_L9;
  }
+606:         mse_diff_bi(m_ptr, SS_m, I, rss, I0, u, dij[0], dij[1], dij[0] - mu / 2, dij[1] - mu / 2)
    __pyx_t_10 = 0;
    __pyx_t_9 = 1;
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_8)) ))) - (__pyx_v_mu / 2.0)), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_10 = 0;
    __pyx_t_9 = 1;
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_8)) ))) - (__pyx_v_mu / 2.0)), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
+607:         mse_m[0] = m_ptr[0]
    (__pyx_v_mse_m[0]) = (__pyx_v_m_ptr[0]);
/* … */
    (__pyx_v_mse_m[0]) = (__pyx_v_m_ptr[0]);
+608:         mse_diff_bi(m_ptr, SS_m, I, rss, I0, u, dij[0], dij[1], dij[0] - mu / 2, dij[1])
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_t_9 = 0;
    __pyx_t_10 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_9)) ))) - (__pyx_v_mu / 2.0)), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) ))));
/* … */
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_t_9 = 0;
    __pyx_t_10 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_9)) ))) - (__pyx_v_mu / 2.0)), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) ))));
+609:         mse_m[1] = m_ptr[0]
    (__pyx_v_mse_m[1]) = (__pyx_v_m_ptr[0]);
/* … */
    (__pyx_v_mse_m[1]) = (__pyx_v_m_ptr[0]);
+610:         mse_diff_bi(m_ptr, SS_m, I, rss, I0, u, dij[0], dij[1], dij[0], dij[1] - mu / 2)
    __pyx_t_10 = 0;
    __pyx_t_9 = 1;
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_10 = 0;
    __pyx_t_9 = 1;
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
+611:         mse_m[2] = m_ptr[0]
    (__pyx_v_mse_m[2]) = (__pyx_v_m_ptr[0]);
/* … */
    (__pyx_v_mse_m[2]) = (__pyx_v_m_ptr[0]);
+612:         mse_m[3] = mse_min
    (__pyx_v_mse_m[3]) = __pyx_v_mse_min;
/* … */
    (__pyx_v_mse_m[3]) = __pyx_v_mse_min;
+613:         mse_diff_bi(m_ptr, SS_m, I, rss, I0, u, dij[0], dij[1], dij[0], dij[1] + mu / 2)
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_t_9 = 0;
    __pyx_t_10 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) ))) + (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_t_9 = 0;
    __pyx_t_10 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) ))) + (__pyx_v_mu / 2.0)));
+614:         mse_m[4] = m_ptr[0]
    (__pyx_v_mse_m[4]) = (__pyx_v_m_ptr[0]);
/* … */
    (__pyx_v_mse_m[4]) = (__pyx_v_m_ptr[0]);
+615:         mse_diff_bi(m_ptr, SS_m, I, rss, I0, u, dij[0], dij[1], dij[0] + mu / 2, dij[1])
    __pyx_t_10 = 0;
    __pyx_t_9 = 1;
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_7)) ))));
/* … */
    __pyx_t_10 = 0;
    __pyx_t_9 = 1;
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_8)) ))) + (__pyx_v_mu / 2.0)), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_7)) ))));
+616:         mse_m[5] = m_ptr[0]
    (__pyx_v_mse_m[5]) = (__pyx_v_m_ptr[0]);
/* … */
    (__pyx_v_mse_m[5]) = (__pyx_v_m_ptr[0]);
+617:         mse_diff_bi(m_ptr, SS_m, I, rss, I0, u, dij[0], dij[1], dij[0] + mu / 2, dij[1] + mu / 2)
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_t_9 = 0;
    __pyx_t_10 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_9)) ))) + (__pyx_v_mu / 2.0)), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) ))) + (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_t_9 = 0;
    __pyx_t_10 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_9)) ))) + (__pyx_v_mu / 2.0)), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) ))) + (__pyx_v_mu / 2.0)));
+618:         mse_m[6] = m_ptr[0]
    (__pyx_v_mse_m[6]) = (__pyx_v_m_ptr[0]);
/* … */
    (__pyx_v_mse_m[6]) = (__pyx_v_m_ptr[0]);
+619:         subpixel_ref_2d(dij, mse_m, mu)
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_2d(__pyx_v_dij, __pyx_v_mse_m, __pyx_v_mu);
/* … */
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_2d(__pyx_v_dij, __pyx_v_mse_m, __pyx_v_mu);
 620:     else:
+621:         mse_diff_bi(m_ptr, SS_m, I, rss, I0, u, dij[0], dij[1], dij[0], dij[1] - mu / 2)
  /*else*/ {
    __pyx_t_10 = 0;
    __pyx_t_9 = 1;
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
/* … */
  /*else*/ {
    __pyx_t_10 = 0;
    __pyx_t_9 = 1;
    __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_7)) ))) - (__pyx_v_mu / 2.0)));
+622:         mse_m[0] = m_ptr[0]
    (__pyx_v_mse_m[0]) = (__pyx_v_m_ptr[0]);
/* … */
    (__pyx_v_mse_m[0]) = (__pyx_v_m_ptr[0]);
+623:         mse_m[1] = mse_min
    (__pyx_v_mse_m[1]) = __pyx_v_mse_min;
/* … */
    (__pyx_v_mse_m[1]) = __pyx_v_mse_min;
+624:         mse_diff_bi(m_ptr, SS_m, I, rss, I0, u, dij[0], dij[1], dij[0], dij[1] + mu / 2)
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_t_9 = 0;
    __pyx_t_10 = 1;
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dij.data) + __pyx_t_10)) ))) + (__pyx_v_mu / 2.0)));
/* … */
    __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    __pyx_t_9 = 0;
    __pyx_t_10 = 1;
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_diff_bi(__pyx_v_m_ptr, __pyx_v_SS_m, __pyx_v_I, __pyx_v_rss, __pyx_v_I0, __pyx_v_u, (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_7)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_8)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_9)) ))), ((*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dij.data) + __pyx_t_10)) ))) + (__pyx_v_mu / 2.0)));
+625:         mse_m[2] = m_ptr[0]
    (__pyx_v_mse_m[2]) = (__pyx_v_m_ptr[0]);
/* … */
    (__pyx_v_mse_m[2]) = (__pyx_v_m_ptr[0]);
+626:         subpixel_ref_1d(dij, mse_m, mu)
    __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_1d(__pyx_v_dij, __pyx_v_mse_m, __pyx_v_mu);
  }
  __pyx_L9:;
/* … */
    __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_subpixel_ref_1d(__pyx_v_dij, __pyx_v_mse_m, __pyx_v_mu);
  }
  __pyx_L9:;
 627: 
+628: def update_translations_gs(float_t[:, :, ::1] I_n, float_t[:, ::1] W, float_t[:, ::1] I0,
/* Python wrapper */
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_7update_translations_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyrost_3bin_6pyrost_6update_translations_gs[] = "update_translations_gs(signatures, args, kwargs, defaults)\nUpdate the sample pixel translations by minimizing total mean-squared-error\n    (:math:$MSE_{total}$). Perform a grid search within the search window of\n    `sw_ss` size in pixels for sample translations along the slow axis, and\n    of `sw_fs` size in pixels for sample translations along the fast axis in\n    order to minimize the total MSE.\n\n    Parameters\n    ----------\n    I_n : numpy.ndarray\n        Measured intensity frames.\n    W : numpy.ndarray\n        Measured frames' whitefield.\n    I0 : numpy.ndarray\n        Reference image of the sample.\n    u : numpy.ndarray\n        The pixel mapping between the data at\n        the detector plane and the reference image at\n        the reference plane.\n    di : numpy.ndarray\n        Initial sample's translations along the slow detector\n        axis in pixels.\n    dj : numpy.ndarray\n        Initial sample's translations along the fast detector\n        axis in pixels.\n    sw_ss : int\n        Search window size in pixels along the slow detector\n        axis.\n    sw_fs : int\n        Search window size in pixels along the fast detector\n        axis.\n    ls : float\n        Reference image length scale in pixels.\n    num_threads : int, optional\n        Number of threads.\n\n    Returns\n    -------\n    dij : numpy.ndarray\n        Updated sample pixel translations.\n\n    Notes\n    -----\n    The following error metric is being minimized:\n\n    .. math::\n\n        MSE_{total} = \\frac{1}{N M}\\sum_{i, j} \\left( \\frac{\\sum_{n}\n        \\left( I_g[n] - I_{ref}[ii_n, jj_n] \\right)^2}{\\sum_{n}\n        \\left(I_g[n] - 1 \\right)^2} \\right)\n    \n    Where :math:`I_g[n]` is a kriged intensity profile of the\n    particular detector coordinate :math:`I_n[n, i, j]`. Intensity\n    profile :math:`I_n[n, i, j]` is kriged with gaussian radial\n    basis function :math:`\\phi`:\n\n    .. math::\n        I_g[n] = \\frac{\\sum_{\\Delta i, ""\\Delta j} I_n[n, i + \\Delta i,\n        j + \\Delta j] W[i + \\Delta i, j + \\Delta j] \n        \\phi[\\Delta u[0], \\Delta u[1]]}\n        {\\sum_{\\Delta i, \\Delta j} W[i + \\Delta i, j + \\Delta j]^2\n        \\phi[\\Delta u[0], \\Delta u[1]]}\n    \n    .. math::\n        \\Delta u[0] = u[0, i + \\Delta i, j + \\Delta j] - u[0, i, j]\n    \n    .. math::\n        \\Delta u[1] = u[1, i + \\Delta i, j + \\Delta j] - u[1, i, j]\n\n    .. math::\n        \\phi [\\Delta ii_{ref}, \\Delta jj_{ref}] = \n        \\exp\\left[{-\\frac{(\\Delta ii_{ref})^2 + \n        (\\Delta jj_{ref})^2}{ls^2}}\\right]\n    ";
static PyMethodDef __pyx_mdef_6pyrost_3bin_6pyrost_7update_translations_gs = {"update_translations_gs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyrost_3bin_6pyrost_7update_translations_gs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_6update_translations_gs};
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_7update_translations_gs(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;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 628, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 628, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_signatures = values[0];
    __pyx_v_args = values[1];
    __pyx_v_kwargs = values[2];
    __pyx_v_defaults = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 628, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_6update_translations_gs(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_6update_translations_gs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
  PyObject *__pyx_v_dest_sig = NULL;
  Py_ssize_t __pyx_v_i;
  PyTypeObject *__pyx_v_ndarray = 0;
  __Pyx_memviewslice __pyx_v_memslice;
  Py_ssize_t __pyx_v_itemsize;
  CYTHON_UNUSED int __pyx_v_dtype_signed;
  char __pyx_v_kind;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_dtype = NULL;
  PyObject *__pyx_v_arg_base = NULL;
  PyObject *__pyx_v_candidates = NULL;
  PyObject *__pyx_v_sig = NULL;
  int __pyx_v_match_found;
  PyObject *__pyx_v_src_sig = NULL;
  PyObject *__pyx_v_dst_type = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_translations_gs", 0);
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 628, __pyx_L1_error)
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
  }
  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_itemsize = -1L;
  if (unlikely(__pyx_v_args == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 628, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 628, __pyx_L1_error)
  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 628, __pyx_L1_error)
    }
    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    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, 628, __pyx_L1_error)
  }
  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_I_n, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 628, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 628, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_I_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  /*else*/ {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 628, __pyx_L1_error)
    }
    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 628, __pyx_L1_error)
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_int_9);
    __Pyx_GIVEREF(__pyx_int_9);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_9);
    __Pyx_INCREF(__pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_n_s_s);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 628, __pyx_L1_error)
  }
  __pyx_L6:;
  while (1) {
    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_dtype = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L12;
      }
      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_arg_base = __pyx_t_6;
        __pyx_t_6 = 0;
        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
        __pyx_t_2 = (__pyx_t_3 != 0);
        if (__pyx_t_2) {
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_v_dtype = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L13;
        }
        /*else*/ {
          __Pyx_INCREF(Py_None);
          __pyx_v_dtype = Py_None;
        }
        __pyx_L13:;
        goto __pyx_L12;
      }
      /*else*/ {
        __Pyx_INCREF(Py_None);
        __pyx_v_dtype = Py_None;
      }
      __pyx_L12:;
      __pyx_v_itemsize = -1L;
      __pyx_t_2 = (__pyx_v_dtype != Py_None);
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 628, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_itemsize = __pyx_t_5;
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 628, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_kind = __pyx_t_7;
        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
        switch (__pyx_v_kind) {
          case 'i':
          case 'u':
          break;
          case 'f':
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L16_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 628, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L16_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 628, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L19_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 628, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L19_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 628, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          break;
          case 'c':
          break;
          case 'O':
          break;
          default: break;
        }
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L22_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L22_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 628, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L26_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L26_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 628, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 628, __pyx_L1_error)
    goto __pyx_L10_break;
  }
  __pyx_L10_break:;
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_signatures == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 628, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_v_match_found = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 628, __pyx_L1_error)
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_i = __pyx_t_17;
      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 628, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 628, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (__pyx_t_2) {
          __pyx_v_match_found = 1;
          goto __pyx_L34;
        }
        /*else*/ {
          __pyx_v_match_found = 0;
          goto __pyx_L32_break;
        }
        __pyx_L34:;
      }
    }
    __pyx_L32_break:;
    __pyx_t_2 = (__pyx_v_match_found != 0);
    if (__pyx_t_2) {
      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 628, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
  __pyx_t_3 = ((!__pyx_t_2) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 628, __pyx_L1_error)
  }
  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 628, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 628, __pyx_L1_error)
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_signatures == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 628, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dest_sig);
  __Pyx_XDECREF(__pyx_v_ndarray);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_arg_base);
  __Pyx_XDECREF(__pyx_v_candidates);
  __Pyx_XDECREF(__pyx_v_sig);
  __Pyx_XDECREF(__pyx_v_src_sig);
  __Pyx_XDECREF(__pyx_v_dst_type);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_84__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults14, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_33update_translations_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_33update_translations_gs = {"__pyx_fuse_0update_translations_gs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_33update_translations_gs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_6update_translations_gs};
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_33update_translations_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_sw_ss;
  int __pyx_v_sw_fs;
  __pyx_t_5numpy_float64_t __pyx_v_ls;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_translations_gs (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_sw_ss,&__pyx_n_s_sw_fs,&__pyx_n_s_ls,&__pyx_n_s_num_threads,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    __pyx_defaults14 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults14, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 1); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 2); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 3); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 4); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 5); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_ss)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 6); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_fs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 7); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 8); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_translations_gs") < 0)) __PYX_ERR(0, 628, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 628, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 628, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 628, __pyx_L3_error)
    __pyx_v_u = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u.memview)) __PYX_ERR(0, 629, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 629, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 629, __pyx_L3_error)
    __pyx_v_sw_ss = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_sw_ss == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L3_error)
    __pyx_v_sw_fs = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_sw_fs == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_ls == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L3_error)
    if (values[9]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[9]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 628, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_translations_gs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_32update_translations_gs(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_ss, __pyx_v_sw_fs, __pyx_v_ls, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_32update_translations_gs(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_ss, int __pyx_v_sw_fs, __pyx_t_5numpy_float64_t __pyx_v_ls, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  npy_intp __pyx_v_c;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I_buf = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_SS_m = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dij = { 0, 0, { 0 }, { 0 }, { 0 } };
  __pyx_t_5numpy_float64_t __pyx_v_m_ptr[3];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_0update_translations_gs", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_24, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_translations_gs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_buf, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_SS_m, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dij, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_86__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults15, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_35update_translations_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_35update_translations_gs = {"__pyx_fuse_1update_translations_gs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_35update_translations_gs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_6update_translations_gs};
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_35update_translations_gs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_sw_ss;
  int __pyx_v_sw_fs;
  __pyx_t_5numpy_float32_t __pyx_v_ls;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_translations_gs (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_sw_ss,&__pyx_n_s_sw_fs,&__pyx_n_s_ls,&__pyx_n_s_num_threads,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    __pyx_defaults15 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults15, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 1); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 2); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 3); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 4); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 5); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_ss)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 6); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sw_fs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 7); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, 8); __PYX_ERR(0, 628, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_translations_gs") < 0)) __PYX_ERR(0, 628, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 628, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 628, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 628, __pyx_L3_error)
    __pyx_v_u = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u.memview)) __PYX_ERR(0, 629, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 629, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 629, __pyx_L3_error)
    __pyx_v_sw_ss = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_sw_ss == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L3_error)
    __pyx_v_sw_fs = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_sw_fs == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_ls == ((npy_float32)-1)) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L3_error)
    if (values[9]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[9]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update_translations_gs", 0, 9, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 628, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_translations_gs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_34update_translations_gs(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_sw_ss, __pyx_v_sw_fs, __pyx_v_ls, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_34update_translations_gs(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, int __pyx_v_sw_ss, int __pyx_v_sw_fs, __pyx_t_5numpy_float32_t __pyx_v_ls, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  npy_intp __pyx_v_c;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I_buf = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_SS_m = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dij = { 0, 0, { 0 }, { 0 }, { 0 } };
  __pyx_t_5numpy_float32_t __pyx_v_m_ptr[3];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_1update_translations_gs", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_24, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.update_translations_gs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_buf, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_SS_m, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dij, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __pyx_t_4 = 0;
/* … */
  __pyx_tuple__31 = PyTuple_Pack(23, __pyx_n_s_I_n, __pyx_n_s_W, __pyx_n_s_I0, __pyx_n_s_u, __pyx_n_s_di, __pyx_n_s_dj, __pyx_n_s_sw_ss, __pyx_n_s_sw_fs, __pyx_n_s_ls, __pyx_n_s_num_threads, __pyx_n_s_dtype, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_c, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_t, __pyx_n_s_I, __pyx_n_s_I_buf, __pyx_n_s_SS_m, __pyx_n_s_dij, __pyx_n_s_m_ptr); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_33update_translations_gs, 0, __pyx_n_s_update_translations_gs, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_3, sizeof(__pyx_defaults14), 0)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults14, __pyx_t_3)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_t_2);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_3, __pyx_pf_6pyrost_3bin_6pyrost_84__defaults__);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_float64_t, __pyx_t_3) < 0) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_35update_translations_gs, 0, __pyx_n_s_update_translations_gs, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_3, sizeof(__pyx_defaults15), 0)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults15, __pyx_t_3)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_t_2);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_3, __pyx_pf_6pyrost_3bin_6pyrost_86__defaults__);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_float32_t, __pyx_t_3) < 0) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_FusedFunction_New(&__pyx_mdef_6pyrost_3bin_6pyrost_7update_translations_gs, 0, __pyx_n_s_update_translations_gs, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_t_2);
  ((__pyx_FusedFunctionObject *) __pyx_t_3)->__signatures__ = __pyx_t_4;
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_translations_gs, __pyx_t_3) < 0) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(10, 0, 23, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyrost_bin_pyrost_pyx, __pyx_n_s_update_translations_gs, 628, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 628, __pyx_L1_error)
 629:                            float_t[:, :, ::1] u, float_t[::1] di, float_t[::1] dj,
+630:                            int sw_ss, int sw_fs, float_t ls, unsigned num_threads=1):
  __pyx_t_4 = __Pyx_PyInt_From_long(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
 631:     r"""Update the sample pixel translations by minimizing total mean-squared-error
 632:     (:math:$MSE_{total}$). Perform a grid search within the search window of
 633:     `sw_ss` size in pixels for sample translations along the slow axis, and
 634:     of `sw_fs` size in pixels for sample translations along the fast axis in
 635:     order to minimize the total MSE.
 636: 
 637:     Parameters
 638:     ----------
 639:     I_n : numpy.ndarray
 640:         Measured intensity frames.
 641:     W : numpy.ndarray
 642:         Measured frames' whitefield.
 643:     I0 : numpy.ndarray
 644:         Reference image of the sample.
 645:     u : numpy.ndarray
 646:         The pixel mapping between the data at
 647:         the detector plane and the reference image at
 648:         the reference plane.
 649:     di : numpy.ndarray
 650:         Initial sample's translations along the slow detector
 651:         axis in pixels.
 652:     dj : numpy.ndarray
 653:         Initial sample's translations along the fast detector
 654:         axis in pixels.
 655:     sw_ss : int
 656:         Search window size in pixels along the slow detector
 657:         axis.
 658:     sw_fs : int
 659:         Search window size in pixels along the fast detector
 660:         axis.
 661:     ls : float
 662:         Reference image length scale in pixels.
 663:     num_threads : int, optional
 664:         Number of threads.
 665: 
 666:     Returns
 667:     -------
 668:     dij : numpy.ndarray
 669:         Updated sample pixel translations.
 670: 
 671:     Notes
 672:     -----
 673:     The following error metric is being minimized:
 674: 
 675:     .. math::
 676: 
 677:         MSE_{total} = \frac{1}{N M}\sum_{i, j} \left( \frac{\sum_{n}
 678:         \left( I_g[n] - I_{ref}[ii_n, jj_n] \right)^2}{\sum_{n}
 679:         \left(I_g[n] - 1 \right)^2} \right)
 680:     
 681:     Where :math:`I_g[n]` is a kriged intensity profile of the
 682:     particular detector coordinate :math:`I_n[n, i, j]`. Intensity
 683:     profile :math:`I_n[n, i, j]` is kriged with gaussian radial
 684:     basis function :math:`\phi`:
 685: 
 686:     .. math::
 687:         I_g[n] = \frac{\sum_{\Delta i, \Delta j} I_n[n, i + \Delta i,
 688:         j + \Delta j] W[i + \Delta i, j + \Delta j] 
 689:         \phi[\Delta u[0], \Delta u[1]]}
 690:         {\sum_{\Delta i, \Delta j} W[i + \Delta i, j + \Delta j]^2
 691:         \phi[\Delta u[0], \Delta u[1]]}
 692:     
 693:     .. math::
 694:         \Delta u[0] = u[0, i + \Delta i, j + \Delta j] - u[0, i, j]
 695:     
 696:     .. math::
 697:         \Delta u[1] = u[1, i + \Delta i, j + \Delta j] - u[1, i, j]
 698: 
 699:     .. math::
 700:         \phi [\Delta ii_{ref}, \Delta jj_{ref}] = 
 701:         \exp\left[{-\frac{(\Delta ii_{ref})^2 + 
 702:         (\Delta jj_{ref})^2}{ls^2}}\right]
 703:     """
 704:     cdef:
+705:         str dtype = 'float64' if float_t is np.float64_t else 'float32'
  if ((1 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  if ((0 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+706:         np.npy_intp a = I_n.shape[0], b = I_n.shape[1], c = I_n.shape[2]
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
/* … */
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
 707:         int i, j, k, t
+708:         float_t[:, :, ::1] I = np.empty((a + 1, b, c), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 708, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 708, __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_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_I = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 708, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 708, __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_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_I = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+709:         float_t[:, ::1] I_buf = np.empty((num_threads, a + 1), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 709, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_I_buf = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 709, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_I_buf = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
+710:         float_t[:, :, ::1] SS_m = np.empty((3, b, c), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 710, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 710, __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_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_SS_m = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 710, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 710, __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_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_SS_m = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+711:         float_t[:, ::1] dij = np.empty((a, 2), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_2);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 711, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_dij = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_2);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 711, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_dij = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
 712:         float_t m_ptr[3]
+713:     m_ptr[2] = NO_VAR
  (__pyx_v_m_ptr[2]) = -1.0;
/* … */
  (__pyx_v_m_ptr[2]) = -1.0;
+714:     for k in prange(c, schedule='guided', num_threads=num_threads, nogil=True):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_8 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_10 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided)        __pyx_t_8 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_10 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_10; __pyx_t_9++){
                        {
                            __pyx_v_k = (int)(0 + 1 * __pyx_t_9);
                            /* Initialize private variables to invalid values */
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_t = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
/* … */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_8 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_10 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided)        __pyx_t_8 = __pyx_v_c;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_10 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_10 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_10; __pyx_t_9++){
                        {
                            __pyx_v_k = (int)(0 + 1 * __pyx_t_9);
                            /* Initialize private variables to invalid values */
                            __pyx_v_i = ((int)0xbad0bad0);
                            __pyx_v_j = ((int)0xbad0bad0);
                            __pyx_v_t = ((int)0xbad0bad0);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+715:         t = openmp.omp_get_thread_num()
                            __pyx_v_t = omp_get_thread_num();
/* … */
                            __pyx_v_t = omp_get_thread_num();
+716:         for j in range(b):
                            __pyx_t_11 = __pyx_v_b;
                            __pyx_t_12 = __pyx_t_11;
                            for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
                              __pyx_v_j = __pyx_t_13;
/* … */
                            __pyx_t_11 = __pyx_v_b;
                            __pyx_t_12 = __pyx_t_11;
                            for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
                              __pyx_v_j = __pyx_t_13;
+717:             krig_data_c(I_buf[t], I_n, W, u, j, k, ls)
                              __pyx_t_14.data = __pyx_v_I_buf.data;
                              __pyx_t_14.memview = __pyx_v_I_buf.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_14, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I_buf.strides[0];
        __pyx_t_14.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_14.shape[0] = __pyx_v_I_buf.shape[1];
__pyx_t_14.strides[0] = __pyx_v_I_buf.strides[1];
    __pyx_t_14.suboffsets[0] = -1;

__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_14, __pyx_v_I_n, __pyx_v_W, __pyx_v_u, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_14, 0);
                              __pyx_t_14.memview = NULL;
                              __pyx_t_14.data = NULL;
/* … */
                              __pyx_t_14.data = __pyx_v_I_buf.data;
                              __pyx_t_14.memview = __pyx_v_I_buf.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_14, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I_buf.strides[0];
        __pyx_t_14.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_14.shape[0] = __pyx_v_I_buf.shape[1];
__pyx_t_14.strides[0] = __pyx_v_I_buf.strides[1];
    __pyx_t_14.suboffsets[0] = -1;

__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_14, __pyx_v_I_n, __pyx_v_W, __pyx_v_u, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                              __PYX_XDEC_MEMVIEW(&__pyx_t_14, 0);
                              __pyx_t_14.memview = NULL;
                              __pyx_t_14.data = NULL;
+718:             mse_bi(m_ptr, I_buf[t], I0, di, dj, u[0, j, k], u[1, j, k])
                              __pyx_t_14.data = __pyx_v_I_buf.data;
                              __pyx_t_14.memview = __pyx_v_I_buf.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_14, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I_buf.strides[0];
        __pyx_t_14.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_14.shape[0] = __pyx_v_I_buf.shape[1];
__pyx_t_14.strides[0] = __pyx_v_I_buf.strides[1];
    __pyx_t_14.suboffsets[0] = -1;

__pyx_t_15 = 0;
                              __pyx_t_16 = __pyx_v_j;
                              __pyx_t_17 = __pyx_v_k;
                              __pyx_t_18 = 1;
                              __pyx_t_19 = __pyx_v_j;
                              __pyx_t_20 = __pyx_v_k;
                              __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_m_ptr, __pyx_t_14, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_15 * __pyx_v_u.strides[0]) ) + __pyx_t_16 * __pyx_v_u.strides[1]) )) + __pyx_t_17)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_18 * __pyx_v_u.strides[0]) ) + __pyx_t_19 * __pyx_v_u.strides[1]) )) + __pyx_t_20)) ))));
                              __PYX_XDEC_MEMVIEW(&__pyx_t_14, 0);
                              __pyx_t_14.memview = NULL;
                              __pyx_t_14.data = NULL;
/* … */
                              __pyx_t_14.data = __pyx_v_I_buf.data;
                              __pyx_t_14.memview = __pyx_v_I_buf.memview;
                              __PYX_INC_MEMVIEW(&__pyx_t_14, 0);
                              {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I_buf.strides[0];
        __pyx_t_14.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_14.shape[0] = __pyx_v_I_buf.shape[1];
__pyx_t_14.strides[0] = __pyx_v_I_buf.strides[1];
    __pyx_t_14.suboffsets[0] = -1;

__pyx_t_15 = 0;
                              __pyx_t_16 = __pyx_v_j;
                              __pyx_t_17 = __pyx_v_k;
                              __pyx_t_18 = 1;
                              __pyx_t_19 = __pyx_v_j;
                              __pyx_t_20 = __pyx_v_k;
                              __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_m_ptr, __pyx_t_14, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_15 * __pyx_v_u.strides[0]) ) + __pyx_t_16 * __pyx_v_u.strides[1]) )) + __pyx_t_17)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_18 * __pyx_v_u.strides[0]) ) + __pyx_t_19 * __pyx_v_u.strides[1]) )) + __pyx_t_20)) ))));
                              __PYX_XDEC_MEMVIEW(&__pyx_t_14, 0);
                              __pyx_t_14.memview = NULL;
                              __pyx_t_14.data = NULL;
+719:             SS_m[0, j, k] = m_ptr[0]; SS_m[1, j, k] = m_ptr[1]
                              __pyx_t_20 = 0;
                              __pyx_t_19 = __pyx_v_j;
                              __pyx_t_18 = __pyx_v_k;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SS_m.data + __pyx_t_20 * __pyx_v_SS_m.strides[0]) ) + __pyx_t_19 * __pyx_v_SS_m.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_m_ptr[0]);
                              __pyx_t_18 = 1;
                              __pyx_t_19 = __pyx_v_j;
                              __pyx_t_20 = __pyx_v_k;
                              *((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SS_m.data + __pyx_t_18 * __pyx_v_SS_m.strides[0]) ) + __pyx_t_19 * __pyx_v_SS_m.strides[1]) )) + __pyx_t_20)) )) = (__pyx_v_m_ptr[1]);
/* … */
                              __pyx_t_20 = 0;
                              __pyx_t_19 = __pyx_v_j;
                              __pyx_t_18 = __pyx_v_k;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SS_m.data + __pyx_t_20 * __pyx_v_SS_m.strides[0]) ) + __pyx_t_19 * __pyx_v_SS_m.strides[1]) )) + __pyx_t_18)) )) = (__pyx_v_m_ptr[0]);
                              __pyx_t_18 = 1;
                              __pyx_t_19 = __pyx_v_j;
                              __pyx_t_20 = __pyx_v_k;
                              *((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SS_m.data + __pyx_t_18 * __pyx_v_SS_m.strides[0]) ) + __pyx_t_19 * __pyx_v_SS_m.strides[1]) )) + __pyx_t_20)) )) = (__pyx_v_m_ptr[1]);
+720:             for i in range(a + 1):
                              __pyx_t_21 = (__pyx_v_a + 1);
                              __pyx_t_22 = __pyx_t_21;
                              for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
                                __pyx_v_i = __pyx_t_23;
/* … */
                              __pyx_t_21 = (__pyx_v_a + 1);
                              __pyx_t_22 = __pyx_t_21;
                              for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
                                __pyx_v_i = __pyx_t_23;
+721:                 I[i, j, k] = I_buf[t, i]
                                __pyx_t_20 = __pyx_v_t;
                                __pyx_t_19 = __pyx_v_i;
                                __pyx_t_18 = __pyx_v_i;
                                __pyx_t_17 = __pyx_v_j;
                                __pyx_t_16 = __pyx_v_k;
                                *((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_17 * __pyx_v_I.strides[1]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_I_buf.data + __pyx_t_20 * __pyx_v_I_buf.strides[0]) )) + __pyx_t_19)) )));
                              }
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
/* … */
                                __pyx_t_20 = __pyx_v_t;
                                __pyx_t_19 = __pyx_v_i;
                                __pyx_t_18 = __pyx_v_i;
                                __pyx_t_17 = __pyx_v_j;
                                __pyx_t_16 = __pyx_v_k;
                                *((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_17 * __pyx_v_I.strides[1]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_I_buf.data + __pyx_t_20 * __pyx_v_I_buf.strides[0]) )) + __pyx_t_19)) )));
                              }
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+722:     for i in prange(a, schedule='guided', num_threads=num_threads, nogil=True):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_10 = __pyx_v_a;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_8 = (__pyx_t_10 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_8 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) schedule(guided)        __pyx_t_10 = __pyx_v_a;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_8 = (__pyx_t_10 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_8 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_9);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L18;
        }
        __pyx_L18:;
      }
  }
/* … */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_10 = __pyx_v_a;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_8 = (__pyx_t_10 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_8 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) schedule(guided)        __pyx_t_10 = __pyx_v_a;
        if ((1 == 0)) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_8 = (__pyx_t_10 - 0 + 1 - 1/abs(1)) / 1;
            if (__pyx_t_8 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) schedule(guided) num_threads(__pyx_v_num_threads)
                    #endif /* _OPENMP */
                    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9++){
                        {
                            __pyx_v_i = (int)(0 + 1 * __pyx_t_9);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L18;
        }
        __pyx_L18:;
      }
  }
+723:         dij[i, 0] = di[i]; dij[i, 1] = dj[i]
                            __pyx_t_19 = __pyx_v_i;
                            __pyx_t_20 = __pyx_v_i;
                            __pyx_t_16 = 0;
                            *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_dij.data + __pyx_t_20 * __pyx_v_dij.strides[0]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_di.data) + __pyx_t_19)) )));
                            __pyx_t_19 = __pyx_v_i;
                            __pyx_t_16 = __pyx_v_i;
                            __pyx_t_20 = 1;
                            *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_dij.data + __pyx_t_16 * __pyx_v_dij.strides[0]) )) + __pyx_t_20)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float64_t *) __pyx_v_dj.data) + __pyx_t_19)) )));
/* … */
                            __pyx_t_19 = __pyx_v_i;
                            __pyx_t_20 = __pyx_v_i;
                            __pyx_t_16 = 0;
                            *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_dij.data + __pyx_t_20 * __pyx_v_dij.strides[0]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_di.data) + __pyx_t_19)) )));
                            __pyx_t_19 = __pyx_v_i;
                            __pyx_t_16 = __pyx_v_i;
                            __pyx_t_20 = 1;
                            *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_dij.data + __pyx_t_16 * __pyx_v_dij.strides[0]) )) + __pyx_t_20)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ ((char *) (((__pyx_t_5numpy_float32_t *) __pyx_v_dj.data) + __pyx_t_19)) )));
+724:         update_t_c(SS_m, I[i], I[a], I0, u, dij[i], sw_ss, sw_fs)
                            __pyx_t_7.data = __pyx_v_I.data;
                            __pyx_t_7.memview = __pyx_v_I.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_7, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_7.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_7.shape[0] = __pyx_v_I.shape[1];
__pyx_t_7.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_7.suboffsets[0] = -1;

__pyx_t_7.shape[1] = __pyx_v_I.shape[2];
__pyx_t_7.strides[1] = __pyx_v_I.strides[2];
    __pyx_t_7.suboffsets[1] = -1;

__pyx_t_24.data = __pyx_v_I.data;
                            __pyx_t_24.memview = __pyx_v_I.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_24, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_a;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_24.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_24.shape[0] = __pyx_v_I.shape[1];
__pyx_t_24.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_24.suboffsets[0] = -1;

__pyx_t_24.shape[1] = __pyx_v_I.shape[2];
__pyx_t_24.strides[1] = __pyx_v_I.strides[2];
    __pyx_t_24.suboffsets[1] = -1;

__pyx_t_14.data = __pyx_v_dij.data;
                            __pyx_t_14.memview = __pyx_v_dij.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_14, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_dij.strides[0];
        __pyx_t_14.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_14.shape[0] = __pyx_v_dij.shape[1];
__pyx_t_14.strides[0] = __pyx_v_dij.strides[1];
    __pyx_t_14.suboffsets[0] = -1;

__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_update_t_c(__pyx_v_SS_m, __pyx_t_7, __pyx_t_24, __pyx_v_I0, __pyx_v_u, __pyx_t_14, __pyx_v_sw_ss, __pyx_v_sw_fs);
                            __PYX_XDEC_MEMVIEW(&__pyx_t_7, 0);
                            __pyx_t_7.memview = NULL;
                            __pyx_t_7.data = NULL;
                            __PYX_XDEC_MEMVIEW(&__pyx_t_24, 0);
                            __pyx_t_24.memview = NULL;
                            __pyx_t_24.data = NULL;
                            __PYX_XDEC_MEMVIEW(&__pyx_t_14, 0);
                            __pyx_t_14.memview = NULL;
                            __pyx_t_14.data = NULL;
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
/* … */
                            __pyx_t_7.data = __pyx_v_I.data;
                            __pyx_t_7.memview = __pyx_v_I.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_7, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_7.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_7.shape[0] = __pyx_v_I.shape[1];
__pyx_t_7.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_7.suboffsets[0] = -1;

__pyx_t_7.shape[1] = __pyx_v_I.shape[2];
__pyx_t_7.strides[1] = __pyx_v_I.strides[2];
    __pyx_t_7.suboffsets[1] = -1;

__pyx_t_24.data = __pyx_v_I.data;
                            __pyx_t_24.memview = __pyx_v_I.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_24, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_a;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_24.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_24.shape[0] = __pyx_v_I.shape[1];
__pyx_t_24.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_24.suboffsets[0] = -1;

__pyx_t_24.shape[1] = __pyx_v_I.shape[2];
__pyx_t_24.strides[1] = __pyx_v_I.strides[2];
    __pyx_t_24.suboffsets[1] = -1;

__pyx_t_14.data = __pyx_v_dij.data;
                            __pyx_t_14.memview = __pyx_v_dij.memview;
                            __PYX_INC_MEMVIEW(&__pyx_t_14, 0);
                            {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_dij.strides[0];
        __pyx_t_14.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_14.shape[0] = __pyx_v_dij.shape[1];
__pyx_t_14.strides[0] = __pyx_v_dij.strides[1];
    __pyx_t_14.suboffsets[0] = -1;

__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_update_t_c(__pyx_v_SS_m, __pyx_t_7, __pyx_t_24, __pyx_v_I0, __pyx_v_u, __pyx_t_14, __pyx_v_sw_ss, __pyx_v_sw_fs);
                            __PYX_XDEC_MEMVIEW(&__pyx_t_7, 0);
                            __pyx_t_7.memview = NULL;
                            __pyx_t_7.data = NULL;
                            __PYX_XDEC_MEMVIEW(&__pyx_t_24, 0);
                            __pyx_t_24.memview = NULL;
                            __pyx_t_24.data = NULL;
                            __PYX_XDEC_MEMVIEW(&__pyx_t_14, 0);
                            __pyx_t_14.memview = NULL;
                            __pyx_t_14.data = NULL;
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+725:     return np.asarray(dij)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_dij, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
/* … */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_dij, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float32_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float32_t, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 726: 
+727: def mse_frame(float_t[:, :, ::1] I_n, float_t[:, ::1] W, float_t[:, ::1] I0,
/* Python wrapper */
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_9mse_frame(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyrost_3bin_6pyrost_8mse_frame[] = "mse_frame(signatures, args, kwargs, defaults)\nReturn the average mean-squared-error (MSE) value per pixel.\n\n    Parameters\n    ----------\n    I_n : numpy.ndarray\n        Measured intensity frames.\n    W : numpy.ndarray\n        Measured frames' whitefield.\n    I0 : numpy.ndarray\n        Reference image of the sample.\n    u : numpy.ndarray\n        The pixel mapping between the data at\n        the detector plane and the reference image at\n        the reference plane.\n    di : numpy.ndarray\n        Sample's translations along the slow detector axis\n        in pixels.\n    dj : numpy.ndarray\n        Sample's translations along the fast detector axis\n        in pixels.\n    ls : float\n        Reference image length scale in pixels.\n    num_threads : int, optional\n        Number of threads.\n\n    Returns\n    -------\n    mse : numpy.ndarray\n        Average MSE per pixel.\n\n    See Also\n    --------\n    update_pixel_map_gs : Description of error metric which\n        is being minimized.\n    ";
static PyMethodDef __pyx_mdef_6pyrost_3bin_6pyrost_9mse_frame = {"mse_frame", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyrost_3bin_6pyrost_9mse_frame, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_8mse_frame};
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_9mse_frame(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;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 727, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 727, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_signatures = values[0];
    __pyx_v_args = values[1];
    __pyx_v_kwargs = values[2];
    __pyx_v_defaults = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 727, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_8mse_frame(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_8mse_frame(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
  PyObject *__pyx_v_dest_sig = NULL;
  Py_ssize_t __pyx_v_i;
  PyTypeObject *__pyx_v_ndarray = 0;
  __Pyx_memviewslice __pyx_v_memslice;
  Py_ssize_t __pyx_v_itemsize;
  CYTHON_UNUSED int __pyx_v_dtype_signed;
  char __pyx_v_kind;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_dtype = NULL;
  PyObject *__pyx_v_arg_base = NULL;
  PyObject *__pyx_v_candidates = NULL;
  PyObject *__pyx_v_sig = NULL;
  int __pyx_v_match_found;
  PyObject *__pyx_v_src_sig = NULL;
  PyObject *__pyx_v_dst_type = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mse_frame", 0);
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 727, __pyx_L1_error)
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
  }
  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_itemsize = -1L;
  if (unlikely(__pyx_v_args == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 727, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 727, __pyx_L1_error)
  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 727, __pyx_L1_error)
    }
    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    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, 727, __pyx_L1_error)
  }
  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_I_n, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 727, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 727, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_I_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  /*else*/ {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 727, __pyx_L1_error)
    }
    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 727, __pyx_L1_error)
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_int_7);
    __Pyx_GIVEREF(__pyx_int_7);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_7);
    __Pyx_INCREF(__pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_n_s_s);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 727, __pyx_L1_error)
  }
  __pyx_L6:;
  while (1) {
    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_dtype = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L12;
      }
      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_arg_base = __pyx_t_6;
        __pyx_t_6 = 0;
        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
        __pyx_t_2 = (__pyx_t_3 != 0);
        if (__pyx_t_2) {
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_v_dtype = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L13;
        }
        /*else*/ {
          __Pyx_INCREF(Py_None);
          __pyx_v_dtype = Py_None;
        }
        __pyx_L13:;
        goto __pyx_L12;
      }
      /*else*/ {
        __Pyx_INCREF(Py_None);
        __pyx_v_dtype = Py_None;
      }
      __pyx_L12:;
      __pyx_v_itemsize = -1L;
      __pyx_t_2 = (__pyx_v_dtype != Py_None);
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 727, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_itemsize = __pyx_t_5;
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 727, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_kind = __pyx_t_7;
        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
        switch (__pyx_v_kind) {
          case 'i':
          case 'u':
          break;
          case 'f':
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L16_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 727, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L16_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 727, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L19_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 727, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L19_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 727, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          break;
          case 'c':
          break;
          case 'O':
          break;
          default: break;
        }
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L22_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L22_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 727, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L26_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L26_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 727, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 727, __pyx_L1_error)
    goto __pyx_L10_break;
  }
  __pyx_L10_break:;
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_signatures == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 727, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_v_match_found = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 727, __pyx_L1_error)
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_i = __pyx_t_17;
      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 727, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 727, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (__pyx_t_2) {
          __pyx_v_match_found = 1;
          goto __pyx_L34;
        }
        /*else*/ {
          __pyx_v_match_found = 0;
          goto __pyx_L32_break;
        }
        __pyx_L34:;
      }
    }
    __pyx_L32_break:;
    __pyx_t_2 = (__pyx_v_match_found != 0);
    if (__pyx_t_2) {
      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 727, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
  __pyx_t_3 = ((!__pyx_t_2) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 727, __pyx_L1_error)
  }
  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 727, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 727, __pyx_L1_error)
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_signatures == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 727, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dest_sig);
  __Pyx_XDECREF(__pyx_v_ndarray);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_arg_base);
  __Pyx_XDECREF(__pyx_v_candidates);
  __Pyx_XDECREF(__pyx_v_sig);
  __Pyx_XDECREF(__pyx_v_src_sig);
  __Pyx_XDECREF(__pyx_v_dst_type);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_92__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults18, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_39mse_frame(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_39mse_frame = {"__pyx_fuse_0mse_frame", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_39mse_frame, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_8mse_frame};
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_39mse_frame(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  __pyx_t_5numpy_float64_t __pyx_v_ls;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mse_frame (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_ls,&__pyx_n_s_num_threads,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    __pyx_defaults18 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults18, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 1); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 2); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 3); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 4); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 5); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 6); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mse_frame") < 0)) __PYX_ERR(0, 727, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 727, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 727, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 727, __pyx_L3_error)
    __pyx_v_u = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u.memview)) __PYX_ERR(0, 728, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 728, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 728, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_ls == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(0, 728, __pyx_L3_error)
    if (values[7]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[7]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 728, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 727, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.mse_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_38mse_frame(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_ls, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_38mse_frame(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, __pyx_t_5numpy_float64_t __pyx_v_ls, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  npy_intp __pyx_v_c;
  CYTHON_UNUSED npy_intp __pyx_v_aa;
  CYTHON_UNUSED npy_intp __pyx_v_bb;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __pyx_t_5numpy_float64_t *__pyx_v_mptr;
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_mse_f = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_0mse_frame", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.mse_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_mse_f, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_94__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults19, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_41mse_frame(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_41mse_frame = {"__pyx_fuse_1mse_frame", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_41mse_frame, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_8mse_frame};
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_41mse_frame(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  __pyx_t_5numpy_float32_t __pyx_v_ls;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mse_frame (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_ls,&__pyx_n_s_num_threads,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    __pyx_defaults19 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults19, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 1); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 2); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 3); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 4); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 5); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, 6); __PYX_ERR(0, 727, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mse_frame") < 0)) __PYX_ERR(0, 727, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 727, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 727, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 727, __pyx_L3_error)
    __pyx_v_u = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u.memview)) __PYX_ERR(0, 728, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 728, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 728, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsFloat(values[6]); if (unlikely((__pyx_v_ls == ((npy_float32)-1)) && PyErr_Occurred())) __PYX_ERR(0, 728, __pyx_L3_error)
    if (values[7]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[7]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 728, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mse_frame", 0, 7, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 727, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.mse_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_40mse_frame(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_ls, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_40mse_frame(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, __pyx_t_5numpy_float32_t __pyx_v_ls, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  npy_intp __pyx_v_c;
  CYTHON_UNUSED npy_intp __pyx_v_aa;
  CYTHON_UNUSED npy_intp __pyx_v_bb;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __pyx_t_5numpy_float32_t *__pyx_v_mptr;
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_mse_f = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_1mse_frame", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.mse_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_mse_f, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
/* … */
  __pyx_tuple__33 = PyTuple_Pack(20, __pyx_n_s_I_n, __pyx_n_s_W, __pyx_n_s_I0, __pyx_n_s_u, __pyx_n_s_di, __pyx_n_s_dj, __pyx_n_s_ls, __pyx_n_s_num_threads, __pyx_n_s_dtype, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_c, __pyx_n_s_aa, __pyx_n_s_bb, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_t, __pyx_n_s_mptr, __pyx_n_s_I, __pyx_n_s_mse_f); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_39mse_frame, 0, __pyx_n_s_mse_frame, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults18), 0)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults18, __pyx_t_4)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_3);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_6pyrost_3bin_6pyrost_92__defaults__);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_float64_t, __pyx_t_4) < 0) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_41mse_frame, 0, __pyx_n_s_mse_frame, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults19), 0)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults19, __pyx_t_4)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_3);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_6pyrost_3bin_6pyrost_94__defaults__);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_float32_t, __pyx_t_4) < 0) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_FusedFunction_New(&__pyx_mdef_6pyrost_3bin_6pyrost_9mse_frame, 0, __pyx_n_s_mse_frame, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_3);
  ((__pyx_FusedFunctionObject *) __pyx_t_4)->__signatures__ = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mse_frame, __pyx_t_4) < 0) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(8, 0, 20, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyrost_bin_pyrost_pyx, __pyx_n_s_mse_frame, 727, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 727, __pyx_L1_error)
+728:               float_t[:, :, ::1] u, float_t[::1] di, float_t[::1] dj, float_t ls, unsigned num_threads=1):
  __pyx_t_2 = __Pyx_PyInt_From_long(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 728, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
 729:     """Return the average mean-squared-error (MSE) value per pixel.
 730: 
 731:     Parameters
 732:     ----------
 733:     I_n : numpy.ndarray
 734:         Measured intensity frames.
 735:     W : numpy.ndarray
 736:         Measured frames' whitefield.
 737:     I0 : numpy.ndarray
 738:         Reference image of the sample.
 739:     u : numpy.ndarray
 740:         The pixel mapping between the data at
 741:         the detector plane and the reference image at
 742:         the reference plane.
 743:     di : numpy.ndarray
 744:         Sample's translations along the slow detector axis
 745:         in pixels.
 746:     dj : numpy.ndarray
 747:         Sample's translations along the fast detector axis
 748:         in pixels.
 749:     ls : float
 750:         Reference image length scale in pixels.
 751:     num_threads : int, optional
 752:         Number of threads.
 753: 
 754:     Returns
 755:     -------
 756:     mse : numpy.ndarray
 757:         Average MSE per pixel.
 758: 
 759:     See Also
 760:     --------
 761:     update_pixel_map_gs : Description of error metric which
 762:         is being minimized.
 763:     """
 764:     cdef:
+765:         str dtype = 'float64' if float_t is np.float64_t else 'float32'
  if ((1 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  if ((0 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+766:         np.npy_intp a = I_n.shape[0], b = I_n.shape[1], c = I_n.shape[2]
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
/* … */
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
+767:         np.npy_intp aa = I0.shape[0], bb = I0.shape[1]
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
/* … */
  __pyx_v_aa = (__pyx_v_I0.shape[0]);
  __pyx_v_bb = (__pyx_v_I0.shape[1]);
 768:         int j, k, t
 769:         float_t *mptr
+770:         float_t[:, ::1] I = np.empty((num_threads, a + 1), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 770, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_I = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 770, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_I = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+771:         float_t[:, ::1] mse_f = np.empty((b, c), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_c); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 771, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_mse_f = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_c); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 771, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_mse_f = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+772:     with nogil, parallel(num_threads=num_threads):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_mptr)        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_mptr) num_threads(__pyx_v_num_threads)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_mptr = ((__pyx_t_5numpy_float64_t *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
/* … */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_mptr)        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_mptr) num_threads(__pyx_v_num_threads)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_mptr = ((__pyx_t_5numpy_float32_t *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+773:         mptr = <float_t *>malloc(3 * sizeof(float_t))
                __pyx_v_mptr = ((__pyx_t_5numpy_float64_t *)malloc((3 * (sizeof(__pyx_t_5numpy_float64_t)))));
/* … */
                __pyx_v_mptr = ((__pyx_t_5numpy_float32_t *)malloc((3 * (sizeof(__pyx_t_5numpy_float32_t)))));
+774:         if mptr is NULL:
                __pyx_t_6 = ((__pyx_v_mptr == NULL) != 0);
                if (__pyx_t_6) {
/* … */
                }
/* … */
                __pyx_t_6 = ((__pyx_v_mptr == NULL) != 0);
                if (__pyx_t_6) {
/* … */
                }
+775:             abort()
                  abort();
/* … */
                  abort();
+776:         mptr[2] = NO_VAR
                (__pyx_v_mptr[2]) = -1.0;
/* … */
                (__pyx_v_mptr[2]) = -1.0;
+777:         for k in prange(c, schedule='guided'):
                __pyx_t_7 = __pyx_v_c;
                if ((1 == 0)) abort();
                {
                    __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_9 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided)
                        #endif /* _OPENMP */
                        for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                            {
                                __pyx_v_k = (int)(0 + 1 * __pyx_t_8);
                                /* Initialize private variables to invalid values */
                                __pyx_v_j = ((int)0xbad0bad0);
                                __pyx_v_t = ((int)0xbad0bad0);
/* … */
                __pyx_t_7 = __pyx_v_c;
                if ((1 == 0)) abort();
                {
                    __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_9 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided)
                        #endif /* _OPENMP */
                        for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                            {
                                __pyx_v_k = (int)(0 + 1 * __pyx_t_8);
                                /* Initialize private variables to invalid values */
                                __pyx_v_j = ((int)0xbad0bad0);
                                __pyx_v_t = ((int)0xbad0bad0);
+778:             t = openmp.omp_get_thread_num()
                                __pyx_v_t = omp_get_thread_num();
/* … */
                                __pyx_v_t = omp_get_thread_num();
+779:             for j in range(b):
                                __pyx_t_10 = __pyx_v_b;
                                __pyx_t_11 = __pyx_t_10;
                                for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                                  __pyx_v_j = __pyx_t_12;
/* … */
                                __pyx_t_10 = __pyx_v_b;
                                __pyx_t_11 = __pyx_t_10;
                                for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                                  __pyx_v_j = __pyx_t_12;
+780:                 krig_data_c(I[t], I_n, W, u, j, k, ls)
                                  __pyx_t_13.data = __pyx_v_I.data;
                                  __pyx_t_13.memview = __pyx_v_I.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_13, __pyx_v_I_n, __pyx_v_W, __pyx_v_u, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                  __pyx_t_13.memview = NULL;
                                  __pyx_t_13.data = NULL;
/* … */
                                  __pyx_t_13.data = __pyx_v_I.data;
                                  __pyx_t_13.memview = __pyx_v_I.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_13, __pyx_v_I_n, __pyx_v_W, __pyx_v_u, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                  __pyx_t_13.memview = NULL;
                                  __pyx_t_13.data = NULL;
+781:                 mse_bi(mptr, I[t], I0, di, dj, u[0, j, k], u[1, j, k])
                                  __pyx_t_13.data = __pyx_v_I.data;
                                  __pyx_t_13.memview = __pyx_v_I.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_14 = 0;
                                  __pyx_t_15 = __pyx_v_j;
                                  __pyx_t_16 = __pyx_v_k;
                                  __pyx_t_17 = 1;
                                  __pyx_t_18 = __pyx_v_j;
                                  __pyx_t_19 = __pyx_v_k;
                                  __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr, __pyx_t_13, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_14 * __pyx_v_u.strides[0]) ) + __pyx_t_15 * __pyx_v_u.strides[1]) )) + __pyx_t_16)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_17 * __pyx_v_u.strides[0]) ) + __pyx_t_18 * __pyx_v_u.strides[1]) )) + __pyx_t_19)) ))));
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                  __pyx_t_13.memview = NULL;
                                  __pyx_t_13.data = NULL;
/* … */
                                  __pyx_t_13.data = __pyx_v_I.data;
                                  __pyx_t_13.memview = __pyx_v_I.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_14 = 0;
                                  __pyx_t_15 = __pyx_v_j;
                                  __pyx_t_16 = __pyx_v_k;
                                  __pyx_t_17 = 1;
                                  __pyx_t_18 = __pyx_v_j;
                                  __pyx_t_19 = __pyx_v_k;
                                  __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr, __pyx_t_13, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_14 * __pyx_v_u.strides[0]) ) + __pyx_t_15 * __pyx_v_u.strides[1]) )) + __pyx_t_16)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_17 * __pyx_v_u.strides[0]) ) + __pyx_t_18 * __pyx_v_u.strides[1]) )) + __pyx_t_19)) ))));
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                  __pyx_t_13.memview = NULL;
                                  __pyx_t_13.data = NULL;
+782:                 mse_f[j, k] = mptr[0] / mptr[1]
                                  __pyx_t_19 = __pyx_v_j;
                                  __pyx_t_18 = __pyx_v_k;
                                  *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_mse_f.data + __pyx_t_19 * __pyx_v_mse_f.strides[0]) )) + __pyx_t_18)) )) = ((__pyx_v_mptr[0]) / (__pyx_v_mptr[1]));
                                }
                            }
                        }
                    }
                }
/* … */
                                  __pyx_t_19 = __pyx_v_j;
                                  __pyx_t_18 = __pyx_v_k;
                                  *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_mse_f.data + __pyx_t_19 * __pyx_v_mse_f.strides[0]) )) + __pyx_t_18)) )) = ((__pyx_v_mptr[0]) / (__pyx_v_mptr[1]));
                                }
                            }
                        }
                    }
                }
+783:         free(mptr)
                free(__pyx_v_mptr);
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
/* … */
                free(__pyx_v_mptr);
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+784:     return np.asarray(mse_f)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_mse_f, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
/* … */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_mse_f, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float32_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float32_t, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 785: 
+786: def mse_total(float_t[:, :, ::1] I_n, float_t[:, ::1] W, float_t[:, ::1] I0,
/* Python wrapper */
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_11mse_total(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyrost_3bin_6pyrost_10mse_total[] = "mse_total(signatures, args, kwargs, defaults)\nReturn the average total mean-squared-error (MSE).\n\n    Parameters\n    ----------\n    I_n : numpy.ndarray\n        Measured intensity frames.\n    W : numpy.ndarray\n        Measured frames' whitefield.\n    I0 : numpy.ndarray\n        Reference image of the sample.\n    u : numpy.ndarray\n        The pixel mapping between the data at\n        the detector plane and the reference image at\n        the reference plane.\n    di : numpy.ndarray\n        Sample's translations along the slow detector axis\n        in pixels.\n    dj : numpy.ndarray\n        Sample's translations along the fast detector axis\n        in pixels.\n    ls : float\n        Reference image length scale in pixels.\n    num_threads : int, optional\n        Number of threads.\n\n    Returns\n    -------\n    mse : float\n        Average total MSE.\n\n    See Also\n    --------\n    update_translations_gs : Description of error metric which\n        is being minimized.\n    ";
static PyMethodDef __pyx_mdef_6pyrost_3bin_6pyrost_11mse_total = {"mse_total", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyrost_3bin_6pyrost_11mse_total, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_10mse_total};
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_11mse_total(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;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 786, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 786, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_signatures = values[0];
    __pyx_v_args = values[1];
    __pyx_v_kwargs = values[2];
    __pyx_v_defaults = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 786, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_10mse_total(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_10mse_total(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
  PyObject *__pyx_v_dest_sig = NULL;
  Py_ssize_t __pyx_v_i;
  PyTypeObject *__pyx_v_ndarray = 0;
  __Pyx_memviewslice __pyx_v_memslice;
  Py_ssize_t __pyx_v_itemsize;
  CYTHON_UNUSED int __pyx_v_dtype_signed;
  char __pyx_v_kind;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_dtype = NULL;
  PyObject *__pyx_v_arg_base = NULL;
  PyObject *__pyx_v_candidates = NULL;
  PyObject *__pyx_v_sig = NULL;
  int __pyx_v_match_found;
  PyObject *__pyx_v_src_sig = NULL;
  PyObject *__pyx_v_dst_type = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mse_total", 0);
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 786, __pyx_L1_error)
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
  }
  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_itemsize = -1L;
  if (unlikely(__pyx_v_args == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 786, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 786, __pyx_L1_error)
  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 786, __pyx_L1_error)
    }
    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    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, 786, __pyx_L1_error)
  }
  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_I_n, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 786, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 786, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_I_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  /*else*/ {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 786, __pyx_L1_error)
    }
    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 786, __pyx_L1_error)
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_int_7);
    __Pyx_GIVEREF(__pyx_int_7);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_7);
    __Pyx_INCREF(__pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_n_s_s);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 786, __pyx_L1_error)
  }
  __pyx_L6:;
  while (1) {
    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_dtype = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L12;
      }
      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_arg_base = __pyx_t_6;
        __pyx_t_6 = 0;
        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
        __pyx_t_2 = (__pyx_t_3 != 0);
        if (__pyx_t_2) {
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_v_dtype = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L13;
        }
        /*else*/ {
          __Pyx_INCREF(Py_None);
          __pyx_v_dtype = Py_None;
        }
        __pyx_L13:;
        goto __pyx_L12;
      }
      /*else*/ {
        __Pyx_INCREF(Py_None);
        __pyx_v_dtype = Py_None;
      }
      __pyx_L12:;
      __pyx_v_itemsize = -1L;
      __pyx_t_2 = (__pyx_v_dtype != Py_None);
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 786, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_itemsize = __pyx_t_5;
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 786, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_kind = __pyx_t_7;
        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
        switch (__pyx_v_kind) {
          case 'i':
          case 'u':
          break;
          case 'f':
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L16_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 786, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L16_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 786, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L19_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 786, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L19_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 786, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          break;
          case 'c':
          break;
          case 'O':
          break;
          default: break;
        }
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L22_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L22_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 786, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L26_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L26_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 786, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 786, __pyx_L1_error)
    goto __pyx_L10_break;
  }
  __pyx_L10_break:;
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_signatures == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 786, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_v_match_found = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 786, __pyx_L1_error)
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_i = __pyx_t_17;
      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 786, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 786, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (__pyx_t_2) {
          __pyx_v_match_found = 1;
          goto __pyx_L34;
        }
        /*else*/ {
          __pyx_v_match_found = 0;
          goto __pyx_L32_break;
        }
        __pyx_L34:;
      }
    }
    __pyx_L32_break:;
    __pyx_t_2 = (__pyx_v_match_found != 0);
    if (__pyx_t_2) {
      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 786, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
  __pyx_t_3 = ((!__pyx_t_2) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 786, __pyx_L1_error)
  }
  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 786, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 786, __pyx_L1_error)
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_signatures == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 786, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dest_sig);
  __Pyx_XDECREF(__pyx_v_ndarray);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_arg_base);
  __Pyx_XDECREF(__pyx_v_candidates);
  __Pyx_XDECREF(__pyx_v_sig);
  __Pyx_XDECREF(__pyx_v_src_sig);
  __Pyx_XDECREF(__pyx_v_dst_type);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_100__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults22, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_45mse_total(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_45mse_total = {"__pyx_fuse_0mse_total", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_45mse_total, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_10mse_total};
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_45mse_total(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  __pyx_t_5numpy_float64_t __pyx_v_ls;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mse_total (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_ls,&__pyx_n_s_num_threads,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    __pyx_defaults22 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults22, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 1); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 2); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 3); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 4); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 5); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 6); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mse_total") < 0)) __PYX_ERR(0, 786, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 786, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 786, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 786, __pyx_L3_error)
    __pyx_v_u = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float64_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u.memview)) __PYX_ERR(0, 787, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 787, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float64_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 787, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_ls == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(0, 787, __pyx_L3_error)
    if (values[7]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[7]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 787, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 786, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.mse_total", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_44mse_total(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_ls, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_44mse_total(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, __pyx_t_5numpy_float64_t __pyx_v_ls, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  npy_intp __pyx_v_c;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __pyx_t_5numpy_float64_t __pyx_v_err;
  __pyx_t_5numpy_float64_t *__pyx_v_mptr;
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_0mse_total", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.mse_total", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_102__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__defaults__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults23, __pyx_self)->__pyx_arg_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

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

/* Python wrapper */
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_47mse_total(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_47mse_total = {"__pyx_fuse_1mse_total", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_47mse_total, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_10mse_total};
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_47mse_total(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_I_n = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_W = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_I0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_di = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dj = { 0, 0, { 0 }, { 0 }, { 0 } };
  __pyx_t_5numpy_float32_t __pyx_v_ls;
  unsigned int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mse_total (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_I_n,&__pyx_n_s_W,&__pyx_n_s_I0,&__pyx_n_s_u,&__pyx_n_s_di,&__pyx_n_s_dj,&__pyx_n_s_ls,&__pyx_n_s_num_threads,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    __pyx_defaults23 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults23, __pyx_self);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 1); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 2); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 3); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_di)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 4); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dj)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 5); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ls)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, 6); __PYX_ERR(0, 786, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mse_total") < 0)) __PYX_ERR(0, 786, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_I_n = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I_n.memview)) __PYX_ERR(0, 786, __pyx_L3_error)
    __pyx_v_W = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_W.memview)) __PYX_ERR(0, 786, __pyx_L3_error)
    __pyx_v_I0 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I0.memview)) __PYX_ERR(0, 786, __pyx_L3_error)
    __pyx_v_u = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_nn___pyx_t_5numpy_float32_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u.memview)) __PYX_ERR(0, 787, __pyx_L3_error)
    __pyx_v_di = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_di.memview)) __PYX_ERR(0, 787, __pyx_L3_error)
    __pyx_v_dj = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5numpy_float32_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dj.memview)) __PYX_ERR(0, 787, __pyx_L3_error)
    __pyx_v_ls = __pyx_PyFloat_AsFloat(values[6]); if (unlikely((__pyx_v_ls == ((npy_float32)-1)) && PyErr_Occurred())) __PYX_ERR(0, 787, __pyx_L3_error)
    if (values[7]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_unsigned_int(values[7]); if (unlikely((__pyx_v_num_threads == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 787, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = __pyx_dynamic_args->__pyx_arg_num_threads;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mse_total", 0, 7, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 786, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.mse_total", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_46mse_total(__pyx_self, __pyx_v_I_n, __pyx_v_W, __pyx_v_I0, __pyx_v_u, __pyx_v_di, __pyx_v_dj, __pyx_v_ls, __pyx_v_num_threads);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_46mse_total(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_I_n, __Pyx_memviewslice __pyx_v_W, __Pyx_memviewslice __pyx_v_I0, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_di, __Pyx_memviewslice __pyx_v_dj, __pyx_t_5numpy_float32_t __pyx_v_ls, unsigned int __pyx_v_num_threads) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  npy_intp __pyx_v_c;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_t;
  __pyx_t_5numpy_float32_t __pyx_v_err;
  __pyx_t_5numpy_float32_t *__pyx_v_mptr;
  __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_1mse_total", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_AddTraceback("pyrost.bin.pyrost.mse_total", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I_n, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_W, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_I0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_di, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dj, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __pyx_t_3 = 0;
/* … */
  __pyx_tuple__35 = PyTuple_Pack(18, __pyx_n_s_I_n, __pyx_n_s_W, __pyx_n_s_I0, __pyx_n_s_u, __pyx_n_s_di, __pyx_n_s_dj, __pyx_n_s_ls, __pyx_n_s_num_threads, __pyx_n_s_dtype, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_c, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_t, __pyx_n_s_err, __pyx_n_s_mptr, __pyx_n_s_I); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_45mse_total, 0, __pyx_n_s_mse_total, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_2, sizeof(__pyx_defaults22), 0)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults22, __pyx_t_2)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_4);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_2, __pyx_pf_6pyrost_3bin_6pyrost_100__defaults__);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_float64_t, __pyx_t_2) < 0) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_47mse_total, 0, __pyx_n_s_mse_total, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_2, sizeof(__pyx_defaults23), 0)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_CyFunction_Defaults(__pyx_defaults23, __pyx_t_2)->__pyx_arg_num_threads = 1;
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_4);
  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_2, __pyx_pf_6pyrost_3bin_6pyrost_102__defaults__);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_float32_t, __pyx_t_2) < 0) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_mdef_6pyrost_3bin_6pyrost_11mse_total, 0, __pyx_n_s_mse_total, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_4);
  ((__pyx_FusedFunctionObject *) __pyx_t_2)->__signatures__ = __pyx_t_3;
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mse_total, __pyx_t_2) < 0) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(8, 0, 18, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyrost_bin_pyrost_pyx, __pyx_n_s_mse_total, 786, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 786, __pyx_L1_error)
+787:               float_t[:, :, ::1] u, float_t[::1] di, float_t[::1] dj, float_t ls, unsigned num_threads=1):
  __pyx_t_3 = __Pyx_PyInt_From_long(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
 788:     """Return the average total mean-squared-error (MSE).
 789: 
 790:     Parameters
 791:     ----------
 792:     I_n : numpy.ndarray
 793:         Measured intensity frames.
 794:     W : numpy.ndarray
 795:         Measured frames' whitefield.
 796:     I0 : numpy.ndarray
 797:         Reference image of the sample.
 798:     u : numpy.ndarray
 799:         The pixel mapping between the data at
 800:         the detector plane and the reference image at
 801:         the reference plane.
 802:     di : numpy.ndarray
 803:         Sample's translations along the slow detector axis
 804:         in pixels.
 805:     dj : numpy.ndarray
 806:         Sample's translations along the fast detector axis
 807:         in pixels.
 808:     ls : float
 809:         Reference image length scale in pixels.
 810:     num_threads : int, optional
 811:         Number of threads.
 812: 
 813:     Returns
 814:     -------
 815:     mse : float
 816:         Average total MSE.
 817: 
 818:     See Also
 819:     --------
 820:     update_translations_gs : Description of error metric which
 821:         is being minimized.
 822:     """
 823:     cdef:
+824:         str dtype = 'float64' if float_t is np.float64_t else 'float32'
  if ((1 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  if ((0 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+825:         np.npy_intp a = I_n.shape[0], b = I_n.shape[1], c = I_n.shape[2]
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
/* … */
  __pyx_v_a = (__pyx_v_I_n.shape[0]);
  __pyx_v_b = (__pyx_v_I_n.shape[1]);
  __pyx_v_c = (__pyx_v_I_n.shape[2]);
 826:         int j, k, t
+827:         float_t err = 0
  __pyx_v_err = 0.0;
/* … */
  __pyx_v_err = 0.0;
 828:         float_t *mptr
+829:         float_t[:, ::1] I = np.empty((num_threads, a + 1), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 829, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_I = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_num_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_a + 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 829, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_I = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+830:     with nogil, parallel(num_threads=num_threads):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_mptr)        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_mptr) num_threads(__pyx_v_num_threads)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_mptr = ((__pyx_t_5numpy_float64_t *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
/* … */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_mptr)        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_mptr) num_threads(__pyx_v_num_threads)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_mptr = ((__pyx_t_5numpy_float32_t *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+831:         mptr = <float_t *>malloc(3 * sizeof(float_t))
                __pyx_v_mptr = ((__pyx_t_5numpy_float64_t *)malloc((3 * (sizeof(__pyx_t_5numpy_float64_t)))));
/* … */
                __pyx_v_mptr = ((__pyx_t_5numpy_float32_t *)malloc((3 * (sizeof(__pyx_t_5numpy_float32_t)))));
+832:         if mptr is NULL:
                __pyx_t_6 = ((__pyx_v_mptr == NULL) != 0);
                if (__pyx_t_6) {
/* … */
                }
/* … */
                __pyx_t_6 = ((__pyx_v_mptr == NULL) != 0);
                if (__pyx_t_6) {
/* … */
                }
+833:             abort()
                  abort();
/* … */
                  abort();
+834:         mptr[2] = NO_VAR
                (__pyx_v_mptr[2]) = -1.0;
/* … */
                (__pyx_v_mptr[2]) = -1.0;
+835:         for k in prange(c, schedule='guided'):
                __pyx_t_7 = __pyx_v_c;
                if ((1 == 0)) abort();
                {
                    __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_9 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided)
                        #endif /* _OPENMP */
                        for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                            {
                                __pyx_v_k = (int)(0 + 1 * __pyx_t_8);
                                /* Initialize private variables to invalid values */
                                __pyx_v_j = ((int)0xbad0bad0);
                                __pyx_v_t = ((int)0xbad0bad0);
/* … */
                __pyx_t_7 = __pyx_v_c;
                if ((1 == 0)) abort();
                {
                    __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_9 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_j) firstprivate(__pyx_v_k) lastprivate(__pyx_v_k) lastprivate(__pyx_v_t) schedule(guided)
                        #endif /* _OPENMP */
                        for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8++){
                            {
                                __pyx_v_k = (int)(0 + 1 * __pyx_t_8);
                                /* Initialize private variables to invalid values */
                                __pyx_v_j = ((int)0xbad0bad0);
                                __pyx_v_t = ((int)0xbad0bad0);
+836:             t = openmp.omp_get_thread_num()
                                __pyx_v_t = omp_get_thread_num();
/* … */
                                __pyx_v_t = omp_get_thread_num();
+837:             for j in range(b):
                                __pyx_t_10 = __pyx_v_b;
                                __pyx_t_11 = __pyx_t_10;
                                for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                                  __pyx_v_j = __pyx_t_12;
/* … */
                                __pyx_t_10 = __pyx_v_b;
                                __pyx_t_11 = __pyx_t_10;
                                for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                                  __pyx_v_j = __pyx_t_12;
+838:                 krig_data_c(I[t], I_n, W, u, j, k, ls)
                                  __pyx_t_13.data = __pyx_v_I.data;
                                  __pyx_t_13.memview = __pyx_v_I.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_13, __pyx_v_I_n, __pyx_v_W, __pyx_v_u, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                  __pyx_t_13.memview = NULL;
                                  __pyx_t_13.data = NULL;
/* … */
                                  __pyx_t_13.data = __pyx_v_I.data;
                                  __pyx_t_13.memview = __pyx_v_I.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_krig_data_c(__pyx_t_13, __pyx_v_I_n, __pyx_v_W, __pyx_v_u, __pyx_v_j, __pyx_v_k, __pyx_v_ls);
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                  __pyx_t_13.memview = NULL;
                                  __pyx_t_13.data = NULL;
+839:                 mse_bi(mptr, I[t], I0, di, dj, u[0, j, k], u[1, j, k])
                                  __pyx_t_13.data = __pyx_v_I.data;
                                  __pyx_t_13.memview = __pyx_v_I.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_14 = 0;
                                  __pyx_t_15 = __pyx_v_j;
                                  __pyx_t_16 = __pyx_v_k;
                                  __pyx_t_17 = 1;
                                  __pyx_t_18 = __pyx_v_j;
                                  __pyx_t_19 = __pyx_v_k;
                                  __pyx_fuse_0__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr, __pyx_t_13, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_14 * __pyx_v_u.strides[0]) ) + __pyx_t_15 * __pyx_v_u.strides[1]) )) + __pyx_t_16)) ))), (*((__pyx_t_5numpy_float64_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_17 * __pyx_v_u.strides[0]) ) + __pyx_t_18 * __pyx_v_u.strides[1]) )) + __pyx_t_19)) ))));
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                  __pyx_t_13.memview = NULL;
                                  __pyx_t_13.data = NULL;
/* … */
                                  __pyx_t_13.data = __pyx_v_I.data;
                                  __pyx_t_13.memview = __pyx_v_I.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_t;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_I.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_I.shape[1];
__pyx_t_13.strides[0] = __pyx_v_I.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_14 = 0;
                                  __pyx_t_15 = __pyx_v_j;
                                  __pyx_t_16 = __pyx_v_k;
                                  __pyx_t_17 = 1;
                                  __pyx_t_18 = __pyx_v_j;
                                  __pyx_t_19 = __pyx_v_k;
                                  __pyx_fuse_1__pyx_f_6pyrost_3bin_6pyrost_mse_bi(__pyx_v_mptr, __pyx_t_13, __pyx_v_I0, __pyx_v_di, __pyx_v_dj, (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_14 * __pyx_v_u.strides[0]) ) + __pyx_t_15 * __pyx_v_u.strides[1]) )) + __pyx_t_16)) ))), (*((__pyx_t_5numpy_float32_t *) ( /* dim=2 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_u.data + __pyx_t_17 * __pyx_v_u.strides[0]) ) + __pyx_t_18 * __pyx_v_u.strides[1]) )) + __pyx_t_19)) ))));
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                  __pyx_t_13.memview = NULL;
                                  __pyx_t_13.data = NULL;
+840:                 err += mptr[0] / mptr[1]
                                  __pyx_v_err = (__pyx_v_err + ((__pyx_v_mptr[0]) / (__pyx_v_mptr[1])));
                                }
                            }
                        }
                    }
                }
/* … */
                                  __pyx_v_err = (__pyx_v_err + ((__pyx_v_mptr[0]) / (__pyx_v_mptr[1])));
                                }
                            }
                        }
                    }
                }
+841:         free(mptr)
                free(__pyx_v_mptr);
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
/* … */
                free(__pyx_v_mptr);
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+842:     return err / b / c
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_err / ((__pyx_t_5numpy_float64_t)__pyx_v_b)) / ((__pyx_t_5numpy_float64_t)__pyx_v_c))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
/* … */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_err / ((__pyx_t_5numpy_float32_t)__pyx_v_b)) / ((__pyx_t_5numpy_float32_t)__pyx_v_c))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 843: 
+844: def ct_integrate(float_t[:, ::1] sx_arr, float_t[:, ::1] sy_arr):
/* Python wrapper */
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_13ct_integrate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyrost_3bin_6pyrost_12ct_integrate[] = "ct_integrate(signatures, args, kwargs, defaults)\nPerform the Fourier Transform wavefront reconstruction [FTI]_\n    with antisymmetric derivative integration [ASDI]_.\n\n    Parameters\n    ----------\n    sx_arr : numpy.ndarray\n        Array of gradient values along the fast axis.\n\n    sy_arr : numpy.ndarray\n        Array of gradient values along the slow axis.\n\n    Returns\n    -------\n    w : numpy.ndarray\n        Reconstructed wavefront.\n\n    References\n    ----------\n    .. [FTI] C. Kottler, C. David, F. Pfeiffer, and O. Bunk,\n             \"A two-directional approach for grating based\n             differential phase contrast imaging using hard x-rays,\"\n             Opt. Express 15, 1175-1181 (2007).\n    .. [ASDI] Pierre Bon, Serge Monneret, and Benoit Wattellier,\n              \"Noniterative boundary-artifact-free wavefront\n              reconstruction from its derivatives,\" Appl. Opt. 51,\n              5698-5704 (2012).\n    ";
static PyMethodDef __pyx_mdef_6pyrost_3bin_6pyrost_13ct_integrate = {"ct_integrate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyrost_3bin_6pyrost_13ct_integrate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_12ct_integrate};
static PyObject *__pyx_pw_6pyrost_3bin_6pyrost_13ct_integrate(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;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 844, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 844, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 844, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 844, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_signatures = values[0];
    __pyx_v_args = values[1];
    __pyx_v_kwargs = values[2];
    __pyx_v_defaults = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 844, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_12ct_integrate(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_12ct_integrate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
  PyObject *__pyx_v_dest_sig = NULL;
  Py_ssize_t __pyx_v_i;
  PyTypeObject *__pyx_v_ndarray = 0;
  __Pyx_memviewslice __pyx_v_memslice;
  Py_ssize_t __pyx_v_itemsize;
  CYTHON_UNUSED int __pyx_v_dtype_signed;
  char __pyx_v_kind;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_dtype = NULL;
  PyObject *__pyx_v_arg_base = NULL;
  PyObject *__pyx_v_candidates = NULL;
  PyObject *__pyx_v_sig = NULL;
  int __pyx_v_match_found;
  PyObject *__pyx_v_src_sig = NULL;
  PyObject *__pyx_v_dst_type = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ct_integrate", 0);
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
  }
  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_itemsize = -1L;
  if (unlikely(__pyx_v_args == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 844, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 844, __pyx_L1_error)
  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 844, __pyx_L1_error)
    }
    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    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, 844, __pyx_L1_error)
  }
  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_sx_arr, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 844, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_sx_arr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_arg = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L6;
  }
  /*else*/ {
    if (unlikely(__pyx_v_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 844, __pyx_L1_error)
    }
    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 844, __pyx_L1_error)
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_int_2);
    __Pyx_GIVEREF(__pyx_int_2);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_2);
    __Pyx_INCREF(__pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_n_s_s);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 844, __pyx_L1_error)
  }
  __pyx_L6:;
  while (1) {
    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_dtype = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L12;
      }
      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_arg_base = __pyx_t_6;
        __pyx_t_6 = 0;
        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
        __pyx_t_2 = (__pyx_t_3 != 0);
        if (__pyx_t_2) {
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_v_dtype = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L13;
        }
        /*else*/ {
          __Pyx_INCREF(Py_None);
          __pyx_v_dtype = Py_None;
        }
        __pyx_L13:;
        goto __pyx_L12;
      }
      /*else*/ {
        __Pyx_INCREF(Py_None);
        __pyx_v_dtype = Py_None;
      }
      __pyx_L12:;
      __pyx_v_itemsize = -1L;
      __pyx_t_2 = (__pyx_v_dtype != Py_None);
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_itemsize = __pyx_t_5;
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_v_kind = __pyx_t_7;
        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
        switch (__pyx_v_kind) {
          case 'i':
          case 'u':
          break;
          case 'f':
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L16_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 844, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L16_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_3 = __pyx_t_2;
            goto __pyx_L19_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 844, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
          __pyx_t_3 = __pyx_t_2;
          __pyx_L19_bool_binop_done:;
          if (__pyx_t_3) {
            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
            goto __pyx_L10_break;
          }
          break;
          case 'c':
          break;
          case 'O':
          break;
          default: break;
        }
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L22_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L22_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L26_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L26_bool_binop_done:;
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); 
      __pyx_v_memslice = __pyx_t_8;
      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
      if (__pyx_t_3) {
        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
        goto __pyx_L10_break;
      }
      /*else*/ {
        PyErr_Clear(); 
      }
    }
    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
    goto __pyx_L10_break;
  }
  __pyx_L10_break:;
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_signatures == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 844, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __pyx_t_6 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_v_match_found = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 844, __pyx_L1_error)
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_i = __pyx_t_17;
      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (__pyx_t_2) {
          __pyx_v_match_found = 1;
          goto __pyx_L34;
        }
        /*else*/ {
          __pyx_v_match_found = 0;
          goto __pyx_L32_break;
        }
        __pyx_L34:;
      }
    }
    __pyx_L32_break:;
    __pyx_t_2 = (__pyx_v_match_found != 0);
    if (__pyx_t_2) {
      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 844, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
  __pyx_t_3 = ((!__pyx_t_2) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 844, __pyx_L1_error)
  }
  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 844, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(0, 844, __pyx_L1_error)
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_signatures == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 844, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyrost.bin.pyrost.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dest_sig);
  __Pyx_XDECREF(__pyx_v_ndarray);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_arg_base);
  __Pyx_XDECREF(__pyx_v_candidates);
  __Pyx_XDECREF(__pyx_v_sig);
  __Pyx_XDECREF(__pyx_v_src_sig);
  __Pyx_XDECREF(__pyx_v_dst_type);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_51ct_integrate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_51ct_integrate = {"__pyx_fuse_0ct_integrate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_51ct_integrate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_12ct_integrate};
static PyObject *__pyx_fuse_0__pyx_pw_6pyrost_3bin_6pyrost_51ct_integrate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_sx_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_sy_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ct_integrate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sx_arr,&__pyx_n_s_sy_arr,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sx_arr)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sy_arr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ct_integrate", 1, 2, 2, 1); __PYX_ERR(0, 844, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ct_integrate") < 0)) __PYX_ERR(0, 844, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sx_arr = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sx_arr.memview)) __PYX_ERR(0, 844, __pyx_L3_error)
    __pyx_v_sy_arr = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sy_arr.memview)) __PYX_ERR(0, 844, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ct_integrate", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 844, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.ct_integrate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_50ct_integrate(__pyx_self, __pyx_v_sx_arr, __pyx_v_sy_arr);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_50ct_integrate(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_sx_arr, __Pyx_memviewslice __pyx_v_sy_arr) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  int __pyx_v_i;
  int __pyx_v_j;
  __Pyx_memviewslice __pyx_v_s_asdi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_sf_asdi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __pyx_t_5numpy_float64_t __pyx_v_xf;
  __pyx_t_5numpy_float64_t __pyx_v_yf;
  PyArrayObject *__pyx_v_sfx_asdi = 0;
  PyArrayObject *__pyx_v_sfy_asdi = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_sfx_asdi;
  __Pyx_Buffer __pyx_pybuffer_sfx_asdi;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_sfy_asdi;
  __Pyx_Buffer __pyx_pybuffer_sfy_asdi;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_0ct_integrate", 0);
  __pyx_pybuffer_sfx_asdi.pybuffer.buf = NULL;
  __pyx_pybuffer_sfx_asdi.refcount = 0;
  __pyx_pybuffernd_sfx_asdi.data = NULL;
  __pyx_pybuffernd_sfx_asdi.rcbuffer = &__pyx_pybuffer_sfx_asdi;
  __pyx_pybuffer_sfy_asdi.pybuffer.buf = NULL;
  __pyx_pybuffer_sfy_asdi.refcount = 0;
  __pyx_pybuffernd_sfy_asdi.data = NULL;
  __pyx_pybuffernd_sfy_asdi.rcbuffer = &__pyx_pybuffer_sfy_asdi;
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_XDECREF(__pyx_t_27);
  { 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_sfx_asdi.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("pyrost.bin.pyrost.ct_integrate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_s_asdi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sf_asdi, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_sfx_asdi);
  __Pyx_XDECREF((PyObject *)__pyx_v_sfy_asdi);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sx_arr, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sy_arr, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_53ct_integrate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_53ct_integrate = {"__pyx_fuse_1ct_integrate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_53ct_integrate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6pyrost_3bin_6pyrost_12ct_integrate};
static PyObject *__pyx_fuse_1__pyx_pw_6pyrost_3bin_6pyrost_53ct_integrate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_sx_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_sy_arr = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ct_integrate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sx_arr,&__pyx_n_s_sy_arr,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sx_arr)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sy_arr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ct_integrate", 1, 2, 2, 1); __PYX_ERR(0, 844, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ct_integrate") < 0)) __PYX_ERR(0, 844, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sx_arr = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sx_arr.memview)) __PYX_ERR(0, 844, __pyx_L3_error)
    __pyx_v_sy_arr = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sy_arr.memview)) __PYX_ERR(0, 844, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ct_integrate", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 844, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyrost.bin.pyrost.ct_integrate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyrost_3bin_6pyrost_52ct_integrate(__pyx_self, __pyx_v_sx_arr, __pyx_v_sy_arr);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_6pyrost_3bin_6pyrost_52ct_integrate(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_sx_arr, __Pyx_memviewslice __pyx_v_sy_arr) {
  PyObject *__pyx_v_dtype = 0;
  npy_intp __pyx_v_a;
  npy_intp __pyx_v_b;
  int __pyx_v_i;
  int __pyx_v_j;
  __Pyx_memviewslice __pyx_v_s_asdi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_sf_asdi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __pyx_t_5numpy_float32_t __pyx_v_xf;
  __pyx_t_5numpy_float32_t __pyx_v_yf;
  PyArrayObject *__pyx_v_sfx_asdi = 0;
  PyArrayObject *__pyx_v_sfy_asdi = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_sfx_asdi;
  __Pyx_Buffer __pyx_pybuffer_sfx_asdi;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_sfy_asdi;
  __Pyx_Buffer __pyx_pybuffer_sfy_asdi;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_fuse_1ct_integrate", 0);
  __pyx_pybuffer_sfx_asdi.pybuffer.buf = NULL;
  __pyx_pybuffer_sfx_asdi.refcount = 0;
  __pyx_pybuffernd_sfx_asdi.data = NULL;
  __pyx_pybuffernd_sfx_asdi.rcbuffer = &__pyx_pybuffer_sfx_asdi;
  __pyx_pybuffer_sfy_asdi.pybuffer.buf = NULL;
  __pyx_pybuffer_sfy_asdi.refcount = 0;
  __pyx_pybuffernd_sfy_asdi.data = NULL;
  __pyx_pybuffernd_sfy_asdi.rcbuffer = &__pyx_pybuffer_sfy_asdi;
/* … */
  /* 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_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_XDECREF(__pyx_t_25);
  { 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_sfx_asdi.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("pyrost.bin.pyrost.ct_integrate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __PYX_XDEC_MEMVIEW(&__pyx_v_s_asdi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sf_asdi, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_sfx_asdi);
  __Pyx_XDECREF((PyObject *)__pyx_v_sfy_asdi);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sx_arr, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sy_arr, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__37 = PyTuple_Pack(15, __pyx_n_s_sx_arr, __pyx_n_s_sy_arr, __pyx_n_s_dtype, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_s_asdi, __pyx_n_s_sf_asdi, __pyx_n_s_xf, __pyx_n_s_yf, __pyx_n_s_sfx_asdi, __pyx_n_s_sfy_asdi); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__37);
  __Pyx_GIVEREF(__pyx_tuple__37);
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_6pyrost_3bin_6pyrost_51ct_integrate, 0, __pyx_n_s_ct_integrate, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_float64_t, __pyx_t_2) < 0) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_6pyrost_3bin_6pyrost_53ct_integrate, 0, __pyx_n_s_ct_integrate, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_float32_t, __pyx_t_2) < 0) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_FusedFunction_New(&__pyx_mdef_6pyrost_3bin_6pyrost_13ct_integrate, 0, __pyx_n_s_ct_integrate, NULL, __pyx_n_s_pyrost_bin_pyrost, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
  ((__pyx_FusedFunctionObject *) __pyx_t_2)->__signatures__ = __pyx_t_4;
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ct_integrate, __pyx_t_2) < 0) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(2, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyrost_bin_pyrost_pyx, __pyx_n_s_ct_integrate, 844, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 844, __pyx_L1_error)
 845:     """Perform the Fourier Transform wavefront reconstruction [FTI]_
 846:     with antisymmetric derivative integration [ASDI]_.
 847: 
 848:     Parameters
 849:     ----------
 850:     sx_arr : numpy.ndarray
 851:         Array of gradient values along the fast axis.
 852: 
 853:     sy_arr : numpy.ndarray
 854:         Array of gradient values along the slow axis.
 855: 
 856:     Returns
 857:     -------
 858:     w : numpy.ndarray
 859:         Reconstructed wavefront.
 860: 
 861:     References
 862:     ----------
 863:     .. [FTI] C. Kottler, C. David, F. Pfeiffer, and O. Bunk,
 864:              "A two-directional approach for grating based
 865:              differential phase contrast imaging using hard x-rays,"
 866:              Opt. Express 15, 1175-1181 (2007).
 867:     .. [ASDI] Pierre Bon, Serge Monneret, and Benoit Wattellier,
 868:               "Noniterative boundary-artifact-free wavefront
 869:               reconstruction from its derivatives," Appl. Opt. 51,
 870:               5698-5704 (2012).
 871:     """
 872:     cdef:
+873:         str dtype = 'float64' if float_t is np.float64_t else 'float32'
  if ((1 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  if ((0 != 0)) {
    __Pyx_INCREF(__pyx_n_u_float64);
    __pyx_t_1 = __pyx_n_u_float64;
  } else {
    __Pyx_INCREF(__pyx_n_u_float32);
    __pyx_t_1 = __pyx_n_u_float32;
  }
  __pyx_v_dtype = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+874:         np.npy_intp a = sx_arr.shape[0], b = sx_arr.shape[1]
  __pyx_v_a = (__pyx_v_sx_arr.shape[0]);
  __pyx_v_b = (__pyx_v_sx_arr.shape[1]);
/* … */
  __pyx_v_a = (__pyx_v_sx_arr.shape[0]);
  __pyx_v_b = (__pyx_v_sx_arr.shape[1]);
 875:         int i, j, ii, jj
+876:         float_t[:, ::1] s_asdi = np.empty((2 * a, 2 * b), dtype=dtype)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_long((2 * __pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_long((2 * __pyx_v_b)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 876, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_s_asdi = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_long((2 * __pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_long((2 * __pyx_v_b)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 876, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_nn___pyx_t_5numpy_float32_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 876, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_s_asdi = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+877:         complex_t[:, ::1] sf_asdi = np.empty((2 * a, 2 * b), dtype='complex128')
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_long((2 * __pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_long((2 * __pyx_v_b)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_n_u_complex128) < 0) __PYX_ERR(0, 877, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc___pyx_t_double_complex(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_sf_asdi = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_long((2 * __pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_long((2 * __pyx_v_b)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_n_u_complex128) < 0) __PYX_ERR(0, 877, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc___pyx_t_double_complex(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_sf_asdi = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
 878:         float_t xf, yf
+879:     for i in range(a):
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
/* … */
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+880:         for j in range(b):
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
/* … */
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
+881:             s_asdi[i, j] = -sx_arr[a - i - 1, b - j - 1]
      __pyx_t_13 = ((__pyx_v_a - __pyx_v_i) - 1);
      __pyx_t_14 = ((__pyx_v_b - __pyx_v_j) - 1);
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_16 = __pyx_v_j;
      *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_15 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_16)) )) = (-(*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_sx_arr.data + __pyx_t_13 * __pyx_v_sx_arr.strides[0]) )) + __pyx_t_14)) ))));
    }
  }
/* … */
      __pyx_t_13 = ((__pyx_v_a - __pyx_v_i) - 1);
      __pyx_t_14 = ((__pyx_v_b - __pyx_v_j) - 1);
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_16 = __pyx_v_j;
      *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_15 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_16)) )) = (-(*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_sx_arr.data + __pyx_t_13 * __pyx_v_sx_arr.strides[0]) )) + __pyx_t_14)) ))));
    }
  }
+882:     for i in range(a):
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
/* … */
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+883:         for j in range(b):
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
/* … */
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
+884:             s_asdi[i + a, j] = sx_arr[i, b - j - 1]
      __pyx_t_14 = __pyx_v_i;
      __pyx_t_13 = ((__pyx_v_b - __pyx_v_j) - 1);
      __pyx_t_16 = (__pyx_v_i + __pyx_v_a);
      __pyx_t_15 = __pyx_v_j;
      *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_16 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_15)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_sx_arr.data + __pyx_t_14 * __pyx_v_sx_arr.strides[0]) )) + __pyx_t_13)) )));
    }
  }
/* … */
      __pyx_t_14 = __pyx_v_i;
      __pyx_t_13 = ((__pyx_v_b - __pyx_v_j) - 1);
      __pyx_t_16 = (__pyx_v_i + __pyx_v_a);
      __pyx_t_15 = __pyx_v_j;
      *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_16 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_15)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_sx_arr.data + __pyx_t_14 * __pyx_v_sx_arr.strides[0]) )) + __pyx_t_13)) )));
    }
  }
+885:     for i in range(a):
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
/* … */
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+886:         for j in range(b):
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
/* … */
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
+887:             s_asdi[i, j + b] = -sx_arr[a - i - 1, j]
      __pyx_t_13 = ((__pyx_v_a - __pyx_v_i) - 1);
      __pyx_t_14 = __pyx_v_j;
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_16 = (__pyx_v_j + __pyx_v_b);
      *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_15 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_16)) )) = (-(*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_sx_arr.data + __pyx_t_13 * __pyx_v_sx_arr.strides[0]) )) + __pyx_t_14)) ))));
    }
  }
/* … */
      __pyx_t_13 = ((__pyx_v_a - __pyx_v_i) - 1);
      __pyx_t_14 = __pyx_v_j;
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_16 = (__pyx_v_j + __pyx_v_b);
      *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_15 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_16)) )) = (-(*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_sx_arr.data + __pyx_t_13 * __pyx_v_sx_arr.strides[0]) )) + __pyx_t_14)) ))));
    }
  }
+888:     for i in range(a):
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
/* … */
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+889:         for j in range(b):
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
/* … */
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
+890:             s_asdi[i + a, j + b] = sx_arr[i, j]
      __pyx_t_14 = __pyx_v_i;
      __pyx_t_13 = __pyx_v_j;
      __pyx_t_16 = (__pyx_v_i + __pyx_v_a);
      __pyx_t_15 = (__pyx_v_j + __pyx_v_b);
      *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_16 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_15)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_sx_arr.data + __pyx_t_14 * __pyx_v_sx_arr.strides[0]) )) + __pyx_t_13)) )));
    }
  }
/* … */
      __pyx_t_14 = __pyx_v_i;
      __pyx_t_13 = __pyx_v_j;
      __pyx_t_16 = (__pyx_v_i + __pyx_v_a);
      __pyx_t_15 = (__pyx_v_j + __pyx_v_b);
      *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_16 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_15)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_sx_arr.data + __pyx_t_14 * __pyx_v_sx_arr.strides[0]) )) + __pyx_t_13)) )));
    }
  }
+891:     cdef np.ndarray[np.complex128_t, ndim=2] sfx_asdi = np.fft.fft2(s_asdi)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fft); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_fft2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_s_asdi, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 891, __pyx_L1_error)
  __pyx_t_17 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_sfx_asdi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 891, __pyx_L1_error)
    } else {__pyx_pybuffernd_sfx_asdi.diminfo[0].strides = __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sfx_asdi.diminfo[0].shape = __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_sfx_asdi.diminfo[1].strides = __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_sfx_asdi.diminfo[1].shape = __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_17 = 0;
  __pyx_v_sfx_asdi = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fft); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_fft2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_s_asdi, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float32_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float32_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 891, __pyx_L1_error)
  __pyx_t_17 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_sfx_asdi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 891, __pyx_L1_error)
    } else {__pyx_pybuffernd_sfx_asdi.diminfo[0].strides = __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sfx_asdi.diminfo[0].shape = __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_sfx_asdi.diminfo[1].strides = __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_sfx_asdi.diminfo[1].shape = __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_17 = 0;
  __pyx_v_sfx_asdi = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+892:     for i in range(a):
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
/* … */
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+893:         for j in range(b):
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
/* … */
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
+894:             s_asdi[i, j] = -sy_arr[a - i - 1, b - j - 1]
      __pyx_t_13 = ((__pyx_v_a - __pyx_v_i) - 1);
      __pyx_t_14 = ((__pyx_v_b - __pyx_v_j) - 1);
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_16 = __pyx_v_j;
      *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_15 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_16)) )) = (-(*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_sy_arr.data + __pyx_t_13 * __pyx_v_sy_arr.strides[0]) )) + __pyx_t_14)) ))));
    }
  }
/* … */
      __pyx_t_13 = ((__pyx_v_a - __pyx_v_i) - 1);
      __pyx_t_14 = ((__pyx_v_b - __pyx_v_j) - 1);
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_16 = __pyx_v_j;
      *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_15 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_16)) )) = (-(*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_sy_arr.data + __pyx_t_13 * __pyx_v_sy_arr.strides[0]) )) + __pyx_t_14)) ))));
    }
  }
+895:     for i in range(a):
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
/* … */
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+896:         for j in range(b):
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
/* … */
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
+897:             s_asdi[i + a, j] = -sy_arr[i, b - j - 1]
      __pyx_t_14 = __pyx_v_i;
      __pyx_t_13 = ((__pyx_v_b - __pyx_v_j) - 1);
      __pyx_t_16 = (__pyx_v_i + __pyx_v_a);
      __pyx_t_15 = __pyx_v_j;
      *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_16 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_15)) )) = (-(*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_sy_arr.data + __pyx_t_14 * __pyx_v_sy_arr.strides[0]) )) + __pyx_t_13)) ))));
    }
  }
/* … */
      __pyx_t_14 = __pyx_v_i;
      __pyx_t_13 = ((__pyx_v_b - __pyx_v_j) - 1);
      __pyx_t_16 = (__pyx_v_i + __pyx_v_a);
      __pyx_t_15 = __pyx_v_j;
      *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_16 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_15)) )) = (-(*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_sy_arr.data + __pyx_t_14 * __pyx_v_sy_arr.strides[0]) )) + __pyx_t_13)) ))));
    }
  }
+898:     for i in range(a):
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
/* … */
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+899:         for j in range(b):
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
/* … */
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
+900:             s_asdi[i, j + b] = sy_arr[a - i - 1, j]
      __pyx_t_13 = ((__pyx_v_a - __pyx_v_i) - 1);
      __pyx_t_14 = __pyx_v_j;
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_16 = (__pyx_v_j + __pyx_v_b);
      *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_15 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_sy_arr.data + __pyx_t_13 * __pyx_v_sy_arr.strides[0]) )) + __pyx_t_14)) )));
    }
  }
/* … */
      __pyx_t_13 = ((__pyx_v_a - __pyx_v_i) - 1);
      __pyx_t_14 = __pyx_v_j;
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_16 = (__pyx_v_j + __pyx_v_b);
      *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_15 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_16)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_sy_arr.data + __pyx_t_13 * __pyx_v_sy_arr.strides[0]) )) + __pyx_t_14)) )));
    }
  }
+901:     for i in range(a):
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
/* … */
  __pyx_t_7 = __pyx_v_a;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+902:         for j in range(b):
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
/* … */
    __pyx_t_10 = __pyx_v_b;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
+903:             s_asdi[i + a, j + b] = sy_arr[i, j]
      __pyx_t_14 = __pyx_v_i;
      __pyx_t_13 = __pyx_v_j;
      __pyx_t_16 = (__pyx_v_i + __pyx_v_a);
      __pyx_t_15 = (__pyx_v_j + __pyx_v_b);
      *((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_16 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_15)) )) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_sy_arr.data + __pyx_t_14 * __pyx_v_sy_arr.strides[0]) )) + __pyx_t_13)) )));
    }
  }
/* … */
      __pyx_t_14 = __pyx_v_i;
      __pyx_t_13 = __pyx_v_j;
      __pyx_t_16 = (__pyx_v_i + __pyx_v_a);
      __pyx_t_15 = (__pyx_v_j + __pyx_v_b);
      *((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_s_asdi.data + __pyx_t_16 * __pyx_v_s_asdi.strides[0]) )) + __pyx_t_15)) )) = (*((__pyx_t_5numpy_float32_t *) ( /* dim=1 */ ((char *) (((__pyx_t_5numpy_float32_t *) ( /* dim=0 */ (__pyx_v_sy_arr.data + __pyx_t_14 * __pyx_v_sy_arr.strides[0]) )) + __pyx_t_13)) )));
    }
  }
+904:     cdef np.ndarray[np.complex128_t, ndim=2] sfy_asdi = np.fft.fft2(s_asdi)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fft); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_fft2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_s_asdi, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 904, __pyx_L1_error)
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_sfy_asdi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 904, __pyx_L1_error)
    } else {__pyx_pybuffernd_sfy_asdi.diminfo[0].strides = __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sfy_asdi.diminfo[0].shape = __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_sfy_asdi.diminfo[1].strides = __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_sfy_asdi.diminfo[1].shape = __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_18 = 0;
  __pyx_v_sfy_asdi = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fft); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_fft2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_s_asdi, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float32_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float32_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 904, __pyx_L1_error)
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_sfy_asdi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 904, __pyx_L1_error)
    } else {__pyx_pybuffernd_sfy_asdi.diminfo[0].strides = __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sfy_asdi.diminfo[0].shape = __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_sfy_asdi.diminfo[1].strides = __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_sfy_asdi.diminfo[1].shape = __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_18 = 0;
  __pyx_v_sfy_asdi = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+905:     for i in range(2 * a):
  __pyx_t_19 = (2 * __pyx_v_a);
  __pyx_t_20 = __pyx_t_19;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_20; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
/* … */
  __pyx_t_19 = (2 * __pyx_v_a);
  __pyx_t_20 = __pyx_t_19;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_20; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+906:         xf = <float_t>(i) / 2 / a - i // a
    __pyx_v_xf = (((((__pyx_t_5numpy_float64_t)__pyx_v_i) / 2.0) / ((__pyx_t_5numpy_float64_t)__pyx_v_a)) - (__pyx_v_i / __pyx_v_a));
/* … */
    __pyx_v_xf = (((((__pyx_t_5numpy_float32_t)__pyx_v_i) / 2.0) / ((__pyx_t_5numpy_float32_t)__pyx_v_a)) - (__pyx_v_i / __pyx_v_a));
+907:         for j in range(2 * b):
    __pyx_t_21 = (2 * __pyx_v_b);
    __pyx_t_22 = __pyx_t_21;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_22; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
/* … */
    __pyx_t_21 = (2 * __pyx_v_b);
    __pyx_t_22 = __pyx_t_21;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_22; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;
+908:             yf = <float_t>(j) / 2 / b - j // b
      __pyx_v_yf = (((((__pyx_t_5numpy_float64_t)__pyx_v_j) / 2.0) / ((__pyx_t_5numpy_float64_t)__pyx_v_b)) - (__pyx_v_j / __pyx_v_b));
/* … */
      __pyx_v_yf = (((((__pyx_t_5numpy_float32_t)__pyx_v_j) / 2.0) / ((__pyx_t_5numpy_float32_t)__pyx_v_b)) - (__pyx_v_j / __pyx_v_b));
+909:             sf_asdi[i, j] = (xf * sfx_asdi[i, j] + yf * sfy_asdi[i, j]) / (2j * pi * (xf**2 + yf**2))
      __pyx_t_13 = __pyx_v_i;
      __pyx_t_14 = __pyx_v_j;
      __pyx_t_23 = (*__Pyx_BufPtrStrided2d(__pyx_t_double_complex *, __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_sfx_asdi.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_sfx_asdi.diminfo[1].strides));
      __pyx_t_14 = __pyx_v_i;
      __pyx_t_13 = __pyx_v_j;
      __pyx_t_24 = (*__Pyx_BufPtrStrided2d(__pyx_t_double_complex *, __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_sfy_asdi.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_sfy_asdi.diminfo[1].strides));
      __pyx_t_25 = __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0, 2.0), __pyx_t_double_complex_from_parts(M_PI, 0));
      __pyx_t_26 = __Pyx_c_quot_npy_float64(__Pyx_c_sum_npy_float64(__Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__pyx_v_xf, 0), __pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_23), __Pyx_CIMAG(__pyx_t_23))), __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__pyx_v_yf, 0), __pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_24), __Pyx_CIMAG(__pyx_t_24)))), __Pyx_c_prod_npy_float64(__pyx_t_npy_float64_complex_from_parts(__Pyx_CREAL(__pyx_t_25), __Pyx_CIMAG(__pyx_t_25)), __pyx_t_npy_float64_complex_from_parts((pow(__pyx_v_xf, 2.0) + pow(__pyx_v_yf, 2.0)), 0)));
      __pyx_t_13 = __pyx_v_i;
      __pyx_t_14 = __pyx_v_j;
      *((__pyx_t_double_complex *) ( /* dim=1 */ ((char *) (((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_sf_asdi.data + __pyx_t_13 * __pyx_v_sf_asdi.strides[0]) )) + __pyx_t_14)) )) = __pyx_t_double_complex_from_parts(__Pyx_CREAL(__pyx_t_26), __Pyx_CIMAG(__pyx_t_26));
    }
  }
/* … */
      __pyx_t_13 = __pyx_v_i;
      __pyx_t_14 = __pyx_v_j;
      __pyx_t_15 = __pyx_v_i;
      __pyx_t_16 = __pyx_v_j;
      __pyx_t_23 = __pyx_v_i;
      __pyx_t_24 = __pyx_v_j;
      *((__pyx_t_double_complex *) ( /* dim=1 */ ((char *) (((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_sf_asdi.data + __pyx_t_23 * __pyx_v_sf_asdi.strides[0]) )) + __pyx_t_24)) )) = __Pyx_c_quot_double(__Pyx_c_sum_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v_xf, 0), (*__Pyx_BufPtrStrided2d(__pyx_t_double_complex *, __pyx_pybuffernd_sfx_asdi.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_sfx_asdi.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_sfx_asdi.diminfo[1].strides))), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v_yf, 0), (*__Pyx_BufPtrStrided2d(__pyx_t_double_complex *, __pyx_pybuffernd_sfy_asdi.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_sfy_asdi.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_sfy_asdi.diminfo[1].strides)))), __Pyx_c_prod_double(__Pyx_c_prod_double(__pyx_t_double_complex_from_parts(0, 2.0), __pyx_t_double_complex_from_parts(M_PI, 0)), __pyx_t_double_complex_from_parts((powf(__pyx_v_xf, 2.0) + powf(__pyx_v_yf, 2.0)), 0)));
    }
  }
+910:     sf_asdi[0, 0] = 0
  __pyx_t_14 = 0;
  __pyx_t_13 = 0;
  *((__pyx_t_double_complex *) ( /* dim=1 */ ((char *) (((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_sf_asdi.data + __pyx_t_14 * __pyx_v_sf_asdi.strides[0]) )) + __pyx_t_13)) )) = __pyx_t_double_complex_from_parts(0, 0);
/* … */
  __pyx_t_16 = 0;
  __pyx_t_15 = 0;
  *((__pyx_t_double_complex *) ( /* dim=1 */ ((char *) (((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_sf_asdi.data + __pyx_t_16 * __pyx_v_sf_asdi.strides[0]) )) + __pyx_t_15)) )) = __pyx_t_double_complex_from_parts(0, 0);
+911:     return np.asarray(np.fft.ifft2(sf_asdi).real[a:, b:], dtype=dtype)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_fft); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ifft2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_sf_asdi, 2, (PyObject *(*)(char *)) __pyx_memview_get___pyx_t_double_complex, (int (*)(char *, PyObject *)) __pyx_memview_set___pyx_t_double_complex, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_27 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_27)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_27);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_27) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_27, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_real); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_a); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PySlice_New(__pyx_t_1, Py_None, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_27 = PySlice_New(__pyx_t_1, Py_None, Py_None); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_27);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_27);
  __pyx_t_4 = 0;
  __pyx_t_27 = 0;
  __pyx_t_27 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_27);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_27);
  __pyx_t_27 = 0;
  __pyx_t_27 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  if (PyDict_SetItem(__pyx_t_27, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 911, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_27); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
/* … */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_fft); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ifft2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_sf_asdi, 2, (PyObject *(*)(char *)) __pyx_memview_get___pyx_t_double_complex, (int (*)(char *, PyObject *)) __pyx_memview_set___pyx_t_double_complex, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_25 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_25 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_25)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_25);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_25) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_25, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_real); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_a); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PySlice_New(__pyx_t_1, Py_None, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_b); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_25 = PySlice_New(__pyx_t_1, Py_None, Py_None); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_25);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_25);
  __pyx_t_4 = 0;
  __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_25);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_25);
  __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (PyDict_SetItem(__pyx_t_25, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 911, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_25); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;