Generated by Cython 0.15.1 on Tue Jan 31 14:40:24 2012

Raw output: pairwise.c

 1: import numpy
  /* "vision/track/pairwise.pyx":1
 * import numpy             # <<<<<<<<<<<<<<
 * cimport numpy
 * 
 */
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__numpy, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "vision/track/pairwise.pyx":1
 * import numpy             # <<<<<<<<<<<<<<
 * cimport numpy
 * 
 */
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
 2: cimport numpy
 3: 
 4: cdef double Infinity = 1e300
  /* "vision/track/pairwise.pyx":4
 * cimport numpy
 * 
 * cdef double Infinity = 1e300             # <<<<<<<<<<<<<<
 * 
 * cdef extern from "math.h":
 */
  __pyx_v_6vision_5track_8pairwise_Infinity = 1e300;
 5: 
 6: cdef extern from "math.h":
 7:     float exp(float n)
 8: 
 9: # see Pedro Felzenszwalb et. al
 10: cpdef quadratic_1d(numpy.ndarray[numpy.double_t, ndim=1] src,
/* "vision/track/pairwise.pyx":10
 * 
 * # see Pedro Felzenszwalb et. al
 * cpdef quadratic_1d(numpy.ndarray[numpy.double_t, ndim=1] src,             # <<<<<<<<<<<<<<
 *                             numpy.ndarray[numpy.double_t, ndim=1] dst,
 *                             numpy.ndarray[numpy.int_t, ndim=1] ptr,
 */

static PyObject *__pyx_pf_6vision_5track_8pairwise_quadratic_1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6vision_5track_8pairwise_quadratic_1d(PyArrayObject *__pyx_v_src, PyArrayObject *__pyx_v_dst, PyArrayObject *__pyx_v_ptr, int __pyx_v_step, int __pyx_v_n, double __pyx_v_a, double __pyx_v_b, int __pyx_v_o, int __pyx_skip_dispatch) {
  PyArrayObject *__pyx_v_v = 0;
  PyArrayObject *__pyx_v_z = 0;
  int __pyx_v_k;
  int __pyx_v_q;
  double __pyx_v_s;
  Py_buffer __pyx_bstruct_src;
  Py_ssize_t __pyx_bstride_0_src = 0;
  Py_ssize_t __pyx_bshape_0_src = 0;
  Py_buffer __pyx_bstruct_dst;
  Py_ssize_t __pyx_bstride_0_dst = 0;
  Py_ssize_t __pyx_bshape_0_dst = 0;
  Py_buffer __pyx_bstruct_v;
  Py_ssize_t __pyx_bstride_0_v = 0;
  Py_ssize_t __pyx_bshape_0_v = 0;
  Py_buffer __pyx_bstruct_z;
  Py_ssize_t __pyx_bstride_0_z = 0;
  Py_ssize_t __pyx_bshape_0_z = 0;
  Py_buffer __pyx_bstruct_ptr;
  Py_ssize_t __pyx_bstride_0_ptr = 0;
  Py_ssize_t __pyx_bshape_0_ptr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("quadratic_1d");
  __pyx_bstruct_v.buf = NULL;
  __pyx_bstruct_z.buf = NULL;
  __pyx_bstruct_src.buf = NULL;
  __pyx_bstruct_dst.buf = NULL;
  __pyx_bstruct_ptr.buf = NULL;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_src, (PyObject*)__pyx_v_src, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_src = __pyx_bstruct_src.strides[0];
  __pyx_bshape_0_src = __pyx_bstruct_src.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_dst, (PyObject*)__pyx_v_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_dst = __pyx_bstruct_dst.strides[0];
  __pyx_bshape_0_dst = __pyx_bstruct_dst.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_ptr, (PyObject*)__pyx_v_ptr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_ptr = __pyx_bstruct_ptr.strides[0];
  __pyx_bshape_0_ptr = __pyx_bstruct_ptr.shape[0];

/* "vision/track/pairwise.pyx":10
 * 
 * # see Pedro Felzenszwalb et. al
 * cpdef quadratic_1d(numpy.ndarray[numpy.double_t, ndim=1] src,             # <<<<<<<<<<<<<<
 *                             numpy.ndarray[numpy.double_t, ndim=1] dst,
 *                             numpy.ndarray[numpy.int_t, ndim=1] ptr,
 */

static PyObject *__pyx_pf_6vision_5track_8pairwise_quadratic_1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6vision_5track_8pairwise_quadratic_1d[] = "quadratic_1d(ndarray src, ndarray dst, ndarray ptr, int step, int n, double a, double b, int o)";
static PyObject *__pyx_pf_6vision_5track_8pairwise_quadratic_1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_src = 0;
  PyArrayObject *__pyx_v_dst = 0;
  PyArrayObject *__pyx_v_ptr = 0;
  int __pyx_v_step;
  int __pyx_v_n;
  double __pyx_v_a;
  double __pyx_v_b;
  int __pyx_v_o;
  Py_buffer __pyx_bstruct_src;
  Py_ssize_t __pyx_bstride_0_src = 0;
  Py_ssize_t __pyx_bshape_0_src = 0;
  Py_buffer __pyx_bstruct_dst;
  Py_ssize_t __pyx_bstride_0_dst = 0;
  Py_ssize_t __pyx_bshape_0_dst = 0;
  Py_buffer __pyx_bstruct_ptr;
  Py_ssize_t __pyx_bstride_0_ptr = 0;
  Py_ssize_t __pyx_bshape_0_ptr = 0;
  PyObject *__pyx_r = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__src,&__pyx_n_s__dst,&__pyx_n_s__ptr,&__pyx_n_s__step,&__pyx_n_s__n,&__pyx_n_s__a,&__pyx_n_s__b,&__pyx_n_s__o,0};
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("quadratic_1d");
  __pyx_self = __pyx_self;
  {
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  0:
        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__src);
        if (likely(values[0])) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dst);
        if (likely(values[1])) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("quadratic_1d", 1, 8, 8, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  2:
        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ptr);
        if (likely(values[2])) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("quadratic_1d", 1, 8, 8, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  3:
        values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__step);
        if (likely(values[3])) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("quadratic_1d", 1, 8, 8, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  4:
        values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n);
        if (likely(values[4])) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("quadratic_1d", 1, 8, 8, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  5:
        values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a);
        if (likely(values[5])) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("quadratic_1d", 1, 8, 8, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  6:
        values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b);
        if (likely(values[6])) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("quadratic_1d", 1, 8, 8, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  7:
        values[7] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__o);
        if (likely(values[7])) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("quadratic_1d", 1, 8, 8, 7); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "quadratic_1d") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 8) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
    }
    __pyx_v_src = ((PyArrayObject *)values[0]);
    __pyx_v_dst = ((PyArrayObject *)values[1]);
    __pyx_v_ptr = ((PyArrayObject *)values[2]);
    __pyx_v_step = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_step == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_n = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_a = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_a == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_b = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_b == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_o = __Pyx_PyInt_AsInt(values[7]); if (unlikely((__pyx_v_o == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("quadratic_1d", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("vision.track.pairwise.quadratic_1d", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_bstruct_src.buf = NULL;
  __pyx_bstruct_dst.buf = NULL;
  __pyx_bstruct_ptr.buf = NULL;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_src), __pyx_ptype_5numpy_ndarray, 1, "src", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_5numpy_ndarray, 1, "dst", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ptr), __pyx_ptype_5numpy_ndarray, 1, "ptr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_src, (PyObject*)__pyx_v_src, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_src = __pyx_bstruct_src.strides[0];
  __pyx_bshape_0_src = __pyx_bstruct_src.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_dst, (PyObject*)__pyx_v_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_dst = __pyx_bstruct_dst.strides[0];
  __pyx_bshape_0_dst = __pyx_bstruct_dst.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_ptr, (PyObject*)__pyx_v_ptr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_ptr = __pyx_bstruct_ptr.strides[0];
  __pyx_bshape_0_ptr = __pyx_bstruct_ptr.shape[0];
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6vision_5track_8pairwise_quadratic_1d(__pyx_v_src, __pyx_v_dst, __pyx_v_ptr, __pyx_v_step, __pyx_v_n, __pyx_v_a, __pyx_v_b, __pyx_v_o, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_src);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_dst);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_ptr);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("vision.track.pairwise.quadratic_1d", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_src);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_dst);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_ptr);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 11:                             numpy.ndarray[numpy.double_t, ndim=1] dst,
 12:                             numpy.ndarray[numpy.int_t, ndim=1] ptr,
 13:                             int step, int n, double a, double b, int o):
 14: 
 15:     cdef numpy.ndarray[numpy.int_t, ndim=1] v = numpy.zeros(n, dtype=numpy.int)
  /* "vision/track/pairwise.pyx":15
 *                             int step, int n, double a, double b, int o):
 * 
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] v = numpy.zeros(n, dtype=numpy.int)             # <<<<<<<<<<<<<<
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] z = numpy.zeros(n+1,
 *                                                    dtype = numpy.double)
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__int); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_v, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_v = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_v.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_v = __pyx_bstruct_v.strides[0];
      __pyx_bshape_0_v = __pyx_bstruct_v.shape[0];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_v = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
 16:     cdef numpy.ndarray[numpy.double_t, ndim=1] z = numpy.zeros(n+1,
  /* "vision/track/pairwise.pyx":16
 * 
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] v = numpy.zeros(n, dtype=numpy.int)
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] z = numpy.zeros(n+1,             # <<<<<<<<<<<<<<
 *                                                    dtype = numpy.double)
 *     cdef int k = 0
 */
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromLong((__pyx_v_n + 1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
 17:                                                    dtype = numpy.double)
  /* "vision/track/pairwise.pyx":17
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] v = numpy.zeros(n, dtype=numpy.int)
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] z = numpy.zeros(n+1,
 *                                                    dtype = numpy.double)             # <<<<<<<<<<<<<<
 *     cdef int k = 0
 *     v[0] = 0
 */
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_z, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_z = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_z.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_z = __pyx_bstruct_z.strides[0];
      __pyx_bshape_0_z = __pyx_bstruct_z.shape[0];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_z = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
 18:     cdef int k = 0
  /* "vision/track/pairwise.pyx":18
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] z = numpy.zeros(n+1,
 *                                                    dtype = numpy.double)
 *     cdef int k = 0             # <<<<<<<<<<<<<<
 *     v[0] = 0
 *     z[0] = -Infinity
 */
  __pyx_v_k = 0;
 19:     v[0] = 0
  /* "vision/track/pairwise.pyx":19
 *                                                    dtype = numpy.double)
 *     cdef int k = 0
 *     v[0] = 0             # <<<<<<<<<<<<<<
 *     z[0] = -Infinity
 *     z[1] = Infinity
 */
  __pyx_t_8 = 0;
  if (__pyx_t_8 < 0) __pyx_t_8 += __pyx_bshape_0_v;
  *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_8, __pyx_bstride_0_v) = 0;
 20:     z[0] = -Infinity
  /* "vision/track/pairwise.pyx":20
 *     cdef int k = 0
 *     v[0] = 0
 *     z[0] = -Infinity             # <<<<<<<<<<<<<<
 *     z[1] = Infinity
 * 
 */
  __pyx_t_9 = 0;
  if (__pyx_t_9 < 0) __pyx_t_9 += __pyx_bshape_0_z;
  *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_z.buf, __pyx_t_9, __pyx_bstride_0_z) = (-__pyx_v_6vision_5track_8pairwise_Infinity);
 21:     z[1] = Infinity
  /* "vision/track/pairwise.pyx":21
 *     v[0] = 0
 *     z[0] = -Infinity
 *     z[1] = Infinity             # <<<<<<<<<<<<<<
 * 
 *     cdef int q
 */
  __pyx_t_10 = 1;
  if (__pyx_t_10 < 0) __pyx_t_10 += __pyx_bshape_0_z;
  *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_z.buf, __pyx_t_10, __pyx_bstride_0_z) = __pyx_v_6vision_5track_8pairwise_Infinity;
 22: 
 23:     cdef int q
 24:     cdef double s
 25: 
 26:     for q in range(1, n):
  /* "vision/track/pairwise.pyx":26
 *     cdef double s
 * 
 *     for q in range(1, n):             # <<<<<<<<<<<<<<
 *         s = ((src[q*step+o]-src[v[k]*step+o])-b*(q-v[k])+a*(q**2-v[k]**2))
 *         s = s / (2*a*(q-v[k]))
 */
  __pyx_t_11 = __pyx_v_n;
  for (__pyx_t_12 = 1; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_q = __pyx_t_12;
 27:         s = ((src[q*step+o]-src[v[k]*step+o])-b*(q-v[k])+a*(q**2-v[k]**2))
    /* "vision/track/pairwise.pyx":27
 * 
 *     for q in range(1, n):
 *         s = ((src[q*step+o]-src[v[k]*step+o])-b*(q-v[k])+a*(q**2-v[k]**2))             # <<<<<<<<<<<<<<
 *         s = s / (2*a*(q-v[k]))
 * 
 */
    __pyx_t_13 = ((__pyx_v_q * __pyx_v_step) + __pyx_v_o);
    if (__pyx_t_13 < 0) __pyx_t_13 += __pyx_bshape_0_src;
    __pyx_t_14 = __pyx_v_k;
    if (__pyx_t_14 < 0) __pyx_t_14 += __pyx_bshape_0_v;
    __pyx_t_15 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_14, __pyx_bstride_0_v)) * __pyx_v_step) + __pyx_v_o);
    if (__pyx_t_15 < 0) __pyx_t_15 += __pyx_bshape_0_src;
    __pyx_t_16 = __pyx_v_k;
    if (__pyx_t_16 < 0) __pyx_t_16 += __pyx_bshape_0_v;
    __pyx_t_17 = __pyx_v_k;
    if (__pyx_t_17 < 0) __pyx_t_17 += __pyx_bshape_0_v;
    __pyx_v_s = ((((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_src.buf, __pyx_t_13, __pyx_bstride_0_src)) - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_src.buf, __pyx_t_15, __pyx_bstride_0_src))) - (__pyx_v_b * (__pyx_v_q - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_16, __pyx_bstride_0_v))))) + (__pyx_v_a * (__Pyx_pow_long(((long)__pyx_v_q), 2) - __Pyx_pow_long(((long)(*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_17, __pyx_bstride_0_v))), 2))));
 28:         s = s / (2*a*(q-v[k]))
    /* "vision/track/pairwise.pyx":28
 *     for q in range(1, n):
 *         s = ((src[q*step+o]-src[v[k]*step+o])-b*(q-v[k])+a*(q**2-v[k]**2))
 *         s = s / (2*a*(q-v[k]))             # <<<<<<<<<<<<<<
 * 
 *         while s <= z[k]:
 */
    __pyx_t_18 = __pyx_v_k;
    if (__pyx_t_18 < 0) __pyx_t_18 += __pyx_bshape_0_v;
    __pyx_v_s = (__pyx_v_s / ((2.0 * __pyx_v_a) * (__pyx_v_q - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_18, __pyx_bstride_0_v)))));
 29: 
 30:         while s <= z[k]:
    /* "vision/track/pairwise.pyx":30
 *         s = s / (2*a*(q-v[k]))
 * 
 *         while s <= z[k]:             # <<<<<<<<<<<<<<
 *             k = k - 1
 *             s = ((src[q*step+o]-src[v[k]*step+o])-b*(q-v[k])+a*(q**2-v[k]**2))
 */
    while (1) {
      __pyx_t_19 = __pyx_v_k;
      if (__pyx_t_19 < 0) __pyx_t_19 += __pyx_bshape_0_z;
      __pyx_t_20 = (__pyx_v_s <= (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_z.buf, __pyx_t_19, __pyx_bstride_0_z)));
      if (!__pyx_t_20) break;
 31:             k = k - 1
      /* "vision/track/pairwise.pyx":31
 * 
 *         while s <= z[k]:
 *             k = k - 1             # <<<<<<<<<<<<<<
 *             s = ((src[q*step+o]-src[v[k]*step+o])-b*(q-v[k])+a*(q**2-v[k]**2))
 *             s = s / (2*a*(q-v[k]))
 */
      __pyx_v_k = (__pyx_v_k - 1);
 32:             s = ((src[q*step+o]-src[v[k]*step+o])-b*(q-v[k])+a*(q**2-v[k]**2))
      /* "vision/track/pairwise.pyx":32
 *         while s <= z[k]:
 *             k = k - 1
 *             s = ((src[q*step+o]-src[v[k]*step+o])-b*(q-v[k])+a*(q**2-v[k]**2))             # <<<<<<<<<<<<<<
 *             s = s / (2*a*(q-v[k]))
 * 
 */
      __pyx_t_21 = ((__pyx_v_q * __pyx_v_step) + __pyx_v_o);
      if (__pyx_t_21 < 0) __pyx_t_21 += __pyx_bshape_0_src;
      __pyx_t_22 = __pyx_v_k;
      if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_bshape_0_v;
      __pyx_t_23 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_22, __pyx_bstride_0_v)) * __pyx_v_step) + __pyx_v_o);
      if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_bshape_0_src;
      __pyx_t_24 = __pyx_v_k;
      if (__pyx_t_24 < 0) __pyx_t_24 += __pyx_bshape_0_v;
      __pyx_t_25 = __pyx_v_k;
      if (__pyx_t_25 < 0) __pyx_t_25 += __pyx_bshape_0_v;
      __pyx_v_s = ((((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_src.buf, __pyx_t_21, __pyx_bstride_0_src)) - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_src.buf, __pyx_t_23, __pyx_bstride_0_src))) - (__pyx_v_b * (__pyx_v_q - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_24, __pyx_bstride_0_v))))) + (__pyx_v_a * (__Pyx_pow_long(((long)__pyx_v_q), 2) - __Pyx_pow_long(((long)(*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_25, __pyx_bstride_0_v))), 2))));
 33:             s = s / (2*a*(q-v[k]))
      /* "vision/track/pairwise.pyx":33
 *             k = k - 1
 *             s = ((src[q*step+o]-src[v[k]*step+o])-b*(q-v[k])+a*(q**2-v[k]**2))
 *             s = s / (2*a*(q-v[k]))             # <<<<<<<<<<<<<<
 * 
 *         k = k + 1
 */
      __pyx_t_26 = __pyx_v_k;
      if (__pyx_t_26 < 0) __pyx_t_26 += __pyx_bshape_0_v;
      __pyx_v_s = (__pyx_v_s / ((2.0 * __pyx_v_a) * (__pyx_v_q - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_26, __pyx_bstride_0_v)))));
    }
 34: 
 35:         k = k + 1
    /* "vision/track/pairwise.pyx":35
 *             s = s / (2*a*(q-v[k]))
 * 
 *         k = k + 1             # <<<<<<<<<<<<<<
 *         v[k] = q
 *         z[k] = s
 */
    __pyx_v_k = (__pyx_v_k + 1);
 36:         v[k] = q
    /* "vision/track/pairwise.pyx":36
 * 
 *         k = k + 1
 *         v[k] = q             # <<<<<<<<<<<<<<
 *         z[k] = s
 *         z[k+1] = Infinity
 */
    __pyx_t_27 = __pyx_v_k;
    if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_0_v;
    *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_27, __pyx_bstride_0_v) = __pyx_v_q;
 37:         z[k] = s
    /* "vision/track/pairwise.pyx":37
 *         k = k + 1
 *         v[k] = q
 *         z[k] = s             # <<<<<<<<<<<<<<
 *         z[k+1] = Infinity
 * 
 */
    __pyx_t_28 = __pyx_v_k;
    if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_z;
    *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_z.buf, __pyx_t_28, __pyx_bstride_0_z) = __pyx_v_s;
 38:         z[k+1] = Infinity
    /* "vision/track/pairwise.pyx":38
 *         v[k] = q
 *         z[k] = s
 *         z[k+1] = Infinity             # <<<<<<<<<<<<<<
 * 
 *     k = 0
 */
    __pyx_t_29 = (__pyx_v_k + 1);
    if (__pyx_t_29 < 0) __pyx_t_29 += __pyx_bshape_0_z;
    *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_z.buf, __pyx_t_29, __pyx_bstride_0_z) = __pyx_v_6vision_5track_8pairwise_Infinity;
  }
 39: 
 40:     k = 0
  /* "vision/track/pairwise.pyx":40
 *         z[k+1] = Infinity
 * 
 *     k = 0             # <<<<<<<<<<<<<<
 *     for q in range(0, n):
 *         while z[k+1] < q:
 */
  __pyx_v_k = 0;
 41:     for q in range(0, n):
  /* "vision/track/pairwise.pyx":41
 * 
 *     k = 0
 *     for q in range(0, n):             # <<<<<<<<<<<<<<
 *         while z[k+1] < q:
 *             k = k + 1
 */
  __pyx_t_11 = __pyx_v_n;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_q = __pyx_t_12;
 42:         while z[k+1] < q:
    /* "vision/track/pairwise.pyx":42
 *     k = 0
 *     for q in range(0, n):
 *         while z[k+1] < q:             # <<<<<<<<<<<<<<
 *             k = k + 1
 *         dst[q*step+o] = a*(q-v[k])**2 + b*(q-v[k]) + src[v[k]*step+o]
 */
    while (1) {
      __pyx_t_30 = (__pyx_v_k + 1);
      if (__pyx_t_30 < 0) __pyx_t_30 += __pyx_bshape_0_z;
      __pyx_t_20 = ((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_z.buf, __pyx_t_30, __pyx_bstride_0_z)) < __pyx_v_q);
      if (!__pyx_t_20) break;
 43:             k = k + 1
      /* "vision/track/pairwise.pyx":43
 *     for q in range(0, n):
 *         while z[k+1] < q:
 *             k = k + 1             # <<<<<<<<<<<<<<
 *         dst[q*step+o] = a*(q-v[k])**2 + b*(q-v[k]) + src[v[k]*step+o]
 *         ptr[q*step+o] = v[k]
 */
      __pyx_v_k = (__pyx_v_k + 1);
    }
 44:         dst[q*step+o] = a*(q-v[k])**2 + b*(q-v[k]) + src[v[k]*step+o]
    /* "vision/track/pairwise.pyx":44
 *         while z[k+1] < q:
 *             k = k + 1
 *         dst[q*step+o] = a*(q-v[k])**2 + b*(q-v[k]) + src[v[k]*step+o]             # <<<<<<<<<<<<<<
 *         ptr[q*step+o] = v[k]
 * 
 */
    __pyx_t_31 = __pyx_v_k;
    if (__pyx_t_31 < 0) __pyx_t_31 += __pyx_bshape_0_v;
    __pyx_t_32 = __pyx_v_k;
    if (__pyx_t_32 < 0) __pyx_t_32 += __pyx_bshape_0_v;
    __pyx_t_33 = __pyx_v_k;
    if (__pyx_t_33 < 0) __pyx_t_33 += __pyx_bshape_0_v;
    __pyx_t_34 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_33, __pyx_bstride_0_v)) * __pyx_v_step) + __pyx_v_o);
    if (__pyx_t_34 < 0) __pyx_t_34 += __pyx_bshape_0_src;
    __pyx_t_35 = ((__pyx_v_q * __pyx_v_step) + __pyx_v_o);
    if (__pyx_t_35 < 0) __pyx_t_35 += __pyx_bshape_0_dst;
    *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_dst.buf, __pyx_t_35, __pyx_bstride_0_dst) = (((__pyx_v_a * __Pyx_pow_long(((long)(__pyx_v_q - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_31, __pyx_bstride_0_v)))), 2)) + (__pyx_v_b * (__pyx_v_q - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_32, __pyx_bstride_0_v))))) + (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_double_t *, __pyx_bstruct_src.buf, __pyx_t_34, __pyx_bstride_0_src)));
 45:         ptr[q*step+o] = v[k]
    /* "vision/track/pairwise.pyx":45
 *             k = k + 1
 *         dst[q*step+o] = a*(q-v[k])**2 + b*(q-v[k]) + src[v[k]*step+o]
 *         ptr[q*step+o] = v[k]             # <<<<<<<<<<<<<<
 * 
 * # see Pedro Felzenszwalb et. al
 */
    __pyx_t_36 = __pyx_v_k;
    if (__pyx_t_36 < 0) __pyx_t_36 += __pyx_bshape_0_v;
    __pyx_t_37 = ((__pyx_v_q * __pyx_v_step) + __pyx_v_o);
    if (__pyx_t_37 < 0) __pyx_t_37 += __pyx_bshape_0_ptr;
    *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_ptr.buf, __pyx_t_37, __pyx_bstride_0_ptr) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_v.buf, __pyx_t_36, __pyx_bstride_0_v));
  }

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_src);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_dst);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_v);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_z);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_ptr);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("vision.track.pairwise.quadratic_1d", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_src);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_dst);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_v);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_z);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_ptr);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_v);
  __Pyx_XDECREF((PyObject *)__pyx_v_z);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 46: 
 47: # see Pedro Felzenszwalb et. al
 48: def quadratic(numpy.ndarray[numpy.double_t, ndim=2] scores,
/* "vision/track/pairwise.pyx":48
 * 
 * # see Pedro Felzenszwalb et. al
 * def quadratic(numpy.ndarray[numpy.double_t, ndim=2] scores,             # <<<<<<<<<<<<<<
 *                        double cost):
 *     cdef int w, h, x, y, p
 */

static PyObject *__pyx_pf_6vision_5track_8pairwise_1quadratic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6vision_5track_8pairwise_1quadratic[] = "quadratic(ndarray scores, double cost)";
static PyMethodDef __pyx_mdef_6vision_5track_8pairwise_1quadratic = {__Pyx_NAMESTR("quadratic"), (PyCFunction)__pyx_pf_6vision_5track_8pairwise_1quadratic, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6vision_5track_8pairwise_1quadratic)};
static PyObject *__pyx_pf_6vision_5track_8pairwise_1quadratic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_scores = 0;
  double __pyx_v_cost;
  int __pyx_v_w;
  int __pyx_v_h;
  int __pyx_v_x;
  int __pyx_v_y;
  int __pyx_v_p;
  PyArrayObject *__pyx_v_vals = 0;
  PyArrayObject *__pyx_v_M = 0;
  PyArrayObject *__pyx_v_Ix = 0;
  PyArrayObject *__pyx_v_Iy = 0;
  PyArrayObject *__pyx_v_tmpM = 0;
  PyArrayObject *__pyx_v_tmpIx = 0;
  PyArrayObject *__pyx_v_tmpIy = 0;
  Py_buffer __pyx_bstruct_Iy;
  Py_ssize_t __pyx_bstride_0_Iy = 0;
  Py_ssize_t __pyx_bstride_1_Iy = 0;
  Py_ssize_t __pyx_bshape_0_Iy = 0;
  Py_ssize_t __pyx_bshape_1_Iy = 0;
  Py_buffer __pyx_bstruct_Ix;
  Py_ssize_t __pyx_bstride_0_Ix = 0;
  Py_ssize_t __pyx_bstride_1_Ix = 0;
  Py_ssize_t __pyx_bshape_0_Ix = 0;
  Py_ssize_t __pyx_bshape_1_Ix = 0;
  Py_buffer __pyx_bstruct_M;
  Py_ssize_t __pyx_bstride_0_M = 0;
  Py_ssize_t __pyx_bshape_0_M = 0;
  Py_buffer __pyx_bstruct_tmpIx;
  Py_ssize_t __pyx_bstride_0_tmpIx = 0;
  Py_ssize_t __pyx_bshape_0_tmpIx = 0;
  Py_buffer __pyx_bstruct_tmpIy;
  Py_ssize_t __pyx_bstride_0_tmpIy = 0;
  Py_ssize_t __pyx_bshape_0_tmpIy = 0;
  Py_buffer __pyx_bstruct_scores;
  Py_ssize_t __pyx_bstride_0_scores = 0;
  Py_ssize_t __pyx_bstride_1_scores = 0;
  Py_ssize_t __pyx_bshape_0_scores = 0;
  Py_ssize_t __pyx_bshape_1_scores = 0;
  Py_buffer __pyx_bstruct_vals;
  Py_ssize_t __pyx_bstride_0_vals = 0;
  Py_ssize_t __pyx_bshape_0_vals = 0;
  Py_buffer __pyx_bstruct_tmpM;
  Py_ssize_t __pyx_bstride_0_tmpM = 0;
  Py_ssize_t __pyx_bshape_0_tmpM = 0;
  PyObject *__pyx_r = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__scores,&__pyx_n_s__cost,0};
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("quadratic");
  __pyx_self = __pyx_self;
  {
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  0:
        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scores);
        if (likely(values[0])) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__cost);
        if (likely(values[1])) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("quadratic", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "quadratic") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __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_scores = ((PyArrayObject *)values[0]);
    __pyx_v_cost = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_cost == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("quadratic", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("vision.track.pairwise.quadratic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_bstruct_vals.buf = NULL;
  __pyx_bstruct_M.buf = NULL;
  __pyx_bstruct_Ix.buf = NULL;
  __pyx_bstruct_Iy.buf = NULL;
  __pyx_bstruct_tmpM.buf = NULL;
  __pyx_bstruct_tmpIx.buf = NULL;
  __pyx_bstruct_tmpIy.buf = NULL;
  __pyx_bstruct_scores.buf = NULL;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_scores), __pyx_ptype_5numpy_ndarray, 1, "scores", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_scores, (PyObject*)__pyx_v_scores, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_bstride_0_scores = __pyx_bstruct_scores.strides[0]; __pyx_bstride_1_scores = __pyx_bstruct_scores.strides[1];
  __pyx_bshape_0_scores = __pyx_bstruct_scores.shape[0]; __pyx_bshape_1_scores = __pyx_bstruct_scores.shape[1];

  /* "vision/track/pairwise.pyx":48
 * 
 * # see Pedro Felzenszwalb et. al
 * def quadratic(numpy.ndarray[numpy.double_t, ndim=2] scores,             # <<<<<<<<<<<<<<
 *                        double cost):
 *     cdef int w, h, x, y, p
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6vision_5track_8pairwise_1quadratic, NULL, __pyx_n_s_13); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__quadratic, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 49:                        double cost):
 50:     cdef int w, h, x, y, p
 51:     w = scores.shape[0]
  /* "vision/track/pairwise.pyx":51
 *                        double cost):
 *     cdef int w, h, x, y, p
 *     w = scores.shape[0]             # <<<<<<<<<<<<<<
 *     h = scores.shape[1]
 * 
 */
  __pyx_v_w = (__pyx_v_scores->dimensions[0]);
 52:     h = scores.shape[1]
  /* "vision/track/pairwise.pyx":52
 *     cdef int w, h, x, y, p
 *     w = scores.shape[0]
 *     h = scores.shape[1]             # <<<<<<<<<<<<<<
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] vals = scores.flatten()
 */
  __pyx_v_h = (__pyx_v_scores->dimensions[1]);
 53: 
 54:     cdef numpy.ndarray[numpy.double_t, ndim=1] vals = scores.flatten()
  /* "vision/track/pairwise.pyx":54
 *     h = scores.shape[1]
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] vals = scores.flatten()             # <<<<<<<<<<<<<<
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] M = numpy.zeros(w*h,
 */
  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_scores), __pyx_n_s__flatten); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_3 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_vals, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_vals = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_vals.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_vals = __pyx_bstruct_vals.strides[0];
      __pyx_bshape_0_vals = __pyx_bstruct_vals.shape[0];
    }
  }
  __pyx_t_3 = 0;
  __pyx_v_vals = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
 55: 
 56:     cdef numpy.ndarray[numpy.double_t, ndim=1] M = numpy.zeros(w*h,
  /* "vision/track/pairwise.pyx":56
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] vals = scores.flatten()
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] M = numpy.zeros(w*h,             # <<<<<<<<<<<<<<
 *                                                    dtype = numpy.double)
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] Ix = numpy.zeros((w, h),
 */
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromLong((__pyx_v_w * __pyx_v_h)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
 57:                                                    dtype = numpy.double)
  /* "vision/track/pairwise.pyx":57
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] M = numpy.zeros(w*h,
 *                                                    dtype = numpy.double)             # <<<<<<<<<<<<<<
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] Ix = numpy.zeros((w, h),
 *                                                  dtype = numpy.int)
 */
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_M, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_M = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_M.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_M = __pyx_bstruct_M.strides[0];
      __pyx_bshape_0_M = __pyx_bstruct_M.shape[0];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_M = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 58:     cdef numpy.ndarray[numpy.int_t, ndim=2] Ix = numpy.zeros((w, h),
  /* "vision/track/pairwise.pyx":58
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] M = numpy.zeros(w*h,
 *                                                    dtype = numpy.double)
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] Ix = numpy.zeros((w, h),             # <<<<<<<<<<<<<<
 *                                                  dtype = numpy.int)
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] Iy = numpy.zeros((w, h),
 */
  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_6 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
 59:                                                  dtype = numpy.int)
  /* "vision/track/pairwise.pyx":59
 *                                                    dtype = numpy.double)
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] Ix = numpy.zeros((w, h),
 *                                                  dtype = numpy.int)             # <<<<<<<<<<<<<<
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] Iy = numpy.zeros((w, h),
 *                                                  dtype = numpy.int)
 */
  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__int); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_Ix, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_Ix = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_Ix.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_Ix = __pyx_bstruct_Ix.strides[0]; __pyx_bstride_1_Ix = __pyx_bstruct_Ix.strides[1];
      __pyx_bshape_0_Ix = __pyx_bstruct_Ix.shape[0]; __pyx_bshape_1_Ix = __pyx_bstruct_Ix.shape[1];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_Ix = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
 60:     cdef numpy.ndarray[numpy.int_t, ndim=2] Iy = numpy.zeros((w, h),
  /* "vision/track/pairwise.pyx":60
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] Ix = numpy.zeros((w, h),
 *                                                  dtype = numpy.int)
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] Iy = numpy.zeros((w, h),             # <<<<<<<<<<<<<<
 *                                                  dtype = numpy.int)
 * 
 */
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_5 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_2));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
  __pyx_t_2 = 0;
  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
 61:                                                  dtype = numpy.int)
  /* "vision/track/pairwise.pyx":61
 *                                                  dtype = numpy.int)
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] Iy = numpy.zeros((w, h),
 *                                                  dtype = numpy.int)             # <<<<<<<<<<<<<<
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] tmpM = numpy.zeros(w*h,
 */
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__int); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_9 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_Iy, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_Iy = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_Iy.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_Iy = __pyx_bstruct_Iy.strides[0]; __pyx_bstride_1_Iy = __pyx_bstruct_Iy.strides[1];
      __pyx_bshape_0_Iy = __pyx_bstruct_Iy.shape[0]; __pyx_bshape_1_Iy = __pyx_bstruct_Iy.shape[1];
    }
  }
  __pyx_t_9 = 0;
  __pyx_v_Iy = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 62: 
 63:     cdef numpy.ndarray[numpy.double_t, ndim=1] tmpM = numpy.zeros(w*h,
  /* "vision/track/pairwise.pyx":63
 *                                                  dtype = numpy.int)
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] tmpM = numpy.zeros(w*h,             # <<<<<<<<<<<<<<
 *                                                       dtype = numpy.double)
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIx = numpy.zeros(w*h,
 */
  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyInt_FromLong((__pyx_v_w * __pyx_v_h)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
 64:                                                       dtype = numpy.double)
  /* "vision/track/pairwise.pyx":64
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] tmpM = numpy.zeros(w*h,
 *                                                       dtype = numpy.double)             # <<<<<<<<<<<<<<
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIx = numpy.zeros(w*h,
 *                                                     dtype = numpy.int)
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_10 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_tmpM, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_tmpM = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_tmpM.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_tmpM = __pyx_bstruct_tmpM.strides[0];
      __pyx_bshape_0_tmpM = __pyx_bstruct_tmpM.shape[0];
    }
  }
  __pyx_t_10 = 0;
  __pyx_v_tmpM = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
 65:     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIx = numpy.zeros(w*h,
  /* "vision/track/pairwise.pyx":65
 *     cdef numpy.ndarray[numpy.double_t, ndim=1] tmpM = numpy.zeros(w*h,
 *                                                       dtype = numpy.double)
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIx = numpy.zeros(w*h,             # <<<<<<<<<<<<<<
 *                                                     dtype = numpy.int)
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIy = numpy.zeros(w*h,
 */
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromLong((__pyx_v_w * __pyx_v_h)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
 66:                                                     dtype = numpy.int)
  /* "vision/track/pairwise.pyx":66
 *                                                       dtype = numpy.double)
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIx = numpy.zeros(w*h,
 *                                                     dtype = numpy.int)             # <<<<<<<<<<<<<<
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIy = numpy.zeros(w*h,
 *                                                     dtype = numpy.int)
 */
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__int); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_t_6, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_tmpIx, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_tmpIx = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_tmpIx.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_tmpIx = __pyx_bstruct_tmpIx.strides[0];
      __pyx_bshape_0_tmpIx = __pyx_bstruct_tmpIx.shape[0];
    }
  }
  __pyx_t_11 = 0;
  __pyx_v_tmpIx = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 67:     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIy = numpy.zeros(w*h,
  /* "vision/track/pairwise.pyx":67
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIx = numpy.zeros(w*h,
 *                                                     dtype = numpy.int)
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIy = numpy.zeros(w*h,             # <<<<<<<<<<<<<<
 *                                                     dtype = numpy.int)
 * 
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromLong((__pyx_v_w * __pyx_v_h)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
 68:                                                     dtype = numpy.int)
  /* "vision/track/pairwise.pyx":68
 *                                                     dtype = numpy.int)
 *     cdef numpy.ndarray[numpy.int_t, ndim=1] tmpIy = numpy.zeros(w*h,
 *                                                     dtype = numpy.int)             # <<<<<<<<<<<<<<
 * 
 *     for x in range(w):
 */
  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__int); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyEval_CallObjectWithKeywords(__pyx_t_5, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_12 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_tmpIy, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_tmpIy = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_tmpIy.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_tmpIy = __pyx_bstruct_tmpIy.strides[0];
      __pyx_bshape_0_tmpIy = __pyx_bstruct_tmpIy.shape[0];
    }
  }
  __pyx_t_12 = 0;
  __pyx_v_tmpIy = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
 69: 
 70:     for x in range(w):
  /* "vision/track/pairwise.pyx":70
 *                                                     dtype = numpy.int)
 * 
 *     for x in range(w):             # <<<<<<<<<<<<<<
 *         quadratic_1d(vals, tmpM, tmpIy, 1, h, cost, 0, x * h)
 * 
 */
  __pyx_t_13 = __pyx_v_w;
  for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
    __pyx_v_x = __pyx_t_14;
 71:         quadratic_1d(vals, tmpM, tmpIy, 1, h, cost, 0, x * h)
    /* "vision/track/pairwise.pyx":71
 * 
 *     for x in range(w):
 *         quadratic_1d(vals, tmpM, tmpIy, 1, h, cost, 0, x * h)             # <<<<<<<<<<<<<<
 * 
 *     for y in range(h):
 */
    __pyx_t_2 = __pyx_f_6vision_5track_8pairwise_quadratic_1d(((PyArrayObject *)__pyx_v_vals), ((PyArrayObject *)__pyx_v_tmpM), ((PyArrayObject *)__pyx_v_tmpIy), 1, __pyx_v_h, __pyx_v_cost, 0.0, (__pyx_v_x * __pyx_v_h), 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
 72: 
 73:     for y in range(h):
  /* "vision/track/pairwise.pyx":73
 *         quadratic_1d(vals, tmpM, tmpIy, 1, h, cost, 0, x * h)
 * 
 *     for y in range(h):             # <<<<<<<<<<<<<<
 *         quadratic_1d(tmpM, M, tmpIx, h, w, cost, 0, y)
 * 
 */
  __pyx_t_13 = __pyx_v_h;
  for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
    __pyx_v_y = __pyx_t_14;
 74:         quadratic_1d(tmpM, M, tmpIx, h, w, cost, 0, y)
    /* "vision/track/pairwise.pyx":74
 * 
 *     for y in range(h):
 *         quadratic_1d(tmpM, M, tmpIx, h, w, cost, 0, y)             # <<<<<<<<<<<<<<
 * 
 *     for x in range(w):
 */
    __pyx_t_2 = __pyx_f_6vision_5track_8pairwise_quadratic_1d(((PyArrayObject *)__pyx_v_tmpM), ((PyArrayObject *)__pyx_v_M), ((PyArrayObject *)__pyx_v_tmpIx), __pyx_v_h, __pyx_v_w, __pyx_v_cost, 0.0, __pyx_v_y, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
 75: 
 76:     for x in range(w):
  /* "vision/track/pairwise.pyx":76
 *         quadratic_1d(tmpM, M, tmpIx, h, w, cost, 0, y)
 * 
 *     for x in range(w):             # <<<<<<<<<<<<<<
 *         for y in range(h):
 *             p = x * h + y
 */
  __pyx_t_13 = __pyx_v_w;
  for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
    __pyx_v_x = __pyx_t_14;
 77:         for y in range(h):
    /* "vision/track/pairwise.pyx":77
 * 
 *     for x in range(w):
 *         for y in range(h):             # <<<<<<<<<<<<<<
 *             p = x * h + y
 *             Ix[x, y] = tmpIx[p]
 */
    __pyx_t_15 = __pyx_v_h;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_y = __pyx_t_16;
 78:             p = x * h + y
      /* "vision/track/pairwise.pyx":78
 *     for x in range(w):
 *         for y in range(h):
 *             p = x * h + y             # <<<<<<<<<<<<<<
 *             Ix[x, y] = tmpIx[p]
 *             Iy[x, y] = tmpIy[tmpIx[p]*h+y]
 */
      __pyx_v_p = ((__pyx_v_x * __pyx_v_h) + __pyx_v_y);
 79:             Ix[x, y] = tmpIx[p]
      /* "vision/track/pairwise.pyx":79
 *         for y in range(h):
 *             p = x * h + y
 *             Ix[x, y] = tmpIx[p]             # <<<<<<<<<<<<<<
 *             Iy[x, y] = tmpIy[tmpIx[p]*h+y]
 * 
 */
      __pyx_t_17 = __pyx_v_p;
      if (__pyx_t_17 < 0) __pyx_t_17 += __pyx_bshape_0_tmpIx;
      __pyx_t_18 = __pyx_v_x;
      __pyx_t_19 = __pyx_v_y;
      if (__pyx_t_18 < 0) __pyx_t_18 += __pyx_bshape_0_Ix;
      if (__pyx_t_19 < 0) __pyx_t_19 += __pyx_bshape_1_Ix;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_Ix.buf, __pyx_t_18, __pyx_bstride_0_Ix, __pyx_t_19, __pyx_bstride_1_Ix) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_tmpIx.buf, __pyx_t_17, __pyx_bstride_0_tmpIx));
 80:             Iy[x, y] = tmpIy[tmpIx[p]*h+y]
      /* "vision/track/pairwise.pyx":80
 *             p = x * h + y
 *             Ix[x, y] = tmpIx[p]
 *             Iy[x, y] = tmpIy[tmpIx[p]*h+y]             # <<<<<<<<<<<<<<
 * 
 *     return M.reshape((w,h)), Ix, Iy
 */
      __pyx_t_20 = __pyx_v_p;
      if (__pyx_t_20 < 0) __pyx_t_20 += __pyx_bshape_0_tmpIx;
      __pyx_t_21 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_tmpIx.buf, __pyx_t_20, __pyx_bstride_0_tmpIx)) * __pyx_v_h) + __pyx_v_y);
      if (__pyx_t_21 < 0) __pyx_t_21 += __pyx_bshape_0_tmpIy;
      __pyx_t_22 = __pyx_v_x;
      __pyx_t_23 = __pyx_v_y;
      if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_bshape_0_Iy;
      if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_bshape_1_Iy;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_Iy.buf, __pyx_t_22, __pyx_bstride_0_Iy, __pyx_t_23, __pyx_bstride_1_Iy) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int_t *, __pyx_bstruct_tmpIy.buf, __pyx_t_21, __pyx_bstride_0_tmpIy));
    }
  }
 81: 
 82:     return M.reshape((w,h)), Ix, Iy
  /* "vision/track/pairwise.pyx":82
 *             Iy[x, y] = tmpIy[tmpIx[p]*h+y]
 * 
 *     return M.reshape((w,h)), Ix, Iy             # <<<<<<<<<<<<<<
 * 
 * def manhattan(inscores, incost):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_M), __pyx_n_s__reshape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_5));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
  __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __Pyx_INCREF(((PyObject *)__pyx_v_Ix));
  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_Ix));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Ix));
  __Pyx_INCREF(((PyObject *)__pyx_v_Iy));
  PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_Iy));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Iy));
  __pyx_t_5 = 0;
  __pyx_r = ((PyObject *)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_Iy);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_Ix);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_M);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_tmpIx);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_tmpIy);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_scores);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_vals);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_tmpM);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("vision.track.pairwise.quadratic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_Iy);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_Ix);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_M);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_tmpIx);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_tmpIy);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_scores);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_vals);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_tmpM);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_vals);
  __Pyx_XDECREF((PyObject *)__pyx_v_M);
  __Pyx_XDECREF((PyObject *)__pyx_v_Ix);
  __Pyx_XDECREF((PyObject *)__pyx_v_Iy);
  __Pyx_XDECREF((PyObject *)__pyx_v_tmpM);
  __Pyx_XDECREF((PyObject *)__pyx_v_tmpIx);
  __Pyx_XDECREF((PyObject *)__pyx_v_tmpIy);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 83: 
 84: def manhattan(inscores, incost):
/* "vision/track/pairwise.pyx":84
 *     return M.reshape((w,h)), Ix, Iy
 * 
 * def manhattan(inscores, incost):             # <<<<<<<<<<<<<<
 *     cdef int w, h, i, j, ri, rj
 *     w, h = inscores.shape
 */

static PyObject *__pyx_pf_6vision_5track_8pairwise_2manhattan(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6vision_5track_8pairwise_2manhattan[] = "manhattan(inscores, incost)";
static PyMethodDef __pyx_mdef_6vision_5track_8pairwise_2manhattan = {__Pyx_NAMESTR("manhattan"), (PyCFunction)__pyx_pf_6vision_5track_8pairwise_2manhattan, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6vision_5track_8pairwise_2manhattan)};
static PyObject *__pyx_pf_6vision_5track_8pairwise_2manhattan(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_inscores = 0;
  PyObject *__pyx_v_incost = 0;
  int __pyx_v_w;
  int __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_ri;
  int __pyx_v_rj;
  double __pyx_v_cost;
  PyArrayObject *__pyx_v_scores = 0;
  PyArrayObject *__pyx_v_forward = 0;
  PyArrayObject *__pyx_v_backward = 0;
  PyArrayObject *__pyx_v_forwardxp = 0;
  PyArrayObject *__pyx_v_forwardyp = 0;
  PyArrayObject *__pyx_v_backwardxp = 0;
  PyArrayObject *__pyx_v_backwardyp = 0;
  Py_buffer __pyx_bstruct_forwardxp;
  Py_ssize_t __pyx_bstride_0_forwardxp = 0;
  Py_ssize_t __pyx_bstride_1_forwardxp = 0;
  Py_ssize_t __pyx_bshape_0_forwardxp = 0;
  Py_ssize_t __pyx_bshape_1_forwardxp = 0;
  Py_buffer __pyx_bstruct_forwardyp;
  Py_ssize_t __pyx_bstride_0_forwardyp = 0;
  Py_ssize_t __pyx_bstride_1_forwardyp = 0;
  Py_ssize_t __pyx_bshape_0_forwardyp = 0;
  Py_ssize_t __pyx_bshape_1_forwardyp = 0;
  Py_buffer __pyx_bstruct_scores;
  Py_ssize_t __pyx_bstride_0_scores = 0;
  Py_ssize_t __pyx_bstride_1_scores = 0;
  Py_ssize_t __pyx_bshape_0_scores = 0;
  Py_ssize_t __pyx_bshape_1_scores = 0;
  Py_buffer __pyx_bstruct_forward;
  Py_ssize_t __pyx_bstride_0_forward = 0;
  Py_ssize_t __pyx_bstride_1_forward = 0;
  Py_ssize_t __pyx_bshape_0_forward = 0;
  Py_ssize_t __pyx_bshape_1_forward = 0;
  Py_buffer __pyx_bstruct_backwardxp;
  Py_ssize_t __pyx_bstride_0_backwardxp = 0;
  Py_ssize_t __pyx_bstride_1_backwardxp = 0;
  Py_ssize_t __pyx_bshape_0_backwardxp = 0;
  Py_ssize_t __pyx_bshape_1_backwardxp = 0;
  Py_buffer __pyx_bstruct_backwardyp;
  Py_ssize_t __pyx_bstride_0_backwardyp = 0;
  Py_ssize_t __pyx_bstride_1_backwardyp = 0;
  Py_ssize_t __pyx_bshape_0_backwardyp = 0;
  Py_ssize_t __pyx_bshape_1_backwardyp = 0;
  Py_buffer __pyx_bstruct_backward;
  Py_ssize_t __pyx_bstride_0_backward = 0;
  Py_ssize_t __pyx_bstride_1_backward = 0;
  Py_ssize_t __pyx_bshape_0_backward = 0;
  Py_ssize_t __pyx_bshape_1_backward = 0;
  PyObject *__pyx_r = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__inscores,&__pyx_n_s__incost,0};
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("manhattan");
  __pyx_self = __pyx_self;
  {
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  0:
        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inscores);
        if (likely(values[0])) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__incost);
        if (likely(values[1])) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("manhattan", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "manhattan") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __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_inscores = values[0];
    __pyx_v_incost = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("manhattan", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("vision.track.pairwise.manhattan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_bstruct_scores.buf = NULL;
  __pyx_bstruct_forward.buf = NULL;
  __pyx_bstruct_backward.buf = NULL;
  __pyx_bstruct_forwardxp.buf = NULL;
  __pyx_bstruct_forwardyp.buf = NULL;
  __pyx_bstruct_backwardxp.buf = NULL;
  __pyx_bstruct_backwardyp.buf = NULL;

  /* "vision/track/pairwise.pyx":84
 *     return M.reshape((w,h)), Ix, Iy
 * 
 * def manhattan(inscores, incost):             # <<<<<<<<<<<<<<
 *     cdef int w, h, i, j, ri, rj
 *     w, h = inscores.shape
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6vision_5track_8pairwise_2manhattan, NULL, __pyx_n_s_13); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__manhattan, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 85:     cdef int w, h, i, j, ri, rj
 86:     w, h = inscores.shape
  /* "vision/track/pairwise.pyx":86
 * def manhattan(inscores, incost):
 *     cdef int w, h, i, j, ri, rj
 *     w, h = inscores.shape             # <<<<<<<<<<<<<<
 * 
 *     cdef double cost = incost
 */
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_inscores, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    if (likely(PyTuple_CheckExact(sequence))) {
      if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
        if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
        else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
        if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
        else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L7_unpacking_done;
    __pyx_L6_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
    if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_L7_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 87: 
 88:     cdef double cost = incost
  /* "vision/track/pairwise.pyx":88
 *     w, h = inscores.shape
 * 
 *     cdef double cost = incost             # <<<<<<<<<<<<<<
 *     cdef numpy.ndarray[numpy.double_t, ndim=2] scores = inscores
 * 
 */
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_incost); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_cost = __pyx_t_8;
 89:     cdef numpy.ndarray[numpy.double_t, ndim=2] scores = inscores
  /* "vision/track/pairwise.pyx":89
 * 
 *     cdef double cost = incost
 *     cdef numpy.ndarray[numpy.double_t, ndim=2] scores = inscores             # <<<<<<<<<<<<<<
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=2] forward, backward
 */
  if (!(likely(((__pyx_v_inscores) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_inscores, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_9 = ((PyArrayObject *)__pyx_v_inscores);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_scores, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_scores = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_scores.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_scores = __pyx_bstruct_scores.strides[0]; __pyx_bstride_1_scores = __pyx_bstruct_scores.strides[1];
      __pyx_bshape_0_scores = __pyx_bstruct_scores.shape[0]; __pyx_bshape_1_scores = __pyx_bstruct_scores.shape[1];
    }
  }
  __pyx_t_9 = 0;
  __Pyx_INCREF(__pyx_v_inscores);
  __pyx_v_scores = ((PyArrayObject *)__pyx_v_inscores);
 90: 
 91:     cdef numpy.ndarray[numpy.double_t, ndim=2] forward, backward
 92:     cdef numpy.ndarray[numpy.int_t, ndim=2] forwardxp, forwardyp
 93:     cdef numpy.ndarray[numpy.int_t, ndim=2] backwardxp, backwardyp
 94: 
 95:     forward = numpy.zeros((w,h), dtype = numpy.double)
  /* "vision/track/pairwise.pyx":95
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] backwardxp, backwardyp
 * 
 *     forward = numpy.zeros((w,h), dtype = numpy.double)             # <<<<<<<<<<<<<<
 *     forwardxp = numpy.zeros((w,h), dtype = numpy.int)
 *     forwardyp = numpy.zeros((w,h), dtype = numpy.int)
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
  __pyx_t_4 = 0;
  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_10 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__double); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_10);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_forward);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_forward, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_forward, (PyObject*)__pyx_v_forward, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
    }
    __pyx_bstride_0_forward = __pyx_bstruct_forward.strides[0]; __pyx_bstride_1_forward = __pyx_bstruct_forward.strides[1];
    __pyx_bshape_0_forward = __pyx_bstruct_forward.shape[0]; __pyx_bshape_1_forward = __pyx_bstruct_forward.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_11 = 0;
  __pyx_v_forward = ((PyArrayObject *)__pyx_t_10);
  __pyx_t_10 = 0;
 96:     forwardxp = numpy.zeros((w,h), dtype = numpy.int)
  /* "vision/track/pairwise.pyx":96
 * 
 *     forward = numpy.zeros((w,h), dtype = numpy.double)
 *     forwardxp = numpy.zeros((w,h), dtype = numpy.int)             # <<<<<<<<<<<<<<
 *     forwardyp = numpy.zeros((w,h), dtype = numpy.int)
 *     backward = numpy.zeros((w,h), dtype = numpy.double)
 */
  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_4 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_10 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
  __pyx_t_3 = 0;
  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__int); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_15 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_forwardxp);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_forwardxp, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_forwardxp, (PyObject*)__pyx_v_forwardxp, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      }
    }
    __pyx_bstride_0_forwardxp = __pyx_bstruct_forwardxp.strides[0]; __pyx_bstride_1_forwardxp = __pyx_bstruct_forwardxp.strides[1];
    __pyx_bshape_0_forwardxp = __pyx_bstruct_forwardxp.shape[0]; __pyx_bshape_1_forwardxp = __pyx_bstruct_forwardxp.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_15 = 0;
  __pyx_v_forwardxp = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 97:     forwardyp = numpy.zeros((w,h), dtype = numpy.int)
  /* "vision/track/pairwise.pyx":97
 *     forward = numpy.zeros((w,h), dtype = numpy.double)
 *     forwardxp = numpy.zeros((w,h), dtype = numpy.int)
 *     forwardyp = numpy.zeros((w,h), dtype = numpy.int)             # <<<<<<<<<<<<<<
 *     backward = numpy.zeros((w,h), dtype = numpy.double)
 *     backwardxp = numpy.zeros((w,h), dtype = numpy.int)
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
  __pyx_t_4 = 0;
  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_10 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__int); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_15 = ((PyArrayObject *)__pyx_t_10);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_forwardyp);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_forwardyp, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_forwardyp, (PyObject*)__pyx_v_forwardyp, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
    }
    __pyx_bstride_0_forwardyp = __pyx_bstruct_forwardyp.strides[0]; __pyx_bstride_1_forwardyp = __pyx_bstruct_forwardyp.strides[1];
    __pyx_bshape_0_forwardyp = __pyx_bstruct_forwardyp.shape[0]; __pyx_bshape_1_forwardyp = __pyx_bstruct_forwardyp.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_15 = 0;
  __pyx_v_forwardyp = ((PyArrayObject *)__pyx_t_10);
  __pyx_t_10 = 0;
 98:     backward = numpy.zeros((w,h), dtype = numpy.double)
  /* "vision/track/pairwise.pyx":98
 *     forwardxp = numpy.zeros((w,h), dtype = numpy.int)
 *     forwardyp = numpy.zeros((w,h), dtype = numpy.int)
 *     backward = numpy.zeros((w,h), dtype = numpy.double)             # <<<<<<<<<<<<<<
 *     backwardxp = numpy.zeros((w,h), dtype = numpy.int)
 *     backwardyp = numpy.zeros((w,h), dtype = numpy.int)
 */
  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_4 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_10 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
  __pyx_t_3 = 0;
  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__double); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_backward);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_backward, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_backward, (PyObject*)__pyx_v_backward, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      }
    }
    __pyx_bstride_0_backward = __pyx_bstruct_backward.strides[0]; __pyx_bstride_1_backward = __pyx_bstruct_backward.strides[1];
    __pyx_bshape_0_backward = __pyx_bstruct_backward.shape[0]; __pyx_bshape_1_backward = __pyx_bstruct_backward.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_11 = 0;
  __pyx_v_backward = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 99:     backwardxp = numpy.zeros((w,h), dtype = numpy.int)
  /* "vision/track/pairwise.pyx":99
 *     forwardyp = numpy.zeros((w,h), dtype = numpy.int)
 *     backward = numpy.zeros((w,h), dtype = numpy.double)
 *     backwardxp = numpy.zeros((w,h), dtype = numpy.int)             # <<<<<<<<<<<<<<
 *     backwardyp = numpy.zeros((w,h), dtype = numpy.int)
 * 
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
  __pyx_t_4 = 0;
  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_10 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__int); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_16 = ((PyArrayObject *)__pyx_t_10);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_backwardxp);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_backwardxp, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_backwardxp, (PyObject*)__pyx_v_backwardxp, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
    }
    __pyx_bstride_0_backwardxp = __pyx_bstruct_backwardxp.strides[0]; __pyx_bstride_1_backwardxp = __pyx_bstruct_backwardxp.strides[1];
    __pyx_bshape_0_backwardxp = __pyx_bstruct_backwardxp.shape[0]; __pyx_bshape_1_backwardxp = __pyx_bstruct_backwardxp.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_16 = 0;
  __pyx_v_backwardxp = ((PyArrayObject *)__pyx_t_10);
  __pyx_t_10 = 0;
 100:     backwardyp = numpy.zeros((w,h), dtype = numpy.int)
  /* "vision/track/pairwise.pyx":100
 *     backward = numpy.zeros((w,h), dtype = numpy.double)
 *     backwardxp = numpy.zeros((w,h), dtype = numpy.int)
 *     backwardyp = numpy.zeros((w,h), dtype = numpy.int)             # <<<<<<<<<<<<<<
 * 
 *     # forward pass
 */
  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_4 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_10 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
  __pyx_t_3 = 0;
  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__int); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_16 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_backwardyp);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_backwardyp, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_backwardyp, (PyObject*)__pyx_v_backwardyp, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      }
    }
    __pyx_bstride_0_backwardyp = __pyx_bstruct_backwardyp.strides[0]; __pyx_bstride_1_backwardyp = __pyx_bstruct_backwardyp.strides[1];
    __pyx_bshape_0_backwardyp = __pyx_bstruct_backwardyp.shape[0]; __pyx_bshape_1_backwardyp = __pyx_bstruct_backwardyp.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_16 = 0;
  __pyx_v_backwardyp = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 101: 
 102:     # forward pass
 103:     for i in range(w):
  /* "vision/track/pairwise.pyx":103
 * 
 *     # forward pass
 *     for i in range(w):             # <<<<<<<<<<<<<<
 *         for j in range(h):
 *             forward[i, j] = scores[i, j]
 */
  __pyx_t_7 = __pyx_v_w;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_7; __pyx_t_6+=1) {
    __pyx_v_i = __pyx_t_6;
 104:         for j in range(h):
    /* "vision/track/pairwise.pyx":104
 *     # forward pass
 *     for i in range(w):
 *         for j in range(h):             # <<<<<<<<<<<<<<
 *             forward[i, j] = scores[i, j]
 *             forwardxp[i, j] = i
 */
    __pyx_t_17 = __pyx_v_h;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
      __pyx_v_j = __pyx_t_18;
 105:             forward[i, j] = scores[i, j]
      /* "vision/track/pairwise.pyx":105
 *     for i in range(w):
 *         for j in range(h):
 *             forward[i, j] = scores[i, j]             # <<<<<<<<<<<<<<
 *             forwardxp[i, j] = i
 *             forwardyp[i, j] = j
 */
      __pyx_t_19 = __pyx_v_i;
      __pyx_t_20 = __pyx_v_j;
      if (__pyx_t_19 < 0) __pyx_t_19 += __pyx_bshape_0_scores;
      if (__pyx_t_20 < 0) __pyx_t_20 += __pyx_bshape_1_scores;
      __pyx_t_21 = __pyx_v_i;
      __pyx_t_22 = __pyx_v_j;
      if (__pyx_t_21 < 0) __pyx_t_21 += __pyx_bshape_0_forward;
      if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_bshape_1_forward;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_21, __pyx_bstride_0_forward, __pyx_t_22, __pyx_bstride_1_forward) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_scores.buf, __pyx_t_19, __pyx_bstride_0_scores, __pyx_t_20, __pyx_bstride_1_scores));
 106:             forwardxp[i, j] = i
      /* "vision/track/pairwise.pyx":106
 *         for j in range(h):
 *             forward[i, j] = scores[i, j]
 *             forwardxp[i, j] = i             # <<<<<<<<<<<<<<
 *             forwardyp[i, j] = j
 * 
 */
      __pyx_t_23 = __pyx_v_i;
      __pyx_t_24 = __pyx_v_j;
      if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_bshape_0_forwardxp;
      if (__pyx_t_24 < 0) __pyx_t_24 += __pyx_bshape_1_forwardxp;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardxp.buf, __pyx_t_23, __pyx_bstride_0_forwardxp, __pyx_t_24, __pyx_bstride_1_forwardxp) = __pyx_v_i;
 107:             forwardyp[i, j] = j
      /* "vision/track/pairwise.pyx":107
 *             forward[i, j] = scores[i, j]
 *             forwardxp[i, j] = i
 *             forwardyp[i, j] = j             # <<<<<<<<<<<<<<
 * 
 *             if j-1 >= 0 and forward[i, j-1] + cost < forward[i, j]:
 */
      __pyx_t_25 = __pyx_v_i;
      __pyx_t_26 = __pyx_v_j;
      if (__pyx_t_25 < 0) __pyx_t_25 += __pyx_bshape_0_forwardyp;
      if (__pyx_t_26 < 0) __pyx_t_26 += __pyx_bshape_1_forwardyp;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardyp.buf, __pyx_t_25, __pyx_bstride_0_forwardyp, __pyx_t_26, __pyx_bstride_1_forwardyp) = __pyx_v_j;
 108: 
 109:             if j-1 >= 0 and forward[i, j-1] + cost < forward[i, j]:
      /* "vision/track/pairwise.pyx":109
 *             forwardyp[i, j] = j
 * 
 *             if j-1 >= 0 and forward[i, j-1] + cost < forward[i, j]:             # <<<<<<<<<<<<<<
 *                 forward[i, j] = forward[i, j-1] + cost
 *                 forwardxp[i, j] = forwardxp[i, j-1]
 */
      __pyx_t_27 = ((__pyx_v_j - 1) >= 0);
      if (__pyx_t_27) {
        __pyx_t_28 = __pyx_v_i;
        __pyx_t_29 = (__pyx_v_j - 1);
        if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_forward;
        if (__pyx_t_29 < 0) __pyx_t_29 += __pyx_bshape_1_forward;
        __pyx_t_30 = __pyx_v_i;
        __pyx_t_31 = __pyx_v_j;
        if (__pyx_t_30 < 0) __pyx_t_30 += __pyx_bshape_0_forward;
        if (__pyx_t_31 < 0) __pyx_t_31 += __pyx_bshape_1_forward;
        __pyx_t_32 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_28, __pyx_bstride_0_forward, __pyx_t_29, __pyx_bstride_1_forward)) + __pyx_v_cost) < (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_30, __pyx_bstride_0_forward, __pyx_t_31, __pyx_bstride_1_forward)));
        __pyx_t_33 = __pyx_t_32;
      } else {
        __pyx_t_33 = __pyx_t_27;
      }
      if (__pyx_t_33) {
 110:                 forward[i, j] = forward[i, j-1] + cost
        /* "vision/track/pairwise.pyx":110
 * 
 *             if j-1 >= 0 and forward[i, j-1] + cost < forward[i, j]:
 *                 forward[i, j] = forward[i, j-1] + cost             # <<<<<<<<<<<<<<
 *                 forwardxp[i, j] = forwardxp[i, j-1]
 *                 forwardyp[i, j] = forwardyp[i, j-1]
 */
        __pyx_t_34 = __pyx_v_i;
        __pyx_t_35 = (__pyx_v_j - 1);
        if (__pyx_t_34 < 0) __pyx_t_34 += __pyx_bshape_0_forward;
        if (__pyx_t_35 < 0) __pyx_t_35 += __pyx_bshape_1_forward;
        __pyx_t_36 = __pyx_v_i;
        __pyx_t_37 = __pyx_v_j;
        if (__pyx_t_36 < 0) __pyx_t_36 += __pyx_bshape_0_forward;
        if (__pyx_t_37 < 0) __pyx_t_37 += __pyx_bshape_1_forward;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_36, __pyx_bstride_0_forward, __pyx_t_37, __pyx_bstride_1_forward) = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_34, __pyx_bstride_0_forward, __pyx_t_35, __pyx_bstride_1_forward)) + __pyx_v_cost);
 111:                 forwardxp[i, j] = forwardxp[i, j-1]
        /* "vision/track/pairwise.pyx":111
 *             if j-1 >= 0 and forward[i, j-1] + cost < forward[i, j]:
 *                 forward[i, j] = forward[i, j-1] + cost
 *                 forwardxp[i, j] = forwardxp[i, j-1]             # <<<<<<<<<<<<<<
 *                 forwardyp[i, j] = forwardyp[i, j-1]
 *             if i-1 >= 0 and forward[i-1, j] + cost < forward[i, j]:
 */
        __pyx_t_38 = __pyx_v_i;
        __pyx_t_39 = (__pyx_v_j - 1);
        if (__pyx_t_38 < 0) __pyx_t_38 += __pyx_bshape_0_forwardxp;
        if (__pyx_t_39 < 0) __pyx_t_39 += __pyx_bshape_1_forwardxp;
        __pyx_t_40 = __pyx_v_i;
        __pyx_t_41 = __pyx_v_j;
        if (__pyx_t_40 < 0) __pyx_t_40 += __pyx_bshape_0_forwardxp;
        if (__pyx_t_41 < 0) __pyx_t_41 += __pyx_bshape_1_forwardxp;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardxp.buf, __pyx_t_40, __pyx_bstride_0_forwardxp, __pyx_t_41, __pyx_bstride_1_forwardxp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardxp.buf, __pyx_t_38, __pyx_bstride_0_forwardxp, __pyx_t_39, __pyx_bstride_1_forwardxp));
 112:                 forwardyp[i, j] = forwardyp[i, j-1]
        /* "vision/track/pairwise.pyx":112
 *                 forward[i, j] = forward[i, j-1] + cost
 *                 forwardxp[i, j] = forwardxp[i, j-1]
 *                 forwardyp[i, j] = forwardyp[i, j-1]             # <<<<<<<<<<<<<<
 *             if i-1 >= 0 and forward[i-1, j] + cost < forward[i, j]:
 *                 forward[i, j] = forward[i-1, j] + cost
 */
        __pyx_t_42 = __pyx_v_i;
        __pyx_t_43 = (__pyx_v_j - 1);
        if (__pyx_t_42 < 0) __pyx_t_42 += __pyx_bshape_0_forwardyp;
        if (__pyx_t_43 < 0) __pyx_t_43 += __pyx_bshape_1_forwardyp;
        __pyx_t_44 = __pyx_v_i;
        __pyx_t_45 = __pyx_v_j;
        if (__pyx_t_44 < 0) __pyx_t_44 += __pyx_bshape_0_forwardyp;
        if (__pyx_t_45 < 0) __pyx_t_45 += __pyx_bshape_1_forwardyp;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardyp.buf, __pyx_t_44, __pyx_bstride_0_forwardyp, __pyx_t_45, __pyx_bstride_1_forwardyp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardyp.buf, __pyx_t_42, __pyx_bstride_0_forwardyp, __pyx_t_43, __pyx_bstride_1_forwardyp));
        goto __pyx_L12;
      }
      __pyx_L12:;
 113:             if i-1 >= 0 and forward[i-1, j] + cost < forward[i, j]:
      /* "vision/track/pairwise.pyx":113
 *                 forwardxp[i, j] = forwardxp[i, j-1]
 *                 forwardyp[i, j] = forwardyp[i, j-1]
 *             if i-1 >= 0 and forward[i-1, j] + cost < forward[i, j]:             # <<<<<<<<<<<<<<
 *                 forward[i, j] = forward[i-1, j] + cost
 *                 forwardxp[i, j] = forwardxp[i-1, j]
 */
      __pyx_t_33 = ((__pyx_v_i - 1) >= 0);
      if (__pyx_t_33) {
        __pyx_t_46 = (__pyx_v_i - 1);
        __pyx_t_47 = __pyx_v_j;
        if (__pyx_t_46 < 0) __pyx_t_46 += __pyx_bshape_0_forward;
        if (__pyx_t_47 < 0) __pyx_t_47 += __pyx_bshape_1_forward;
        __pyx_t_48 = __pyx_v_i;
        __pyx_t_49 = __pyx_v_j;
        if (__pyx_t_48 < 0) __pyx_t_48 += __pyx_bshape_0_forward;
        if (__pyx_t_49 < 0) __pyx_t_49 += __pyx_bshape_1_forward;
        __pyx_t_27 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_46, __pyx_bstride_0_forward, __pyx_t_47, __pyx_bstride_1_forward)) + __pyx_v_cost) < (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_48, __pyx_bstride_0_forward, __pyx_t_49, __pyx_bstride_1_forward)));
        __pyx_t_32 = __pyx_t_27;
      } else {
        __pyx_t_32 = __pyx_t_33;
      }
      if (__pyx_t_32) {
 114:                 forward[i, j] = forward[i-1, j] + cost
        /* "vision/track/pairwise.pyx":114
 *                 forwardyp[i, j] = forwardyp[i, j-1]
 *             if i-1 >= 0 and forward[i-1, j] + cost < forward[i, j]:
 *                 forward[i, j] = forward[i-1, j] + cost             # <<<<<<<<<<<<<<
 *                 forwardxp[i, j] = forwardxp[i-1, j]
 *                 forwardyp[i, j] = forwardyp[i-1, j]
 */
        __pyx_t_50 = (__pyx_v_i - 1);
        __pyx_t_51 = __pyx_v_j;
        if (__pyx_t_50 < 0) __pyx_t_50 += __pyx_bshape_0_forward;
        if (__pyx_t_51 < 0) __pyx_t_51 += __pyx_bshape_1_forward;
        __pyx_t_52 = __pyx_v_i;
        __pyx_t_53 = __pyx_v_j;
        if (__pyx_t_52 < 0) __pyx_t_52 += __pyx_bshape_0_forward;
        if (__pyx_t_53 < 0) __pyx_t_53 += __pyx_bshape_1_forward;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_52, __pyx_bstride_0_forward, __pyx_t_53, __pyx_bstride_1_forward) = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_50, __pyx_bstride_0_forward, __pyx_t_51, __pyx_bstride_1_forward)) + __pyx_v_cost);
 115:                 forwardxp[i, j] = forwardxp[i-1, j]
        /* "vision/track/pairwise.pyx":115
 *             if i-1 >= 0 and forward[i-1, j] + cost < forward[i, j]:
 *                 forward[i, j] = forward[i-1, j] + cost
 *                 forwardxp[i, j] = forwardxp[i-1, j]             # <<<<<<<<<<<<<<
 *                 forwardyp[i, j] = forwardyp[i-1, j]
 * 
 */
        __pyx_t_54 = (__pyx_v_i - 1);
        __pyx_t_55 = __pyx_v_j;
        if (__pyx_t_54 < 0) __pyx_t_54 += __pyx_bshape_0_forwardxp;
        if (__pyx_t_55 < 0) __pyx_t_55 += __pyx_bshape_1_forwardxp;
        __pyx_t_56 = __pyx_v_i;
        __pyx_t_57 = __pyx_v_j;
        if (__pyx_t_56 < 0) __pyx_t_56 += __pyx_bshape_0_forwardxp;
        if (__pyx_t_57 < 0) __pyx_t_57 += __pyx_bshape_1_forwardxp;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardxp.buf, __pyx_t_56, __pyx_bstride_0_forwardxp, __pyx_t_57, __pyx_bstride_1_forwardxp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardxp.buf, __pyx_t_54, __pyx_bstride_0_forwardxp, __pyx_t_55, __pyx_bstride_1_forwardxp));
 116:                 forwardyp[i, j] = forwardyp[i-1, j]
        /* "vision/track/pairwise.pyx":116
 *                 forward[i, j] = forward[i-1, j] + cost
 *                 forwardxp[i, j] = forwardxp[i-1, j]
 *                 forwardyp[i, j] = forwardyp[i-1, j]             # <<<<<<<<<<<<<<
 * 
 *     # backwards pass
 */
        __pyx_t_58 = (__pyx_v_i - 1);
        __pyx_t_59 = __pyx_v_j;
        if (__pyx_t_58 < 0) __pyx_t_58 += __pyx_bshape_0_forwardyp;
        if (__pyx_t_59 < 0) __pyx_t_59 += __pyx_bshape_1_forwardyp;
        __pyx_t_60 = __pyx_v_i;
        __pyx_t_61 = __pyx_v_j;
        if (__pyx_t_60 < 0) __pyx_t_60 += __pyx_bshape_0_forwardyp;
        if (__pyx_t_61 < 0) __pyx_t_61 += __pyx_bshape_1_forwardyp;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardyp.buf, __pyx_t_60, __pyx_bstride_0_forwardyp, __pyx_t_61, __pyx_bstride_1_forwardyp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardyp.buf, __pyx_t_58, __pyx_bstride_0_forwardyp, __pyx_t_59, __pyx_bstride_1_forwardyp));
        goto __pyx_L13;
      }
      __pyx_L13:;
    }
  }
 117: 
 118:     # backwards pass
 119:     for ri in range(w):
  /* "vision/track/pairwise.pyx":119
 * 
 *     # backwards pass
 *     for ri in range(w):             # <<<<<<<<<<<<<<
 *         i = w - ri - 1
 *         for rj in range(h):
 */
  __pyx_t_7 = __pyx_v_w;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_7; __pyx_t_6+=1) {
    __pyx_v_ri = __pyx_t_6;
 120:         i = w - ri - 1
    /* "vision/track/pairwise.pyx":120
 *     # backwards pass
 *     for ri in range(w):
 *         i = w - ri - 1             # <<<<<<<<<<<<<<
 *         for rj in range(h):
 *             j = h - rj - 1
 */
    __pyx_v_i = ((__pyx_v_w - __pyx_v_ri) - 1);
 121:         for rj in range(h):
    /* "vision/track/pairwise.pyx":121
 *     for ri in range(w):
 *         i = w - ri - 1
 *         for rj in range(h):             # <<<<<<<<<<<<<<
 *             j = h - rj - 1
 *             backward[i, j] = forward[i, j]
 */
    __pyx_t_17 = __pyx_v_h;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
      __pyx_v_rj = __pyx_t_18;
 122:             j = h - rj - 1
      /* "vision/track/pairwise.pyx":122
 *         i = w - ri - 1
 *         for rj in range(h):
 *             j = h - rj - 1             # <<<<<<<<<<<<<<
 *             backward[i, j] = forward[i, j]
 *             backwardxp[i, j] = forwardxp[i, j]
 */
      __pyx_v_j = ((__pyx_v_h - __pyx_v_rj) - 1);
 123:             backward[i, j] = forward[i, j]
      /* "vision/track/pairwise.pyx":123
 *         for rj in range(h):
 *             j = h - rj - 1
 *             backward[i, j] = forward[i, j]             # <<<<<<<<<<<<<<
 *             backwardxp[i, j] = forwardxp[i, j]
 *             backwardyp[i, j] = forwardyp[i, j]
 */
      __pyx_t_62 = __pyx_v_i;
      __pyx_t_63 = __pyx_v_j;
      if (__pyx_t_62 < 0) __pyx_t_62 += __pyx_bshape_0_forward;
      if (__pyx_t_63 < 0) __pyx_t_63 += __pyx_bshape_1_forward;
      __pyx_t_64 = __pyx_v_i;
      __pyx_t_65 = __pyx_v_j;
      if (__pyx_t_64 < 0) __pyx_t_64 += __pyx_bshape_0_backward;
      if (__pyx_t_65 < 0) __pyx_t_65 += __pyx_bshape_1_backward;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_backward.buf, __pyx_t_64, __pyx_bstride_0_backward, __pyx_t_65, __pyx_bstride_1_backward) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_forward.buf, __pyx_t_62, __pyx_bstride_0_forward, __pyx_t_63, __pyx_bstride_1_forward));
 124:             backwardxp[i, j] = forwardxp[i, j]
      /* "vision/track/pairwise.pyx":124
 *             j = h - rj - 1
 *             backward[i, j] = forward[i, j]
 *             backwardxp[i, j] = forwardxp[i, j]             # <<<<<<<<<<<<<<
 *             backwardyp[i, j] = forwardyp[i, j]
 * 
 */
      __pyx_t_66 = __pyx_v_i;
      __pyx_t_67 = __pyx_v_j;
      if (__pyx_t_66 < 0) __pyx_t_66 += __pyx_bshape_0_forwardxp;
      if (__pyx_t_67 < 0) __pyx_t_67 += __pyx_bshape_1_forwardxp;
      __pyx_t_68 = __pyx_v_i;
      __pyx_t_69 = __pyx_v_j;
      if (__pyx_t_68 < 0) __pyx_t_68 += __pyx_bshape_0_backwardxp;
      if (__pyx_t_69 < 0) __pyx_t_69 += __pyx_bshape_1_backwardxp;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardxp.buf, __pyx_t_68, __pyx_bstride_0_backwardxp, __pyx_t_69, __pyx_bstride_1_backwardxp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardxp.buf, __pyx_t_66, __pyx_bstride_0_forwardxp, __pyx_t_67, __pyx_bstride_1_forwardxp));
 125:             backwardyp[i, j] = forwardyp[i, j]
      /* "vision/track/pairwise.pyx":125
 *             backward[i, j] = forward[i, j]
 *             backwardxp[i, j] = forwardxp[i, j]
 *             backwardyp[i, j] = forwardyp[i, j]             # <<<<<<<<<<<<<<
 * 
 *             if j+1 < h and backward[i, j+1] + cost < backward[i, j]:
 */
      __pyx_t_70 = __pyx_v_i;
      __pyx_t_71 = __pyx_v_j;
      if (__pyx_t_70 < 0) __pyx_t_70 += __pyx_bshape_0_forwardyp;
      if (__pyx_t_71 < 0) __pyx_t_71 += __pyx_bshape_1_forwardyp;
      __pyx_t_72 = __pyx_v_i;
      __pyx_t_73 = __pyx_v_j;
      if (__pyx_t_72 < 0) __pyx_t_72 += __pyx_bshape_0_backwardyp;
      if (__pyx_t_73 < 0) __pyx_t_73 += __pyx_bshape_1_backwardyp;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardyp.buf, __pyx_t_72, __pyx_bstride_0_backwardyp, __pyx_t_73, __pyx_bstride_1_backwardyp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_forwardyp.buf, __pyx_t_70, __pyx_bstride_0_forwardyp, __pyx_t_71, __pyx_bstride_1_forwardyp));
 126: 
 127:             if j+1 < h and backward[i, j+1] + cost < backward[i, j]:
      /* "vision/track/pairwise.pyx":127
 *             backwardyp[i, j] = forwardyp[i, j]
 * 
 *             if j+1 < h and backward[i, j+1] + cost < backward[i, j]:             # <<<<<<<<<<<<<<
 *                 backward[i, j] = backward[i, j+1] + cost
 *                 backwardxp[i, j] = backwardxp[i, j+1]
 */
      __pyx_t_32 = ((__pyx_v_j + 1) < __pyx_v_h);
      if (__pyx_t_32) {
        __pyx_t_74 = __pyx_v_i;
        __pyx_t_75 = (__pyx_v_j + 1);
        if (__pyx_t_74 < 0) __pyx_t_74 += __pyx_bshape_0_backward;
        if (__pyx_t_75 < 0) __pyx_t_75 += __pyx_bshape_1_backward;
        __pyx_t_76 = __pyx_v_i;
        __pyx_t_77 = __pyx_v_j;
        if (__pyx_t_76 < 0) __pyx_t_76 += __pyx_bshape_0_backward;
        if (__pyx_t_77 < 0) __pyx_t_77 += __pyx_bshape_1_backward;
        __pyx_t_33 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_backward.buf, __pyx_t_74, __pyx_bstride_0_backward, __pyx_t_75, __pyx_bstride_1_backward)) + __pyx_v_cost) < (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_backward.buf, __pyx_t_76, __pyx_bstride_0_backward, __pyx_t_77, __pyx_bstride_1_backward)));
        __pyx_t_27 = __pyx_t_33;
      } else {
        __pyx_t_27 = __pyx_t_32;
      }
      if (__pyx_t_27) {
 128:                 backward[i, j] = backward[i, j+1] + cost
        /* "vision/track/pairwise.pyx":128
 * 
 *             if j+1 < h and backward[i, j+1] + cost < backward[i, j]:
 *                 backward[i, j] = backward[i, j+1] + cost             # <<<<<<<<<<<<<<
 *                 backwardxp[i, j] = backwardxp[i, j+1]
 *                 backwardyp[i, j] = backwardyp[i, j+1]
 */
        __pyx_t_78 = __pyx_v_i;
        __pyx_t_79 = (__pyx_v_j + 1);
        if (__pyx_t_78 < 0) __pyx_t_78 += __pyx_bshape_0_backward;
        if (__pyx_t_79 < 0) __pyx_t_79 += __pyx_bshape_1_backward;
        __pyx_t_80 = __pyx_v_i;
        __pyx_t_81 = __pyx_v_j;
        if (__pyx_t_80 < 0) __pyx_t_80 += __pyx_bshape_0_backward;
        if (__pyx_t_81 < 0) __pyx_t_81 += __pyx_bshape_1_backward;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_backward.buf, __pyx_t_80, __pyx_bstride_0_backward, __pyx_t_81, __pyx_bstride_1_backward) = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_backward.buf, __pyx_t_78, __pyx_bstride_0_backward, __pyx_t_79, __pyx_bstride_1_backward)) + __pyx_v_cost);
 129:                 backwardxp[i, j] = backwardxp[i, j+1]
        /* "vision/track/pairwise.pyx":129
 *             if j+1 < h and backward[i, j+1] + cost < backward[i, j]:
 *                 backward[i, j] = backward[i, j+1] + cost
 *                 backwardxp[i, j] = backwardxp[i, j+1]             # <<<<<<<<<<<<<<
 *                 backwardyp[i, j] = backwardyp[i, j+1]
 *             if i+1 < w and backward[i+1, j] + cost < backward[i, j]:
 */
        __pyx_t_82 = __pyx_v_i;
        __pyx_t_83 = (__pyx_v_j + 1);
        if (__pyx_t_82 < 0) __pyx_t_82 += __pyx_bshape_0_backwardxp;
        if (__pyx_t_83 < 0) __pyx_t_83 += __pyx_bshape_1_backwardxp;
        __pyx_t_84 = __pyx_v_i;
        __pyx_t_85 = __pyx_v_j;
        if (__pyx_t_84 < 0) __pyx_t_84 += __pyx_bshape_0_backwardxp;
        if (__pyx_t_85 < 0) __pyx_t_85 += __pyx_bshape_1_backwardxp;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardxp.buf, __pyx_t_84, __pyx_bstride_0_backwardxp, __pyx_t_85, __pyx_bstride_1_backwardxp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardxp.buf, __pyx_t_82, __pyx_bstride_0_backwardxp, __pyx_t_83, __pyx_bstride_1_backwardxp));
 130:                 backwardyp[i, j] = backwardyp[i, j+1]
        /* "vision/track/pairwise.pyx":130
 *                 backward[i, j] = backward[i, j+1] + cost
 *                 backwardxp[i, j] = backwardxp[i, j+1]
 *                 backwardyp[i, j] = backwardyp[i, j+1]             # <<<<<<<<<<<<<<
 *             if i+1 < w and backward[i+1, j] + cost < backward[i, j]:
 *                 backward[i, j] = backward[i+1, j] + cost
 */
        __pyx_t_86 = __pyx_v_i;
        __pyx_t_87 = (__pyx_v_j + 1);
        if (__pyx_t_86 < 0) __pyx_t_86 += __pyx_bshape_0_backwardyp;
        if (__pyx_t_87 < 0) __pyx_t_87 += __pyx_bshape_1_backwardyp;
        __pyx_t_88 = __pyx_v_i;
        __pyx_t_89 = __pyx_v_j;
        if (__pyx_t_88 < 0) __pyx_t_88 += __pyx_bshape_0_backwardyp;
        if (__pyx_t_89 < 0) __pyx_t_89 += __pyx_bshape_1_backwardyp;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardyp.buf, __pyx_t_88, __pyx_bstride_0_backwardyp, __pyx_t_89, __pyx_bstride_1_backwardyp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardyp.buf, __pyx_t_86, __pyx_bstride_0_backwardyp, __pyx_t_87, __pyx_bstride_1_backwardyp));
        goto __pyx_L18;
      }
      __pyx_L18:;
 131:             if i+1 < w and backward[i+1, j] + cost < backward[i, j]:
      /* "vision/track/pairwise.pyx":131
 *                 backwardxp[i, j] = backwardxp[i, j+1]
 *                 backwardyp[i, j] = backwardyp[i, j+1]
 *             if i+1 < w and backward[i+1, j] + cost < backward[i, j]:             # <<<<<<<<<<<<<<
 *                 backward[i, j] = backward[i+1, j] + cost
 *                 backwardxp[i, j] = backwardxp[i+1, j]
 */
      __pyx_t_27 = ((__pyx_v_i + 1) < __pyx_v_w);
      if (__pyx_t_27) {
        __pyx_t_90 = (__pyx_v_i + 1);
        __pyx_t_91 = __pyx_v_j;
        if (__pyx_t_90 < 0) __pyx_t_90 += __pyx_bshape_0_backward;
        if (__pyx_t_91 < 0) __pyx_t_91 += __pyx_bshape_1_backward;
        __pyx_t_92 = __pyx_v_i;
        __pyx_t_93 = __pyx_v_j;
        if (__pyx_t_92 < 0) __pyx_t_92 += __pyx_bshape_0_backward;
        if (__pyx_t_93 < 0) __pyx_t_93 += __pyx_bshape_1_backward;
        __pyx_t_32 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_backward.buf, __pyx_t_90, __pyx_bstride_0_backward, __pyx_t_91, __pyx_bstride_1_backward)) + __pyx_v_cost) < (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_backward.buf, __pyx_t_92, __pyx_bstride_0_backward, __pyx_t_93, __pyx_bstride_1_backward)));
        __pyx_t_33 = __pyx_t_32;
      } else {
        __pyx_t_33 = __pyx_t_27;
      }
      if (__pyx_t_33) {
 132:                 backward[i, j] = backward[i+1, j] + cost
        /* "vision/track/pairwise.pyx":132
 *                 backwardyp[i, j] = backwardyp[i, j+1]
 *             if i+1 < w and backward[i+1, j] + cost < backward[i, j]:
 *                 backward[i, j] = backward[i+1, j] + cost             # <<<<<<<<<<<<<<
 *                 backwardxp[i, j] = backwardxp[i+1, j]
 *                 backwardyp[i, j] = backwardyp[i+1, j]
 */
        __pyx_t_94 = (__pyx_v_i + 1);
        __pyx_t_95 = __pyx_v_j;
        if (__pyx_t_94 < 0) __pyx_t_94 += __pyx_bshape_0_backward;
        if (__pyx_t_95 < 0) __pyx_t_95 += __pyx_bshape_1_backward;
        __pyx_t_96 = __pyx_v_i;
        __pyx_t_97 = __pyx_v_j;
        if (__pyx_t_96 < 0) __pyx_t_96 += __pyx_bshape_0_backward;
        if (__pyx_t_97 < 0) __pyx_t_97 += __pyx_bshape_1_backward;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_backward.buf, __pyx_t_96, __pyx_bstride_0_backward, __pyx_t_97, __pyx_bstride_1_backward) = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_backward.buf, __pyx_t_94, __pyx_bstride_0_backward, __pyx_t_95, __pyx_bstride_1_backward)) + __pyx_v_cost);
 133:                 backwardxp[i, j] = backwardxp[i+1, j]
        /* "vision/track/pairwise.pyx":133
 *             if i+1 < w and backward[i+1, j] + cost < backward[i, j]:
 *                 backward[i, j] = backward[i+1, j] + cost
 *                 backwardxp[i, j] = backwardxp[i+1, j]             # <<<<<<<<<<<<<<
 *                 backwardyp[i, j] = backwardyp[i+1, j]
 * 
 */
        __pyx_t_98 = (__pyx_v_i + 1);
        __pyx_t_99 = __pyx_v_j;
        if (__pyx_t_98 < 0) __pyx_t_98 += __pyx_bshape_0_backwardxp;
        if (__pyx_t_99 < 0) __pyx_t_99 += __pyx_bshape_1_backwardxp;
        __pyx_t_100 = __pyx_v_i;
        __pyx_t_101 = __pyx_v_j;
        if (__pyx_t_100 < 0) __pyx_t_100 += __pyx_bshape_0_backwardxp;
        if (__pyx_t_101 < 0) __pyx_t_101 += __pyx_bshape_1_backwardxp;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardxp.buf, __pyx_t_100, __pyx_bstride_0_backwardxp, __pyx_t_101, __pyx_bstride_1_backwardxp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardxp.buf, __pyx_t_98, __pyx_bstride_0_backwardxp, __pyx_t_99, __pyx_bstride_1_backwardxp));
 134:                 backwardyp[i, j] = backwardyp[i+1, j]
        /* "vision/track/pairwise.pyx":134
 *                 backward[i, j] = backward[i+1, j] + cost
 *                 backwardxp[i, j] = backwardxp[i+1, j]
 *                 backwardyp[i, j] = backwardyp[i+1, j]             # <<<<<<<<<<<<<<
 * 
 *     return backward, backwardxp, backwardyp
 */
        __pyx_t_102 = (__pyx_v_i + 1);
        __pyx_t_103 = __pyx_v_j;
        if (__pyx_t_102 < 0) __pyx_t_102 += __pyx_bshape_0_backwardyp;
        if (__pyx_t_103 < 0) __pyx_t_103 += __pyx_bshape_1_backwardyp;
        __pyx_t_104 = __pyx_v_i;
        __pyx_t_105 = __pyx_v_j;
        if (__pyx_t_104 < 0) __pyx_t_104 += __pyx_bshape_0_backwardyp;
        if (__pyx_t_105 < 0) __pyx_t_105 += __pyx_bshape_1_backwardyp;
        *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardyp.buf, __pyx_t_104, __pyx_bstride_0_backwardyp, __pyx_t_105, __pyx_bstride_1_backwardyp) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_backwardyp.buf, __pyx_t_102, __pyx_bstride_0_backwardyp, __pyx_t_103, __pyx_bstride_1_backwardyp));
        goto __pyx_L19;
      }
      __pyx_L19:;
    }
  }
 135: 
 136:     return backward, backwardxp, backwardyp
  /* "vision/track/pairwise.pyx":136
 *                 backwardyp[i, j] = backwardyp[i+1, j]
 * 
 *     return backward, backwardxp, backwardyp             # <<<<<<<<<<<<<<
 * 
 * def hinge(inscores, int radius = 30):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_INCREF(((PyObject *)__pyx_v_backward));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_backward));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_backward));
  __Pyx_INCREF(((PyObject *)__pyx_v_backwardxp));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_backwardxp));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_backwardxp));
  __Pyx_INCREF(((PyObject *)__pyx_v_backwardyp));
  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_backwardyp));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_backwardyp));
  __pyx_r = ((PyObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_forwardxp);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_forwardyp);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_scores);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_forward);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_backwardxp);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_backwardyp);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_backward);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("vision.track.pairwise.manhattan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_forwardxp);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_forwardyp);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_scores);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_forward);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_backwardxp);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_backwardyp);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_backward);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_scores);
  __Pyx_XDECREF((PyObject *)__pyx_v_forward);
  __Pyx_XDECREF((PyObject *)__pyx_v_backward);
  __Pyx_XDECREF((PyObject *)__pyx_v_forwardxp);
  __Pyx_XDECREF((PyObject *)__pyx_v_forwardyp);
  __Pyx_XDECREF((PyObject *)__pyx_v_backwardxp);
  __Pyx_XDECREF((PyObject *)__pyx_v_backwardyp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 137: 
 138: def hinge(inscores, int radius = 30):
/* "vision/track/pairwise.pyx":138
 *     return backward, backwardxp, backwardyp
 * 
 * def hinge(inscores, int radius = 30):             # <<<<<<<<<<<<<<
 *     cdef int w, h, i, j, pstart, pstop, x, y
 *     w, h = inscores.shape
 */

static PyObject *__pyx_pf_6vision_5track_8pairwise_3hinge(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6vision_5track_8pairwise_3hinge[] = "hinge(inscores, int radius=30)";
static PyMethodDef __pyx_mdef_6vision_5track_8pairwise_3hinge = {__Pyx_NAMESTR("hinge"), (PyCFunction)__pyx_pf_6vision_5track_8pairwise_3hinge, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6vision_5track_8pairwise_3hinge)};
static PyObject *__pyx_pf_6vision_5track_8pairwise_3hinge(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_inscores = 0;
  int __pyx_v_radius;
  int __pyx_v_w;
  int __pyx_v_h;
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_pstart;
  int __pyx_v_pstop;
  int __pyx_v_x;
  int __pyx_v_y;
  PyArrayObject *__pyx_v_scores = 0;
  PyArrayObject *__pyx_v_vertical = 0;
  PyArrayObject *__pyx_v_horizontal = 0;
  PyArrayObject *__pyx_v_xp = 0;
  PyArrayObject *__pyx_v_yp = 0;
  Py_buffer __pyx_bstruct_vertical;
  Py_ssize_t __pyx_bstride_0_vertical = 0;
  Py_ssize_t __pyx_bstride_1_vertical = 0;
  Py_ssize_t __pyx_bshape_0_vertical = 0;
  Py_ssize_t __pyx_bshape_1_vertical = 0;
  Py_buffer __pyx_bstruct_xp;
  Py_ssize_t __pyx_bstride_0_xp = 0;
  Py_ssize_t __pyx_bstride_1_xp = 0;
  Py_ssize_t __pyx_bshape_0_xp = 0;
  Py_ssize_t __pyx_bshape_1_xp = 0;
  Py_buffer __pyx_bstruct_yp;
  Py_ssize_t __pyx_bstride_0_yp = 0;
  Py_ssize_t __pyx_bstride_1_yp = 0;
  Py_ssize_t __pyx_bshape_0_yp = 0;
  Py_ssize_t __pyx_bshape_1_yp = 0;
  Py_buffer __pyx_bstruct_scores;
  Py_ssize_t __pyx_bstride_0_scores = 0;
  Py_ssize_t __pyx_bstride_1_scores = 0;
  Py_ssize_t __pyx_bshape_0_scores = 0;
  Py_ssize_t __pyx_bshape_1_scores = 0;
  Py_buffer __pyx_bstruct_horizontal;
  Py_ssize_t __pyx_bstride_0_horizontal = 0;
  Py_ssize_t __pyx_bstride_1_horizontal = 0;
  Py_ssize_t __pyx_bshape_0_horizontal = 0;
  Py_ssize_t __pyx_bshape_1_horizontal = 0;
  PyObject *__pyx_r = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__inscores,&__pyx_n_s__radius,0};
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hinge");
  __pyx_self = __pyx_self;
  {
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  0:
        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inscores);
        if (likely(values[0])) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radius);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "hinge") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_inscores = values[0];
    if (values[1]) {
      __pyx_v_radius = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_radius == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    } else {
      __pyx_v_radius = ((int)30);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("hinge", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("vision.track.pairwise.hinge", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_bstruct_scores.buf = NULL;
  __pyx_bstruct_vertical.buf = NULL;
  __pyx_bstruct_horizontal.buf = NULL;
  __pyx_bstruct_xp.buf = NULL;
  __pyx_bstruct_yp.buf = NULL;

  /* "vision/track/pairwise.pyx":138
 *     return backward, backwardxp, backwardyp
 * 
 * def hinge(inscores, int radius = 30):             # <<<<<<<<<<<<<<
 *     cdef int w, h, i, j, pstart, pstop, x, y
 *     w, h = inscores.shape
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6vision_5track_8pairwise_3hinge, NULL, __pyx_n_s_13); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__hinge, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 139:     cdef int w, h, i, j, pstart, pstop, x, y
 140:     w, h = inscores.shape
  /* "vision/track/pairwise.pyx":140
 * def hinge(inscores, int radius = 30):
 *     cdef int w, h, i, j, pstart, pstop, x, y
 *     w, h = inscores.shape             # <<<<<<<<<<<<<<
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=2] scores = inscores
 */
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_inscores, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    if (likely(PyTuple_CheckExact(sequence))) {
      if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
        if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
        else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
        if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
        else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L7_unpacking_done;
    __pyx_L6_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
    if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_L7_unpacking_done:;
  }
  __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_w = __pyx_t_6;
  __pyx_v_h = __pyx_t_7;
 141: 
 142:     cdef numpy.ndarray[numpy.double_t, ndim=2] scores = inscores
  /* "vision/track/pairwise.pyx":142
 *     w, h = inscores.shape
 * 
 *     cdef numpy.ndarray[numpy.double_t, ndim=2] scores = inscores             # <<<<<<<<<<<<<<
 *     cdef numpy.ndarray[numpy.double_t, ndim=2] vertical, horizontal
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] xp, yp
 */
  if (!(likely(((__pyx_v_inscores) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_inscores, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_8 = ((PyArrayObject *)__pyx_v_inscores);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_scores, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_scores = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_scores.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_scores = __pyx_bstruct_scores.strides[0]; __pyx_bstride_1_scores = __pyx_bstruct_scores.strides[1];
      __pyx_bshape_0_scores = __pyx_bstruct_scores.shape[0]; __pyx_bshape_1_scores = __pyx_bstruct_scores.shape[1];
    }
  }
  __pyx_t_8 = 0;
  __Pyx_INCREF(__pyx_v_inscores);
  __pyx_v_scores = ((PyArrayObject *)__pyx_v_inscores);
 143:     cdef numpy.ndarray[numpy.double_t, ndim=2] vertical, horizontal
 144:     cdef numpy.ndarray[numpy.int_t, ndim=2] xp, yp
 145: 
 146:     vertical = numpy.zeros((w,h), dtype = numpy.double)
  /* "vision/track/pairwise.pyx":146
 *     cdef numpy.ndarray[numpy.int_t, ndim=2] xp, yp
 * 
 *     vertical = numpy.zeros((w,h), dtype = numpy.double)             # <<<<<<<<<<<<<<
 *     horizontal = numpy.zeros((w,h), dtype = numpy.double)
 *     xp = numpy.zeros((w,h), dtype = numpy.int)
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
  __pyx_t_4 = 0;
  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__double); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_10 = ((PyArrayObject *)__pyx_t_9);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_vertical);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_vertical, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_vertical, (PyObject*)__pyx_v_vertical, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
    }
    __pyx_bstride_0_vertical = __pyx_bstruct_vertical.strides[0]; __pyx_bstride_1_vertical = __pyx_bstruct_vertical.strides[1];
    __pyx_bshape_0_vertical = __pyx_bstruct_vertical.shape[0]; __pyx_bshape_1_vertical = __pyx_bstruct_vertical.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_10 = 0;
  __pyx_v_vertical = ((PyArrayObject *)__pyx_t_9);
  __pyx_t_9 = 0;
 147:     horizontal = numpy.zeros((w,h), dtype = numpy.double)
  /* "vision/track/pairwise.pyx":147
 * 
 *     vertical = numpy.zeros((w,h), dtype = numpy.double)
 *     horizontal = numpy.zeros((w,h), dtype = numpy.double)             # <<<<<<<<<<<<<<
 *     xp = numpy.zeros((w,h), dtype = numpy.int)
 *     yp = numpy.zeros((w,h), dtype = numpy.int)
 */
  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_4 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_9 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
  __pyx_t_3 = 0;
  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__double); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_10 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_horizontal);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_horizontal, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_horizontal, (PyObject*)__pyx_v_horizontal, &__Pyx_TypeInfo_nn___pyx_t_5numpy_double_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      }
    }
    __pyx_bstride_0_horizontal = __pyx_bstruct_horizontal.strides[0]; __pyx_bstride_1_horizontal = __pyx_bstruct_horizontal.strides[1];
    __pyx_bshape_0_horizontal = __pyx_bstruct_horizontal.shape[0]; __pyx_bshape_1_horizontal = __pyx_bstruct_horizontal.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_10 = 0;
  __pyx_v_horizontal = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 148:     xp = numpy.zeros((w,h), dtype = numpy.int)
  /* "vision/track/pairwise.pyx":148
 *     vertical = numpy.zeros((w,h), dtype = numpy.double)
 *     horizontal = numpy.zeros((w,h), dtype = numpy.double)
 *     xp = numpy.zeros((w,h), dtype = numpy.int)             # <<<<<<<<<<<<<<
 *     yp = numpy.zeros((w,h), dtype = numpy.int)
 * 
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
  __pyx_t_4 = 0;
  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__int); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_14 = ((PyArrayObject *)__pyx_t_9);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_xp);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_xp, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_xp, (PyObject*)__pyx_v_xp, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
    }
    __pyx_bstride_0_xp = __pyx_bstruct_xp.strides[0]; __pyx_bstride_1_xp = __pyx_bstruct_xp.strides[1];
    __pyx_bshape_0_xp = __pyx_bstruct_xp.shape[0]; __pyx_bshape_1_xp = __pyx_bstruct_xp.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_14 = 0;
  __pyx_v_xp = ((PyArrayObject *)__pyx_t_9);
  __pyx_t_9 = 0;
 149:     yp = numpy.zeros((w,h), dtype = numpy.int)
  /* "vision/track/pairwise.pyx":149
 *     horizontal = numpy.zeros((w,h), dtype = numpy.double)
 *     xp = numpy.zeros((w,h), dtype = numpy.int)
 *     yp = numpy.zeros((w,h), dtype = numpy.int)             # <<<<<<<<<<<<<<
 * 
 *     for i in range(w):
 */
  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_4 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyInt_FromLong(__pyx_v_w); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_9 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
  __pyx_t_3 = 0;
  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__int); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_14 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_yp);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_yp, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_yp, (PyObject*)__pyx_v_yp, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      }
    }
    __pyx_bstride_0_yp = __pyx_bstruct_yp.strides[0]; __pyx_bstride_1_yp = __pyx_bstruct_yp.strides[1];
    __pyx_bshape_0_yp = __pyx_bstruct_yp.shape[0]; __pyx_bshape_1_yp = __pyx_bstruct_yp.shape[1];
    if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_t_14 = 0;
  __pyx_v_yp = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 150: 
 151:     for i in range(w):
  /* "vision/track/pairwise.pyx":151
 *     yp = numpy.zeros((w,h), dtype = numpy.int)
 * 
 *     for i in range(w):             # <<<<<<<<<<<<<<
 *         for j in range(h):
 *             pstart = j - radius
 */
  __pyx_t_7 = __pyx_v_w;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_7; __pyx_t_6+=1) {
    __pyx_v_i = __pyx_t_6;
 152:         for j in range(h):
    /* "vision/track/pairwise.pyx":152
 * 
 *     for i in range(w):
 *         for j in range(h):             # <<<<<<<<<<<<<<
 *             pstart = j - radius
 *             pstop  = j + radius
 */
    __pyx_t_15 = __pyx_v_h;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_j = __pyx_t_16;
 153:             pstart = j - radius
      /* "vision/track/pairwise.pyx":153
 *     for i in range(w):
 *         for j in range(h):
 *             pstart = j - radius             # <<<<<<<<<<<<<<
 *             pstop  = j + radius
 *             if pstart < 0:
 */
      __pyx_v_pstart = (__pyx_v_j - __pyx_v_radius);
 154:             pstop  = j + radius
      /* "vision/track/pairwise.pyx":154
 *         for j in range(h):
 *             pstart = j - radius
 *             pstop  = j + radius             # <<<<<<<<<<<<<<
 *             if pstart < 0:
 *                 pstart = 0
 */
      __pyx_v_pstop = (__pyx_v_j + __pyx_v_radius);
 155:             if pstart < 0:
      /* "vision/track/pairwise.pyx":155
 *             pstart = j - radius
 *             pstop  = j + radius
 *             if pstart < 0:             # <<<<<<<<<<<<<<
 *                 pstart = 0
 *             if pstop > h:
 */
      __pyx_t_17 = (__pyx_v_pstart < 0);
      if (__pyx_t_17) {
 156:                 pstart = 0
        /* "vision/track/pairwise.pyx":156
 *             pstop  = j + radius
 *             if pstart < 0:
 *                 pstart = 0             # <<<<<<<<<<<<<<
 *             if pstop > h:
 *                 pstop = h
 */
        __pyx_v_pstart = 0;
        goto __pyx_L12;
      }
      __pyx_L12:;
 157:             if pstop > h:
      /* "vision/track/pairwise.pyx":157
 *             if pstart < 0:
 *                 pstart = 0
 *             if pstop > h:             # <<<<<<<<<<<<<<
 *                 pstop = h
 *             vertical[i, j] = scores[i, j]
 */
      __pyx_t_17 = (__pyx_v_pstop > __pyx_v_h);
      if (__pyx_t_17) {
 158:                 pstop = h
        /* "vision/track/pairwise.pyx":158
 *                 pstart = 0
 *             if pstop > h:
 *                 pstop = h             # <<<<<<<<<<<<<<
 *             vertical[i, j] = scores[i, j]
 *             yp[i, j] = j
 */
        __pyx_v_pstop = __pyx_v_h;
        goto __pyx_L13;
      }
      __pyx_L13:;
 159:             vertical[i, j] = scores[i, j]
      /* "vision/track/pairwise.pyx":159
 *             if pstop > h:
 *                 pstop = h
 *             vertical[i, j] = scores[i, j]             # <<<<<<<<<<<<<<
 *             yp[i, j] = j
 *             for y in range(pstart, pstop):
 */
      __pyx_t_18 = __pyx_v_i;
      __pyx_t_19 = __pyx_v_j;
      if (__pyx_t_18 < 0) __pyx_t_18 += __pyx_bshape_0_scores;
      if (__pyx_t_19 < 0) __pyx_t_19 += __pyx_bshape_1_scores;
      __pyx_t_20 = __pyx_v_i;
      __pyx_t_21 = __pyx_v_j;
      if (__pyx_t_20 < 0) __pyx_t_20 += __pyx_bshape_0_vertical;
      if (__pyx_t_21 < 0) __pyx_t_21 += __pyx_bshape_1_vertical;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_vertical.buf, __pyx_t_20, __pyx_bstride_0_vertical, __pyx_t_21, __pyx_bstride_1_vertical) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_scores.buf, __pyx_t_18, __pyx_bstride_0_scores, __pyx_t_19, __pyx_bstride_1_scores));
 160:             yp[i, j] = j
      /* "vision/track/pairwise.pyx":160
 *                 pstop = h
 *             vertical[i, j] = scores[i, j]
 *             yp[i, j] = j             # <<<<<<<<<<<<<<
 *             for y in range(pstart, pstop):
 *                 if scores[i, y] < vertical[i, j]:
 */
      __pyx_t_22 = __pyx_v_i;
      __pyx_t_23 = __pyx_v_j;
      if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_bshape_0_yp;
      if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_bshape_1_yp;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_yp.buf, __pyx_t_22, __pyx_bstride_0_yp, __pyx_t_23, __pyx_bstride_1_yp) = __pyx_v_j;
 161:             for y in range(pstart, pstop):
      /* "vision/track/pairwise.pyx":161
 *             vertical[i, j] = scores[i, j]
 *             yp[i, j] = j
 *             for y in range(pstart, pstop):             # <<<<<<<<<<<<<<
 *                 if scores[i, y] < vertical[i, j]:
 *                     vertical[i, j] = scores[i, y]
 */
      __pyx_t_24 = __pyx_v_pstop;
      for (__pyx_t_25 = __pyx_v_pstart; __pyx_t_25 < __pyx_t_24; __pyx_t_25+=1) {
        __pyx_v_y = __pyx_t_25;
 162:                 if scores[i, y] < vertical[i, j]:
        /* "vision/track/pairwise.pyx":162
 *             yp[i, j] = j
 *             for y in range(pstart, pstop):
 *                 if scores[i, y] < vertical[i, j]:             # <<<<<<<<<<<<<<
 *                     vertical[i, j] = scores[i, y]
 *                     yp[i, j] = y
 */
        __pyx_t_26 = __pyx_v_i;
        __pyx_t_27 = __pyx_v_y;
        if (__pyx_t_26 < 0) __pyx_t_26 += __pyx_bshape_0_scores;
        if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_1_scores;
        __pyx_t_28 = __pyx_v_i;
        __pyx_t_29 = __pyx_v_j;
        if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_vertical;
        if (__pyx_t_29 < 0) __pyx_t_29 += __pyx_bshape_1_vertical;
        __pyx_t_17 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_scores.buf, __pyx_t_26, __pyx_bstride_0_scores, __pyx_t_27, __pyx_bstride_1_scores)) < (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_vertical.buf, __pyx_t_28, __pyx_bstride_0_vertical, __pyx_t_29, __pyx_bstride_1_vertical)));
        if (__pyx_t_17) {
 163:                     vertical[i, j] = scores[i, y]
          /* "vision/track/pairwise.pyx":163
 *             for y in range(pstart, pstop):
 *                 if scores[i, y] < vertical[i, j]:
 *                     vertical[i, j] = scores[i, y]             # <<<<<<<<<<<<<<
 *                     yp[i, j] = y
 * 
 */
          __pyx_t_30 = __pyx_v_i;
          __pyx_t_31 = __pyx_v_y;
          if (__pyx_t_30 < 0) __pyx_t_30 += __pyx_bshape_0_scores;
          if (__pyx_t_31 < 0) __pyx_t_31 += __pyx_bshape_1_scores;
          __pyx_t_32 = __pyx_v_i;
          __pyx_t_33 = __pyx_v_j;
          if (__pyx_t_32 < 0) __pyx_t_32 += __pyx_bshape_0_vertical;
          if (__pyx_t_33 < 0) __pyx_t_33 += __pyx_bshape_1_vertical;
          *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_vertical.buf, __pyx_t_32, __pyx_bstride_0_vertical, __pyx_t_33, __pyx_bstride_1_vertical) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_scores.buf, __pyx_t_30, __pyx_bstride_0_scores, __pyx_t_31, __pyx_bstride_1_scores));
 164:                     yp[i, j] = y
          /* "vision/track/pairwise.pyx":164
 *                 if scores[i, y] < vertical[i, j]:
 *                     vertical[i, j] = scores[i, y]
 *                     yp[i, j] = y             # <<<<<<<<<<<<<<
 * 
 *     for i in range(w):
 */
          __pyx_t_34 = __pyx_v_i;
          __pyx_t_35 = __pyx_v_j;
          if (__pyx_t_34 < 0) __pyx_t_34 += __pyx_bshape_0_yp;
          if (__pyx_t_35 < 0) __pyx_t_35 += __pyx_bshape_1_yp;
          *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_yp.buf, __pyx_t_34, __pyx_bstride_0_yp, __pyx_t_35, __pyx_bstride_1_yp) = __pyx_v_y;
          goto __pyx_L16;
        }
        __pyx_L16:;
      }
    }
  }
 165: 
 166:     for i in range(w):
  /* "vision/track/pairwise.pyx":166
 *                     yp[i, j] = y
 * 
 *     for i in range(w):             # <<<<<<<<<<<<<<
 *         for j in range(h):
 *             pstart = i - radius
 */
  __pyx_t_7 = __pyx_v_w;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_7; __pyx_t_6+=1) {
    __pyx_v_i = __pyx_t_6;
 167:         for j in range(h):
    /* "vision/track/pairwise.pyx":167
 * 
 *     for i in range(w):
 *         for j in range(h):             # <<<<<<<<<<<<<<
 *             pstart = i - radius
 *             pstop  = i + radius
 */
    __pyx_t_15 = __pyx_v_h;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_j = __pyx_t_16;
 168:             pstart = i - radius
      /* "vision/track/pairwise.pyx":168
 *     for i in range(w):
 *         for j in range(h):
 *             pstart = i - radius             # <<<<<<<<<<<<<<
 *             pstop  = i + radius
 *             if pstart < 0:
 */
      __pyx_v_pstart = (__pyx_v_i - __pyx_v_radius);
 169:             pstop  = i + radius
      /* "vision/track/pairwise.pyx":169
 *         for j in range(h):
 *             pstart = i - radius
 *             pstop  = i + radius             # <<<<<<<<<<<<<<
 *             if pstart < 0:
 *                 pstart = 0
 */
      __pyx_v_pstop = (__pyx_v_i + __pyx_v_radius);
 170:             if pstart < 0:
      /* "vision/track/pairwise.pyx":170
 *             pstart = i - radius
 *             pstop  = i + radius
 *             if pstart < 0:             # <<<<<<<<<<<<<<
 *                 pstart = 0
 *             if pstop > w:
 */
      __pyx_t_17 = (__pyx_v_pstart < 0);
      if (__pyx_t_17) {
 171:                 pstart = 0
        /* "vision/track/pairwise.pyx":171
 *             pstop  = i + radius
 *             if pstart < 0:
 *                 pstart = 0             # <<<<<<<<<<<<<<
 *             if pstop > w:
 *                 pstop = w
 */
        __pyx_v_pstart = 0;
        goto __pyx_L21;
      }
      __pyx_L21:;
 172:             if pstop > w:
      /* "vision/track/pairwise.pyx":172
 *             if pstart < 0:
 *                 pstart = 0
 *             if pstop > w:             # <<<<<<<<<<<<<<
 *                 pstop = w
 *             horizontal[i, j] = vertical[i, j]
 */
      __pyx_t_17 = (__pyx_v_pstop > __pyx_v_w);
      if (__pyx_t_17) {
 173:                 pstop = w
        /* "vision/track/pairwise.pyx":173
 *                 pstart = 0
 *             if pstop > w:
 *                 pstop = w             # <<<<<<<<<<<<<<
 *             horizontal[i, j] = vertical[i, j]
 *             xp[i, j] = i
 */
        __pyx_v_pstop = __pyx_v_w;
        goto __pyx_L22;
      }
      __pyx_L22:;
 174:             horizontal[i, j] = vertical[i, j]
      /* "vision/track/pairwise.pyx":174
 *             if pstop > w:
 *                 pstop = w
 *             horizontal[i, j] = vertical[i, j]             # <<<<<<<<<<<<<<
 *             xp[i, j] = i
 *             for x in range(pstart, pstop):
 */
      __pyx_t_24 = __pyx_v_i;
      __pyx_t_25 = __pyx_v_j;
      if (__pyx_t_24 < 0) __pyx_t_24 += __pyx_bshape_0_vertical;
      if (__pyx_t_25 < 0) __pyx_t_25 += __pyx_bshape_1_vertical;
      __pyx_t_36 = __pyx_v_i;
      __pyx_t_37 = __pyx_v_j;
      if (__pyx_t_36 < 0) __pyx_t_36 += __pyx_bshape_0_horizontal;
      if (__pyx_t_37 < 0) __pyx_t_37 += __pyx_bshape_1_horizontal;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_horizontal.buf, __pyx_t_36, __pyx_bstride_0_horizontal, __pyx_t_37, __pyx_bstride_1_horizontal) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_vertical.buf, __pyx_t_24, __pyx_bstride_0_vertical, __pyx_t_25, __pyx_bstride_1_vertical));
 175:             xp[i, j] = i
      /* "vision/track/pairwise.pyx":175
 *                 pstop = w
 *             horizontal[i, j] = vertical[i, j]
 *             xp[i, j] = i             # <<<<<<<<<<<<<<
 *             for x in range(pstart, pstop):
 *                 if vertical[x, j] < horizontal[i, j]:
 */
      __pyx_t_38 = __pyx_v_i;
      __pyx_t_39 = __pyx_v_j;
      if (__pyx_t_38 < 0) __pyx_t_38 += __pyx_bshape_0_xp;
      if (__pyx_t_39 < 0) __pyx_t_39 += __pyx_bshape_1_xp;
      *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_xp.buf, __pyx_t_38, __pyx_bstride_0_xp, __pyx_t_39, __pyx_bstride_1_xp) = __pyx_v_i;
 176:             for x in range(pstart, pstop):
      /* "vision/track/pairwise.pyx":176
 *             horizontal[i, j] = vertical[i, j]
 *             xp[i, j] = i
 *             for x in range(pstart, pstop):             # <<<<<<<<<<<<<<
 *                 if vertical[x, j] < horizontal[i, j]:
 *                     horizontal[i, j] = vertical[x, j]
 */
      __pyx_t_40 = __pyx_v_pstop;
      for (__pyx_t_41 = __pyx_v_pstart; __pyx_t_41 < __pyx_t_40; __pyx_t_41+=1) {
        __pyx_v_x = __pyx_t_41;
 177:                 if vertical[x, j] < horizontal[i, j]:
        /* "vision/track/pairwise.pyx":177
 *             xp[i, j] = i
 *             for x in range(pstart, pstop):
 *                 if vertical[x, j] < horizontal[i, j]:             # <<<<<<<<<<<<<<
 *                     horizontal[i, j] = vertical[x, j]
 *                     xp[i, j] = x
 */
        __pyx_t_42 = __pyx_v_x;
        __pyx_t_43 = __pyx_v_j;
        if (__pyx_t_42 < 0) __pyx_t_42 += __pyx_bshape_0_vertical;
        if (__pyx_t_43 < 0) __pyx_t_43 += __pyx_bshape_1_vertical;
        __pyx_t_44 = __pyx_v_i;
        __pyx_t_45 = __pyx_v_j;
        if (__pyx_t_44 < 0) __pyx_t_44 += __pyx_bshape_0_horizontal;
        if (__pyx_t_45 < 0) __pyx_t_45 += __pyx_bshape_1_horizontal;
        __pyx_t_17 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_vertical.buf, __pyx_t_42, __pyx_bstride_0_vertical, __pyx_t_43, __pyx_bstride_1_vertical)) < (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_horizontal.buf, __pyx_t_44, __pyx_bstride_0_horizontal, __pyx_t_45, __pyx_bstride_1_horizontal)));
        if (__pyx_t_17) {
 178:                     horizontal[i, j] = vertical[x, j]
          /* "vision/track/pairwise.pyx":178
 *             for x in range(pstart, pstop):
 *                 if vertical[x, j] < horizontal[i, j]:
 *                     horizontal[i, j] = vertical[x, j]             # <<<<<<<<<<<<<<
 *                     xp[i, j] = x
 * 
 */
          __pyx_t_46 = __pyx_v_x;
          __pyx_t_47 = __pyx_v_j;
          if (__pyx_t_46 < 0) __pyx_t_46 += __pyx_bshape_0_vertical;
          if (__pyx_t_47 < 0) __pyx_t_47 += __pyx_bshape_1_vertical;
          __pyx_t_48 = __pyx_v_i;
          __pyx_t_49 = __pyx_v_j;
          if (__pyx_t_48 < 0) __pyx_t_48 += __pyx_bshape_0_horizontal;
          if (__pyx_t_49 < 0) __pyx_t_49 += __pyx_bshape_1_horizontal;
          *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_horizontal.buf, __pyx_t_48, __pyx_bstride_0_horizontal, __pyx_t_49, __pyx_bstride_1_horizontal) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_double_t *, __pyx_bstruct_vertical.buf, __pyx_t_46, __pyx_bstride_0_vertical, __pyx_t_47, __pyx_bstride_1_vertical));
 179:                     xp[i, j] = x
          /* "vision/track/pairwise.pyx":179
 *                 if vertical[x, j] < horizontal[i, j]:
 *                     horizontal[i, j] = vertical[x, j]
 *                     xp[i, j] = x             # <<<<<<<<<<<<<<
 * 
 *     return horizontal, xp, yp
 */
          __pyx_t_50 = __pyx_v_i;
          __pyx_t_51 = __pyx_v_j;
          if (__pyx_t_50 < 0) __pyx_t_50 += __pyx_bshape_0_xp;
          if (__pyx_t_51 < 0) __pyx_t_51 += __pyx_bshape_1_xp;
          *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int_t *, __pyx_bstruct_xp.buf, __pyx_t_50, __pyx_bstride_0_xp, __pyx_t_51, __pyx_bstride_1_xp) = __pyx_v_x;
          goto __pyx_L25;
        }
        __pyx_L25:;
      }
    }
  }
 180: 
 181:     return horizontal, xp, yp
  /* "vision/track/pairwise.pyx":181
 *                     xp[i, j] = x
 * 
 *     return horizontal, xp, yp             # <<<<<<<<<<<<<<
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_INCREF(((PyObject *)__pyx_v_horizontal));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_horizontal));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_horizontal));
  __Pyx_INCREF(((PyObject *)__pyx_v_xp));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_xp));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_xp));
  __Pyx_INCREF(((PyObject *)__pyx_v_yp));
  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_yp));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_yp));
  __pyx_r = ((PyObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_vertical);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_xp);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_yp);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_scores);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_horizontal);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("vision.track.pairwise.hinge", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_vertical);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_xp);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_yp);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_scores);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_horizontal);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_scores);
  __Pyx_XDECREF((PyObject *)__pyx_v_vertical);
  __Pyx_XDECREF((PyObject *)__pyx_v_horizontal);
  __Pyx_XDECREF((PyObject *)__pyx_v_xp);
  __Pyx_XDECREF((PyObject *)__pyx_v_yp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}