Generated by Cython 0.15.1+ on Fri Oct 14 00:10:55 2011

Raw output: xutils.c

 1: #!/usr/bin/env python
  /* "xutils.pyx":1
 * #!/usr/bin/env python             # <<<<<<<<<<<<<<
 * # -*- coding: utf8 -*-
 * #
 */
  __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: # -*- coding: utf8 -*-
 3: #
 4: #    Project: Azimuthal integration
 5: #             https://forge.epn-campus.eu/projects/azimuthal
 6: #
 7: #    File: "$Id$"
 8: #
 9: #    Copyright (C) European Synchrotron Radiation Facility, Grenoble, France
 10: #
 11: #    Principal author:       Jérôme Kieffer (Jerome.Kieffer@ESRF.eu)
 12: #
 13: #    This program is free software: you can redistribute it and/or modify
 14: #    it under the terms of the GNU General Public License as published by
 15: #    the Free Software Foundation, either version 3 of the License, or
 16: #    (at your option) any later version.
 17: #
 18: #    This program is distributed in the hope that it will be useful,
 19: #    but WITHOUT ANY WARRANTY; without even the implied warranty of
 20: #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 21: #    GNU General Public License for more details.
 22: #
 23: #    You should have received a copy of the GNU General Public License
 24: #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 25: #
 26: 
 27: import cython
 28: cimport numpy
 29: import numpy
  /* "xutils.pyx":29
 * import cython
 * cimport numpy
 * import numpy             # <<<<<<<<<<<<<<
 * 
 * ctypedef numpy.int64_t DTYPE_int64_t
 */
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __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 = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 30: 
 31: ctypedef numpy.int64_t DTYPE_int64_t
/* "xutils.pyx":31
 * import numpy
 * 
 * ctypedef numpy.int64_t DTYPE_int64_t             # <<<<<<<<<<<<<<
 * ctypedef numpy.float64_t DTYPE_float64_t
 * 
 */
typedef __pyx_t_5numpy_int64_t __pyx_t_6xutils_DTYPE_int64_t;
 32: ctypedef numpy.float64_t DTYPE_float64_t
 33: 
 34: def boundingBox(data):
/* "xutils.pyx":34
 * ctypedef numpy.float64_t DTYPE_float64_t
 * 
 * def boundingBox(data):             # <<<<<<<<<<<<<<
 *     """
 *     Calculate bounding box around
 */

static PyObject *__pyx_pf_6xutils_boundingBox(PyObject *__pyx_self, PyObject *__pyx_v_data); /*proto*/
static char __pyx_doc_6xutils_boundingBox[] = "\n    Calculate bounding box around   \n\n    @param img: 2D array like\n    @return: 4-typle (d0_min, d1_min, d0_max, d1_max)\n    \n    \n    NOTA: Does not work :( \n     \n    ";
static PyMethodDef __pyx_mdef_6xutils_boundingBox = {__Pyx_NAMESTR("boundingBox"), (PyCFunction)__pyx_pf_6xutils_boundingBox, METH_O, __Pyx_DOCSTR(__pyx_doc_6xutils_boundingBox)};
static PyObject *__pyx_pf_6xutils_boundingBox(PyObject *__pyx_self, PyObject *__pyx_v_data) {
  PyArrayObject *__pyx_v_shape = 0;
  long __pyx_v_ndims;
  PyArrayObject *__pyx_v_mins = 0;
  PyArrayObject *__pyx_v_maxs = 0;
  long __pyx_v_i;
  long __pyx_v_j;
  long __pyx_v_k;
  long __pyx_v_l;
  Py_buffer __pyx_bstruct_maxs;
  Py_ssize_t __pyx_bstride_0_maxs = 0;
  Py_ssize_t __pyx_bshape_0_maxs = 0;
  Py_buffer __pyx_bstruct_shape;
  Py_ssize_t __pyx_bstride_0_shape = 0;
  Py_ssize_t __pyx_bshape_0_shape = 0;
  Py_buffer __pyx_bstruct_mins;
  Py_ssize_t __pyx_bstride_0_mins = 0;
  Py_ssize_t __pyx_bshape_0_mins = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("boundingBox");
  __pyx_self = __pyx_self;
  __pyx_bstruct_shape.buf = NULL;
  __pyx_bstruct_mins.buf = NULL;
  __pyx_bstruct_maxs.buf = NULL;

  /* "xutils.pyx":34
 * ctypedef numpy.float64_t DTYPE_float64_t
 * 
 * def boundingBox(data):             # <<<<<<<<<<<<<<
 *     """
 *     Calculate bounding box around
 */
  __pyx_k_tuple_15 = PyTuple_New(9); if (unlikely(!__pyx_k_tuple_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_15));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__data));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 0, ((PyObject *)__pyx_n_s__data));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__data));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__shape));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 1, ((PyObject *)__pyx_n_s__shape));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__shape));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__ndims));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 2, ((PyObject *)__pyx_n_s__ndims));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ndims));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__mins));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 3, ((PyObject *)__pyx_n_s__mins));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__mins));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__maxs));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 4, ((PyObject *)__pyx_n_s__maxs));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__maxs));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__i));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 5, ((PyObject *)__pyx_n_s__i));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__i));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__j));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 6, ((PyObject *)__pyx_n_s__j));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__j));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__k));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 7, ((PyObject *)__pyx_n_s__k));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__k));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__l));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 8, ((PyObject *)__pyx_n_s__l));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__l));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_15));

  /* "xutils.pyx":34
 * ctypedef numpy.float64_t DTYPE_float64_t
 * 
 * def boundingBox(data):             # <<<<<<<<<<<<<<
 *     """
 *     Calculate bounding box around
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6xutils_boundingBox, NULL, __pyx_n_s__xutils); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__boundingBox, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 35:     """
 36:     Calculate bounding box around
 37: 
 38:     @param img: 2D array like
 39:     @return: 4-typle (d0_min, d1_min, d0_max, d1_max)
 40: 
 41: 
 42:     NOTA: Does not work :(
 43: 
 44:     """
 45:     cdef numpy.ndarray[long, ndim = 1] shape = numpy.array(data.shape)
  /* "xutils.pyx":45
 * 
 *     """
 *     cdef numpy.ndarray[long, ndim = 1] shape = numpy.array(data.shape)             # <<<<<<<<<<<<<<
 *     cdef long ndims = data.ndim
 * 
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_data, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __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 = 45; __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 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__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 = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_4 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_shape, (PyObject*)__pyx_t_4, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_shape = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_shape.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_shape = __pyx_bstruct_shape.strides[0];
      __pyx_bshape_0_shape = __pyx_bstruct_shape.shape[0];
    }
  }
  __pyx_t_4 = 0;
  __pyx_v_shape = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 46:     cdef long ndims = data.ndim
  /* "xutils.pyx":46
 *     """
 *     cdef numpy.ndarray[long, ndim = 1] shape = numpy.array(data.shape)
 *     cdef long ndims = data.ndim             # <<<<<<<<<<<<<<
 * 
 * #    cdef numpy.ndarray[float, ndim = ndims] fdata = data.astype(float)
 */
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_data, __pyx_n_s__ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyInt_AsLong(__pyx_t_1); if (unlikely((__pyx_t_5 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ndims = __pyx_t_5;
 47: 
 48: #    cdef numpy.ndarray[float, ndim = ndims] fdata = data.astype(float)
 49:     cdef numpy.ndarray[long, ndim = 1] mins = numpy.array(shape)
  /* "xutils.pyx":49
 * 
 * #    cdef numpy.ndarray[float, ndim = ndims] fdata = data.astype(float)
 *     cdef numpy.ndarray[long, ndim = 1] mins = numpy.array(shape)             # <<<<<<<<<<<<<<
 *     cdef numpy.ndarray[long, ndim = 1] maxs = numpy.zeros(ndims, dtype=int)
 * 
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_INCREF(((PyObject *)__pyx_v_shape));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_shape));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_shape));
  __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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 = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_mins, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_mins = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_mins.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_mins = __pyx_bstruct_mins.strides[0];
      __pyx_bshape_0_mins = __pyx_bstruct_mins.shape[0];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_mins = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
 50:     cdef numpy.ndarray[long, ndim = 1] maxs = numpy.zeros(ndims, dtype=int)
  /* "xutils.pyx":50
 * #    cdef numpy.ndarray[float, ndim = ndims] fdata = data.astype(float)
 *     cdef numpy.ndarray[long, ndim = 1] mins = numpy.array(shape)
 *     cdef numpy.ndarray[long, ndim = 1] maxs = numpy.zeros(ndims, dtype=int)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __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 = 50; __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_ndims); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  PyTuple_SET_ITEM(__pyx_t_3, 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 = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), ((PyObject *)((PyObject*)(&PyInt_Type)))) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_7 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_maxs, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_maxs = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_maxs.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_bstride_0_maxs = __pyx_bstruct_maxs.strides[0];
      __pyx_bshape_0_maxs = __pyx_bstruct_maxs.shape[0];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_maxs = ((PyArrayObject *)__pyx_t_7);
  __pyx_t_7 = 0;
 51: 
 52: 
 53:     cdef long  i = 0
  /* "xutils.pyx":53
 * 
 * 
 *     cdef long  i = 0             # <<<<<<<<<<<<<<
 *     cdef long  j = 0
 *     cdef long  k = 0
 */
  __pyx_v_i = 0;
 54:     cdef long  j = 0
  /* "xutils.pyx":54
 * 
 *     cdef long  i = 0
 *     cdef long  j = 0             # <<<<<<<<<<<<<<
 *     cdef long  k = 0
 *     cdef long  l = 0
 */
  __pyx_v_j = 0;
 55:     cdef long  k = 0
  /* "xutils.pyx":55
 *     cdef long  i = 0
 *     cdef long  j = 0
 *     cdef long  k = 0             # <<<<<<<<<<<<<<
 *     cdef long  l = 0
 * #    cdef DTYPE_float64_t x = 0.0
 */
  __pyx_v_k = 0;
 56:     cdef long  l = 0
  /* "xutils.pyx":56
 *     cdef long  j = 0
 *     cdef long  k = 0
 *     cdef long  l = 0             # <<<<<<<<<<<<<<
 * #    cdef DTYPE_float64_t x = 0.0
 * #    cdef DTYPE_float64_t zero64 = 0.0
 */
  __pyx_v_l = 0;
 57: #    cdef DTYPE_float64_t x = 0.0
 58: #    cdef DTYPE_float64_t zero64 = 0.0
 59:     if ndims == 1:
    /* "xutils.pyx":59
 * #    cdef DTYPE_float64_t x = 0.0
 * #    cdef DTYPE_float64_t zero64 = 0.0
 *     if ndims == 1:             # <<<<<<<<<<<<<<
 * #        with nogil:
 *             for i in range(shape[0]):
 */
    case 1:
 60: #        with nogil:
 61:             for i in range(shape[0]):
    /* "xutils.pyx":61
 *     if ndims == 1:
 * #        with nogil:
 *             for i in range(shape[0]):             # <<<<<<<<<<<<<<
 *                 if data[i] > 0.0:
 *                     if i < mins[0]:
 */
    __pyx_t_5 = 0;
    __pyx_t_9 = -1;
    if (__pyx_t_5 < 0) {
      __pyx_t_5 += __pyx_bshape_0_shape;
      if (unlikely(__pyx_t_5 < 0)) __pyx_t_9 = 0;
    } else if (unlikely(__pyx_t_5 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
    if (unlikely(__pyx_t_9 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_9);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_10 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_5, __pyx_bstride_0_shape));
    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
      __pyx_v_i = __pyx_t_11;
 62:                 if data[i] > 0.0:
      /* "xutils.pyx":62
 * #        with nogil:
 *             for i in range(shape[0]):
 *                 if data[i] > 0.0:             # <<<<<<<<<<<<<<
 *                     if i < mins[0]:
 *                         mins[0] = i
 */
      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_data, __pyx_v_i, sizeof(long), PyInt_FromLong); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyObject_RichCompare(__pyx_t_7, __pyx_t_2, Py_GT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (__pyx_t_12) {
 63:                     if i < mins[0]:
        /* "xutils.pyx":63
 *             for i in range(shape[0]):
 *                 if data[i] > 0.0:
 *                     if i < mins[0]:             # <<<<<<<<<<<<<<
 *                         mins[0] = i
 *                     if i > maxs[0]:
 */
        __pyx_t_13 = 0;
        __pyx_t_9 = -1;
        if (__pyx_t_13 < 0) {
          __pyx_t_13 += __pyx_bshape_0_mins;
          if (unlikely(__pyx_t_13 < 0)) __pyx_t_9 = 0;
        } else if (unlikely(__pyx_t_13 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
        if (unlikely(__pyx_t_9 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_9);
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        __pyx_t_12 = (__pyx_v_i < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_13, __pyx_bstride_0_mins)));
        if (__pyx_t_12) {
 64:                         mins[0] = i
          /* "xutils.pyx":64
 *                 if data[i] > 0.0:
 *                     if i < mins[0]:
 *                         mins[0] = i             # <<<<<<<<<<<<<<
 *                     if i > maxs[0]:
 *                         maxs[0] = i
 */
          __pyx_t_14 = 0;
          __pyx_t_9 = -1;
          if (__pyx_t_14 < 0) {
            __pyx_t_14 += __pyx_bshape_0_mins;
            if (unlikely(__pyx_t_14 < 0)) __pyx_t_9 = 0;
          } else if (unlikely(__pyx_t_14 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
          if (unlikely(__pyx_t_9 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_9);
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_14, __pyx_bstride_0_mins) = __pyx_v_i;
          goto __pyx_L8;
        }
        __pyx_L8:;
 65:                     if i > maxs[0]:
        /* "xutils.pyx":65
 *                     if i < mins[0]:
 *                         mins[0] = i
 *                     if i > maxs[0]:             # <<<<<<<<<<<<<<
 *                         maxs[0] = i
 *     elif ndims == 2:
 */
        __pyx_t_15 = 0;
        __pyx_t_9 = -1;
        if (__pyx_t_15 < 0) {
          __pyx_t_15 += __pyx_bshape_0_maxs;
          if (unlikely(__pyx_t_15 < 0)) __pyx_t_9 = 0;
        } else if (unlikely(__pyx_t_15 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
        if (unlikely(__pyx_t_9 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_9);
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        __pyx_t_12 = (__pyx_v_i > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_15, __pyx_bstride_0_maxs)));
        if (__pyx_t_12) {
 66:                         maxs[0] = i
          /* "xutils.pyx":66
 *                         mins[0] = i
 *                     if i > maxs[0]:
 *                         maxs[0] = i             # <<<<<<<<<<<<<<
 *     elif ndims == 2:
 * #        with nogil:
 */
          __pyx_t_16 = 0;
          __pyx_t_9 = -1;
          if (__pyx_t_16 < 0) {
            __pyx_t_16 += __pyx_bshape_0_maxs;
            if (unlikely(__pyx_t_16 < 0)) __pyx_t_9 = 0;
          } else if (unlikely(__pyx_t_16 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
          if (unlikely(__pyx_t_9 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_9);
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_16, __pyx_bstride_0_maxs) = __pyx_v_i;
          goto __pyx_L9;
        }
        __pyx_L9:;
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    break;
 67:     elif ndims == 2:
    /* "xutils.pyx":67
 *                     if i > maxs[0]:
 *                         maxs[0] = i
 *     elif ndims == 2:             # <<<<<<<<<<<<<<
 * #        with nogil:
 *             for i in range(shape[0]):
 */
    case 2:
 68: #        with nogil:
 69:             for i in range(shape[0]):
    /* "xutils.pyx":69
 *     elif ndims == 2:
 * #        with nogil:
 *             for i in range(shape[0]):             # <<<<<<<<<<<<<<
 *                 for j in range(shape[1]):
 *                     if data[i, j] > 0.0 :
 */
    __pyx_t_10 = 0;
    __pyx_t_9 = -1;
    if (__pyx_t_10 < 0) {
      __pyx_t_10 += __pyx_bshape_0_shape;
      if (unlikely(__pyx_t_10 < 0)) __pyx_t_9 = 0;
    } else if (unlikely(__pyx_t_10 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
    if (unlikely(__pyx_t_9 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_9);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_11 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_10, __pyx_bstride_0_shape));
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_11; __pyx_t_17+=1) {
      __pyx_v_i = __pyx_t_17;
 70:                 for j in range(shape[1]):
      /* "xutils.pyx":70
 * #        with nogil:
 *             for i in range(shape[0]):
 *                 for j in range(shape[1]):             # <<<<<<<<<<<<<<
 *                     if data[i, j] > 0.0 :
 *                         if i < mins[0]:
 */
      __pyx_t_18 = 1;
      __pyx_t_9 = -1;
      if (__pyx_t_18 < 0) {
        __pyx_t_18 += __pyx_bshape_0_shape;
        if (unlikely(__pyx_t_18 < 0)) __pyx_t_9 = 0;
      } else if (unlikely(__pyx_t_18 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
      if (unlikely(__pyx_t_9 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_9);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_19 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_18, __pyx_bstride_0_shape));
      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
        __pyx_v_j = __pyx_t_20;
 71:                     if data[i, j] > 0.0 :
        /* "xutils.pyx":71
 *             for i in range(shape[0]):
 *                 for j in range(shape[1]):
 *                     if data[i, j] > 0.0 :             # <<<<<<<<<<<<<<
 *                         if i < mins[0]:
 *                             mins[0] = i
 */
        __pyx_t_3 = PyInt_FromLong(__pyx_v_i); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_2 = PyInt_FromLong(__pyx_v_j); 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_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(((PyObject *)__pyx_t_7));
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_2);
        __pyx_t_3 = 0;
        __pyx_t_2 = 0;
        __pyx_t_2 = PyObject_GetItem(__pyx_v_data, ((PyObject *)__pyx_t_7)); if (!__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(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
        __pyx_t_7 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_7, Py_GT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (__pyx_t_12) {
 72:                         if i < mins[0]:
          /* "xutils.pyx":72
 *                 for j in range(shape[1]):
 *                     if data[i, j] > 0.0 :
 *                         if i < mins[0]:             # <<<<<<<<<<<<<<
 *                             mins[0] = i
 *                         if i > maxs[0]:
 */
          __pyx_t_21 = 0;
          __pyx_t_9 = -1;
          if (__pyx_t_21 < 0) {
            __pyx_t_21 += __pyx_bshape_0_mins;
            if (unlikely(__pyx_t_21 < 0)) __pyx_t_9 = 0;
          } else if (unlikely(__pyx_t_21 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
          if (unlikely(__pyx_t_9 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_9);
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_t_12 = (__pyx_v_i < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_21, __pyx_bstride_0_mins)));
          if (__pyx_t_12) {
 73:                             mins[0] = i
            /* "xutils.pyx":73
 *                     if data[i, j] > 0.0 :
 *                         if i < mins[0]:
 *                             mins[0] = i             # <<<<<<<<<<<<<<
 *                         if i > maxs[0]:
 *                             maxs[0] = i
 */
            __pyx_t_22 = 0;
            __pyx_t_9 = -1;
            if (__pyx_t_22 < 0) {
              __pyx_t_22 += __pyx_bshape_0_mins;
              if (unlikely(__pyx_t_22 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_22 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_22, __pyx_bstride_0_mins) = __pyx_v_i;
            goto __pyx_L15;
          }
          __pyx_L15:;
 74:                         if i > maxs[0]:
          /* "xutils.pyx":74
 *                         if i < mins[0]:
 *                             mins[0] = i
 *                         if i > maxs[0]:             # <<<<<<<<<<<<<<
 *                             maxs[0] = i
 *                         if j < mins[1]:
 */
          __pyx_t_23 = 0;
          __pyx_t_9 = -1;
          if (__pyx_t_23 < 0) {
            __pyx_t_23 += __pyx_bshape_0_maxs;
            if (unlikely(__pyx_t_23 < 0)) __pyx_t_9 = 0;
          } else if (unlikely(__pyx_t_23 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
          if (unlikely(__pyx_t_9 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_9);
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_t_12 = (__pyx_v_i > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_23, __pyx_bstride_0_maxs)));
          if (__pyx_t_12) {
 75:                             maxs[0] = i
            /* "xutils.pyx":75
 *                             mins[0] = i
 *                         if i > maxs[0]:
 *                             maxs[0] = i             # <<<<<<<<<<<<<<
 *                         if j < mins[1]:
 *                             mins[1] = i
 */
            __pyx_t_24 = 0;
            __pyx_t_9 = -1;
            if (__pyx_t_24 < 0) {
              __pyx_t_24 += __pyx_bshape_0_maxs;
              if (unlikely(__pyx_t_24 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_24 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_24, __pyx_bstride_0_maxs) = __pyx_v_i;
            goto __pyx_L16;
          }
          __pyx_L16:;
 76:                         if j < mins[1]:
          /* "xutils.pyx":76
 *                         if i > maxs[0]:
 *                             maxs[0] = i
 *                         if j < mins[1]:             # <<<<<<<<<<<<<<
 *                             mins[1] = i
 *                         if j > maxs[1]:
 */
          __pyx_t_25 = 1;
          __pyx_t_9 = -1;
          if (__pyx_t_25 < 0) {
            __pyx_t_25 += __pyx_bshape_0_mins;
            if (unlikely(__pyx_t_25 < 0)) __pyx_t_9 = 0;
          } else if (unlikely(__pyx_t_25 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
          if (unlikely(__pyx_t_9 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_9);
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_t_12 = (__pyx_v_j < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_25, __pyx_bstride_0_mins)));
          if (__pyx_t_12) {
 77:                             mins[1] = i
            /* "xutils.pyx":77
 *                             maxs[0] = i
 *                         if j < mins[1]:
 *                             mins[1] = i             # <<<<<<<<<<<<<<
 *                         if j > maxs[1]:
 *                             maxs[1] = i
 */
            __pyx_t_26 = 1;
            __pyx_t_9 = -1;
            if (__pyx_t_26 < 0) {
              __pyx_t_26 += __pyx_bshape_0_mins;
              if (unlikely(__pyx_t_26 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_26 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_26, __pyx_bstride_0_mins) = __pyx_v_i;
            goto __pyx_L17;
          }
          __pyx_L17:;
 78:                         if j > maxs[1]:
          /* "xutils.pyx":78
 *                         if j < mins[1]:
 *                             mins[1] = i
 *                         if j > maxs[1]:             # <<<<<<<<<<<<<<
 *                             maxs[1] = i
 *     elif ndims == 3:
 */
          __pyx_t_27 = 1;
          __pyx_t_9 = -1;
          if (__pyx_t_27 < 0) {
            __pyx_t_27 += __pyx_bshape_0_maxs;
            if (unlikely(__pyx_t_27 < 0)) __pyx_t_9 = 0;
          } else if (unlikely(__pyx_t_27 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
          if (unlikely(__pyx_t_9 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_9);
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_t_12 = (__pyx_v_j > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_27, __pyx_bstride_0_maxs)));
          if (__pyx_t_12) {
 79:                             maxs[1] = i
            /* "xutils.pyx":79
 *                             mins[1] = i
 *                         if j > maxs[1]:
 *                             maxs[1] = i             # <<<<<<<<<<<<<<
 *     elif ndims == 3:
 * #        with nogil:
 */
            __pyx_t_28 = 1;
            __pyx_t_9 = -1;
            if (__pyx_t_28 < 0) {
              __pyx_t_28 += __pyx_bshape_0_maxs;
              if (unlikely(__pyx_t_28 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_28 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_28, __pyx_bstride_0_maxs) = __pyx_v_i;
            goto __pyx_L18;
          }
          __pyx_L18:;
          goto __pyx_L14;
        }
        __pyx_L14:;
      }
    }
    break;
 80:     elif ndims == 3:
    /* "xutils.pyx":80
 *                         if j > maxs[1]:
 *                             maxs[1] = i
 *     elif ndims == 3:             # <<<<<<<<<<<<<<
 * #        with nogil:
 *             for i in range(shape[0]):
 */
    case 3:
 81: #        with nogil:
 82:             for i in range(shape[0]):
    /* "xutils.pyx":82
 *     elif ndims == 3:
 * #        with nogil:
 *             for i in range(shape[0]):             # <<<<<<<<<<<<<<
 *                 for j in range(shape[1]):
 *                     for k in range(shape[2]):
 */
    __pyx_t_11 = 0;
    __pyx_t_9 = -1;
    if (__pyx_t_11 < 0) {
      __pyx_t_11 += __pyx_bshape_0_shape;
      if (unlikely(__pyx_t_11 < 0)) __pyx_t_9 = 0;
    } else if (unlikely(__pyx_t_11 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
    if (unlikely(__pyx_t_9 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_9);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_17 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_11, __pyx_bstride_0_shape));
    for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_17; __pyx_t_19+=1) {
      __pyx_v_i = __pyx_t_19;
 83:                 for j in range(shape[1]):
      /* "xutils.pyx":83
 * #        with nogil:
 *             for i in range(shape[0]):
 *                 for j in range(shape[1]):             # <<<<<<<<<<<<<<
 *                     for k in range(shape[2]):
 *                         if  data[i, j, k] > 0.0:
 */
      __pyx_t_20 = 1;
      __pyx_t_9 = -1;
      if (__pyx_t_20 < 0) {
        __pyx_t_20 += __pyx_bshape_0_shape;
        if (unlikely(__pyx_t_20 < 0)) __pyx_t_9 = 0;
      } else if (unlikely(__pyx_t_20 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
      if (unlikely(__pyx_t_9 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_9);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_29 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_20, __pyx_bstride_0_shape));
      for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) {
        __pyx_v_j = __pyx_t_30;
 84:                     for k in range(shape[2]):
        /* "xutils.pyx":84
 *             for i in range(shape[0]):
 *                 for j in range(shape[1]):
 *                     for k in range(shape[2]):             # <<<<<<<<<<<<<<
 *                         if  data[i, j, k] > 0.0:
 *                             if i < mins[0]:
 */
        __pyx_t_31 = 2;
        __pyx_t_9 = -1;
        if (__pyx_t_31 < 0) {
          __pyx_t_31 += __pyx_bshape_0_shape;
          if (unlikely(__pyx_t_31 < 0)) __pyx_t_9 = 0;
        } else if (unlikely(__pyx_t_31 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
        if (unlikely(__pyx_t_9 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_9);
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        __pyx_t_32 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_31, __pyx_bstride_0_shape));
        for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) {
          __pyx_v_k = __pyx_t_33;
 85:                         if  data[i, j, k] > 0.0:
          /* "xutils.pyx":85
 *                 for j in range(shape[1]):
 *                     for k in range(shape[2]):
 *                         if  data[i, j, k] > 0.0:             # <<<<<<<<<<<<<<
 *                             if i < mins[0]:
 *                                 mins[0] = i
 */
          __pyx_t_3 = PyInt_FromLong(__pyx_v_i); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_7 = PyInt_FromLong(__pyx_v_j); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(((PyObject *)__pyx_t_1));
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_2);
          __pyx_t_3 = 0;
          __pyx_t_7 = 0;
          __pyx_t_2 = 0;
          __pyx_t_2 = PyObject_GetItem(__pyx_v_data, ((PyObject *)__pyx_t_1)); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
          __pyx_t_1 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_7 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GT); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (__pyx_t_12) {
 86:                             if i < mins[0]:
            /* "xutils.pyx":86
 *                     for k in range(shape[2]):
 *                         if  data[i, j, k] > 0.0:
 *                             if i < mins[0]:             # <<<<<<<<<<<<<<
 *                                 mins[0] = i
 *                             if i > maxs[0]:
 */
            __pyx_t_34 = 0;
            __pyx_t_9 = -1;
            if (__pyx_t_34 < 0) {
              __pyx_t_34 += __pyx_bshape_0_mins;
              if (unlikely(__pyx_t_34 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_34 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            __pyx_t_12 = (__pyx_v_i < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_34, __pyx_bstride_0_mins)));
            if (__pyx_t_12) {
 87:                                 mins[0] = i
              /* "xutils.pyx":87
 *                         if  data[i, j, k] > 0.0:
 *                             if i < mins[0]:
 *                                 mins[0] = i             # <<<<<<<<<<<<<<
 *                             if i > maxs[0]:
 *                                 maxs[0] = i
 */
              __pyx_t_35 = 0;
              __pyx_t_9 = -1;
              if (__pyx_t_35 < 0) {
                __pyx_t_35 += __pyx_bshape_0_mins;
                if (unlikely(__pyx_t_35 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_35 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_35, __pyx_bstride_0_mins) = __pyx_v_i;
              goto __pyx_L26;
            }
            __pyx_L26:;
 88:                             if i > maxs[0]:
            /* "xutils.pyx":88
 *                             if i < mins[0]:
 *                                 mins[0] = i
 *                             if i > maxs[0]:             # <<<<<<<<<<<<<<
 *                                 maxs[0] = i
 *                             if j < mins[1]:
 */
            __pyx_t_36 = 0;
            __pyx_t_9 = -1;
            if (__pyx_t_36 < 0) {
              __pyx_t_36 += __pyx_bshape_0_maxs;
              if (unlikely(__pyx_t_36 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_36 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            __pyx_t_12 = (__pyx_v_i > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_36, __pyx_bstride_0_maxs)));
            if (__pyx_t_12) {
 89:                                 maxs[0] = i
              /* "xutils.pyx":89
 *                                 mins[0] = i
 *                             if i > maxs[0]:
 *                                 maxs[0] = i             # <<<<<<<<<<<<<<
 *                             if j < mins[1]:
 *                                 mins[1] = i
 */
              __pyx_t_37 = 0;
              __pyx_t_9 = -1;
              if (__pyx_t_37 < 0) {
                __pyx_t_37 += __pyx_bshape_0_maxs;
                if (unlikely(__pyx_t_37 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_37 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_37, __pyx_bstride_0_maxs) = __pyx_v_i;
              goto __pyx_L27;
            }
            __pyx_L27:;
 90:                             if j < mins[1]:
            /* "xutils.pyx":90
 *                             if i > maxs[0]:
 *                                 maxs[0] = i
 *                             if j < mins[1]:             # <<<<<<<<<<<<<<
 *                                 mins[1] = i
 *                             if j > maxs[1]:
 */
            __pyx_t_38 = 1;
            __pyx_t_9 = -1;
            if (__pyx_t_38 < 0) {
              __pyx_t_38 += __pyx_bshape_0_mins;
              if (unlikely(__pyx_t_38 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_38 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            __pyx_t_12 = (__pyx_v_j < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_38, __pyx_bstride_0_mins)));
            if (__pyx_t_12) {
 91:                                 mins[1] = i
              /* "xutils.pyx":91
 *                                 maxs[0] = i
 *                             if j < mins[1]:
 *                                 mins[1] = i             # <<<<<<<<<<<<<<
 *                             if j > maxs[1]:
 *                                 maxs[1] = i
 */
              __pyx_t_39 = 1;
              __pyx_t_9 = -1;
              if (__pyx_t_39 < 0) {
                __pyx_t_39 += __pyx_bshape_0_mins;
                if (unlikely(__pyx_t_39 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_39 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_39, __pyx_bstride_0_mins) = __pyx_v_i;
              goto __pyx_L28;
            }
            __pyx_L28:;
 92:                             if j > maxs[1]:
            /* "xutils.pyx":92
 *                             if j < mins[1]:
 *                                 mins[1] = i
 *                             if j > maxs[1]:             # <<<<<<<<<<<<<<
 *                                 maxs[1] = i
 *                             if k < mins[2]:
 */
            __pyx_t_40 = 1;
            __pyx_t_9 = -1;
            if (__pyx_t_40 < 0) {
              __pyx_t_40 += __pyx_bshape_0_maxs;
              if (unlikely(__pyx_t_40 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_40 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            __pyx_t_12 = (__pyx_v_j > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_40, __pyx_bstride_0_maxs)));
            if (__pyx_t_12) {
 93:                                 maxs[1] = i
              /* "xutils.pyx":93
 *                                 mins[1] = i
 *                             if j > maxs[1]:
 *                                 maxs[1] = i             # <<<<<<<<<<<<<<
 *                             if k < mins[2]:
 *                                 mins[2] = i
 */
              __pyx_t_41 = 1;
              __pyx_t_9 = -1;
              if (__pyx_t_41 < 0) {
                __pyx_t_41 += __pyx_bshape_0_maxs;
                if (unlikely(__pyx_t_41 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_41 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_41, __pyx_bstride_0_maxs) = __pyx_v_i;
              goto __pyx_L29;
            }
            __pyx_L29:;
 94:                             if k < mins[2]:
            /* "xutils.pyx":94
 *                             if j > maxs[1]:
 *                                 maxs[1] = i
 *                             if k < mins[2]:             # <<<<<<<<<<<<<<
 *                                 mins[2] = i
 *                             if k > maxs[2]:
 */
            __pyx_t_42 = 2;
            __pyx_t_9 = -1;
            if (__pyx_t_42 < 0) {
              __pyx_t_42 += __pyx_bshape_0_mins;
              if (unlikely(__pyx_t_42 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_42 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            __pyx_t_12 = (__pyx_v_k < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_42, __pyx_bstride_0_mins)));
            if (__pyx_t_12) {
 95:                                 mins[2] = i
              /* "xutils.pyx":95
 *                                 maxs[1] = i
 *                             if k < mins[2]:
 *                                 mins[2] = i             # <<<<<<<<<<<<<<
 *                             if k > maxs[2]:
 *                                 maxs[2] = i
 */
              __pyx_t_43 = 2;
              __pyx_t_9 = -1;
              if (__pyx_t_43 < 0) {
                __pyx_t_43 += __pyx_bshape_0_mins;
                if (unlikely(__pyx_t_43 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_43 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_43, __pyx_bstride_0_mins) = __pyx_v_i;
              goto __pyx_L30;
            }
            __pyx_L30:;
 96:                             if k > maxs[2]:
            /* "xutils.pyx":96
 *                             if k < mins[2]:
 *                                 mins[2] = i
 *                             if k > maxs[2]:             # <<<<<<<<<<<<<<
 *                                 maxs[2] = i
 *     elif ndims == 4:
 */
            __pyx_t_44 = 2;
            __pyx_t_9 = -1;
            if (__pyx_t_44 < 0) {
              __pyx_t_44 += __pyx_bshape_0_maxs;
              if (unlikely(__pyx_t_44 < 0)) __pyx_t_9 = 0;
            } else if (unlikely(__pyx_t_44 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
            if (unlikely(__pyx_t_9 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_9);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            __pyx_t_12 = (__pyx_v_k > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_44, __pyx_bstride_0_maxs)));
            if (__pyx_t_12) {
 97:                                 maxs[2] = i
              /* "xutils.pyx":97
 *                                 mins[2] = i
 *                             if k > maxs[2]:
 *                                 maxs[2] = i             # <<<<<<<<<<<<<<
 *     elif ndims == 4:
 * #        with nogil:
 */
              __pyx_t_45 = 2;
              __pyx_t_9 = -1;
              if (__pyx_t_45 < 0) {
                __pyx_t_45 += __pyx_bshape_0_maxs;
                if (unlikely(__pyx_t_45 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_45 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_45, __pyx_bstride_0_maxs) = __pyx_v_i;
              goto __pyx_L31;
            }
            __pyx_L31:;
            goto __pyx_L25;
          }
          __pyx_L25:;
        }
      }
    }
    break;
 98:     elif ndims == 4:
  /* "xutils.pyx":98
 *                             if k > maxs[2]:
 *                                 maxs[2] = i
 *     elif ndims == 4:             # <<<<<<<<<<<<<<
 * #        with nogil:
 *             for i in range(shape[0]):
 */
  switch (__pyx_v_ndims) {

    /* "xutils.pyx":98
 *                             if k > maxs[2]:
 *                                 maxs[2] = i
 *     elif ndims == 4:             # <<<<<<<<<<<<<<
 * #        with nogil:
 *             for i in range(shape[0]):
 */
    case 4:
 99: #        with nogil:
 100:             for i in range(shape[0]):
    /* "xutils.pyx":100
 *     elif ndims == 4:
 * #        with nogil:
 *             for i in range(shape[0]):             # <<<<<<<<<<<<<<
 *                 for j in range(shape[1]):
 *                     for k in range(shape[2]):
 */
    __pyx_t_17 = 0;
    __pyx_t_9 = -1;
    if (__pyx_t_17 < 0) {
      __pyx_t_17 += __pyx_bshape_0_shape;
      if (unlikely(__pyx_t_17 < 0)) __pyx_t_9 = 0;
    } else if (unlikely(__pyx_t_17 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
    if (unlikely(__pyx_t_9 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_9);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_19 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_17, __pyx_bstride_0_shape));
    for (__pyx_t_29 = 0; __pyx_t_29 < __pyx_t_19; __pyx_t_29+=1) {
      __pyx_v_i = __pyx_t_29;
 101:                 for j in range(shape[1]):
      /* "xutils.pyx":101
 * #        with nogil:
 *             for i in range(shape[0]):
 *                 for j in range(shape[1]):             # <<<<<<<<<<<<<<
 *                     for k in range(shape[2]):
 *                         for l in range(shape[3]):
 */
      __pyx_t_30 = 1;
      __pyx_t_9 = -1;
      if (__pyx_t_30 < 0) {
        __pyx_t_30 += __pyx_bshape_0_shape;
        if (unlikely(__pyx_t_30 < 0)) __pyx_t_9 = 0;
      } else if (unlikely(__pyx_t_30 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
      if (unlikely(__pyx_t_9 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_9);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_32 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_30, __pyx_bstride_0_shape));
      for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) {
        __pyx_v_j = __pyx_t_33;
 102:                     for k in range(shape[2]):
        /* "xutils.pyx":102
 *             for i in range(shape[0]):
 *                 for j in range(shape[1]):
 *                     for k in range(shape[2]):             # <<<<<<<<<<<<<<
 *                         for l in range(shape[3]):
 *                             if  data[i, j, k, l] > 0.0:
 */
        __pyx_t_46 = 2;
        __pyx_t_9 = -1;
        if (__pyx_t_46 < 0) {
          __pyx_t_46 += __pyx_bshape_0_shape;
          if (unlikely(__pyx_t_46 < 0)) __pyx_t_9 = 0;
        } else if (unlikely(__pyx_t_46 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
        if (unlikely(__pyx_t_9 != -1)) {
          __Pyx_RaiseBufferIndexError(__pyx_t_9);
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        __pyx_t_47 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_46, __pyx_bstride_0_shape));
        for (__pyx_t_48 = 0; __pyx_t_48 < __pyx_t_47; __pyx_t_48+=1) {
          __pyx_v_k = __pyx_t_48;
 103:                         for l in range(shape[3]):
          /* "xutils.pyx":103
 *                 for j in range(shape[1]):
 *                     for k in range(shape[2]):
 *                         for l in range(shape[3]):             # <<<<<<<<<<<<<<
 *                             if  data[i, j, k, l] > 0.0:
 *                                 if i < mins[0]:
 */
          __pyx_t_49 = 3;
          __pyx_t_9 = -1;
          if (__pyx_t_49 < 0) {
            __pyx_t_49 += __pyx_bshape_0_shape;
            if (unlikely(__pyx_t_49 < 0)) __pyx_t_9 = 0;
          } else if (unlikely(__pyx_t_49 >= __pyx_bshape_0_shape)) __pyx_t_9 = 0;
          if (unlikely(__pyx_t_9 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_9);
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_t_50 = (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_shape.buf, __pyx_t_49, __pyx_bstride_0_shape));
          for (__pyx_t_51 = 0; __pyx_t_51 < __pyx_t_50; __pyx_t_51+=1) {
            __pyx_v_l = __pyx_t_51;
 104:                             if  data[i, j, k, l] > 0.0:
            /* "xutils.pyx":104
 *                     for k in range(shape[2]):
 *                         for l in range(shape[3]):
 *                             if  data[i, j, k, l] > 0.0:             # <<<<<<<<<<<<<<
 *                                 if i < mins[0]:
 *                                     mins[0] = i
 */
            __pyx_t_7 = PyInt_FromLong(__pyx_v_i); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_1 = PyInt_FromLong(__pyx_v_j); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_2 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = PyInt_FromLong(__pyx_v_l); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_52 = PyTuple_New(4); if (unlikely(!__pyx_t_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            __Pyx_GOTREF(((PyObject *)__pyx_t_52));
            PyTuple_SET_ITEM(__pyx_t_52, 0, __pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_52, 1, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_52, 2, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_52, 3, __pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_3);
            __pyx_t_7 = 0;
            __pyx_t_1 = 0;
            __pyx_t_2 = 0;
            __pyx_t_3 = 0;
            __pyx_t_3 = PyObject_GetItem(__pyx_v_data, ((PyObject *)__pyx_t_52)); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(((PyObject *)__pyx_t_52)); __pyx_t_52 = 0;
            __pyx_t_52 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            __Pyx_GOTREF(__pyx_t_52);
            __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_52, Py_GT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_52); __pyx_t_52 = 0;
            __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (__pyx_t_12) {
 105:                                 if i < mins[0]:
              /* "xutils.pyx":105
 *                         for l in range(shape[3]):
 *                             if  data[i, j, k, l] > 0.0:
 *                                 if i < mins[0]:             # <<<<<<<<<<<<<<
 *                                     mins[0] = i
 *                                 if i > maxs[0]:
 */
              __pyx_t_53 = 0;
              __pyx_t_9 = -1;
              if (__pyx_t_53 < 0) {
                __pyx_t_53 += __pyx_bshape_0_mins;
                if (unlikely(__pyx_t_53 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_53 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              __pyx_t_12 = (__pyx_v_i < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_53, __pyx_bstride_0_mins)));
              if (__pyx_t_12) {
 106:                                     mins[0] = i
                /* "xutils.pyx":106
 *                             if  data[i, j, k, l] > 0.0:
 *                                 if i < mins[0]:
 *                                     mins[0] = i             # <<<<<<<<<<<<<<
 *                                 if i > maxs[0]:
 *                                     maxs[0] = i
 */
                __pyx_t_54 = 0;
                __pyx_t_9 = -1;
                if (__pyx_t_54 < 0) {
                  __pyx_t_54 += __pyx_bshape_0_mins;
                  if (unlikely(__pyx_t_54 < 0)) __pyx_t_9 = 0;
                } else if (unlikely(__pyx_t_54 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
                if (unlikely(__pyx_t_9 != -1)) {
                  __Pyx_RaiseBufferIndexError(__pyx_t_9);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                }
                *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_54, __pyx_bstride_0_mins) = __pyx_v_i;
                goto __pyx_L41;
              }
              __pyx_L41:;
 107:                                 if i > maxs[0]:
              /* "xutils.pyx":107
 *                                 if i < mins[0]:
 *                                     mins[0] = i
 *                                 if i > maxs[0]:             # <<<<<<<<<<<<<<
 *                                     maxs[0] = i
 *                                 if j < mins[1]:
 */
              __pyx_t_55 = 0;
              __pyx_t_9 = -1;
              if (__pyx_t_55 < 0) {
                __pyx_t_55 += __pyx_bshape_0_maxs;
                if (unlikely(__pyx_t_55 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_55 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              __pyx_t_12 = (__pyx_v_i > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_55, __pyx_bstride_0_maxs)));
              if (__pyx_t_12) {
 108:                                     maxs[0] = i
                /* "xutils.pyx":108
 *                                     mins[0] = i
 *                                 if i > maxs[0]:
 *                                     maxs[0] = i             # <<<<<<<<<<<<<<
 *                                 if j < mins[1]:
 *                                     mins[1] = i
 */
                __pyx_t_56 = 0;
                __pyx_t_9 = -1;
                if (__pyx_t_56 < 0) {
                  __pyx_t_56 += __pyx_bshape_0_maxs;
                  if (unlikely(__pyx_t_56 < 0)) __pyx_t_9 = 0;
                } else if (unlikely(__pyx_t_56 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
                if (unlikely(__pyx_t_9 != -1)) {
                  __Pyx_RaiseBufferIndexError(__pyx_t_9);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                }
                *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_56, __pyx_bstride_0_maxs) = __pyx_v_i;
                goto __pyx_L42;
              }
              __pyx_L42:;
 109:                                 if j < mins[1]:
              /* "xutils.pyx":109
 *                                 if i > maxs[0]:
 *                                     maxs[0] = i
 *                                 if j < mins[1]:             # <<<<<<<<<<<<<<
 *                                     mins[1] = i
 *                                 if j > maxs[1]:
 */
              __pyx_t_57 = 1;
              __pyx_t_9 = -1;
              if (__pyx_t_57 < 0) {
                __pyx_t_57 += __pyx_bshape_0_mins;
                if (unlikely(__pyx_t_57 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_57 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              __pyx_t_12 = (__pyx_v_j < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_57, __pyx_bstride_0_mins)));
              if (__pyx_t_12) {
 110:                                     mins[1] = i
                /* "xutils.pyx":110
 *                                     maxs[0] = i
 *                                 if j < mins[1]:
 *                                     mins[1] = i             # <<<<<<<<<<<<<<
 *                                 if j > maxs[1]:
 *                                     maxs[1] = i
 */
                __pyx_t_58 = 1;
                __pyx_t_9 = -1;
                if (__pyx_t_58 < 0) {
                  __pyx_t_58 += __pyx_bshape_0_mins;
                  if (unlikely(__pyx_t_58 < 0)) __pyx_t_9 = 0;
                } else if (unlikely(__pyx_t_58 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
                if (unlikely(__pyx_t_9 != -1)) {
                  __Pyx_RaiseBufferIndexError(__pyx_t_9);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                }
                *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_58, __pyx_bstride_0_mins) = __pyx_v_i;
                goto __pyx_L43;
              }
              __pyx_L43:;
 111:                                 if j > maxs[1]:
              /* "xutils.pyx":111
 *                                 if j < mins[1]:
 *                                     mins[1] = i
 *                                 if j > maxs[1]:             # <<<<<<<<<<<<<<
 *                                     maxs[1] = i
 *                                 if k < mins[2]:
 */
              __pyx_t_59 = 1;
              __pyx_t_9 = -1;
              if (__pyx_t_59 < 0) {
                __pyx_t_59 += __pyx_bshape_0_maxs;
                if (unlikely(__pyx_t_59 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_59 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              __pyx_t_12 = (__pyx_v_j > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_59, __pyx_bstride_0_maxs)));
              if (__pyx_t_12) {
 112:                                     maxs[1] = i
                /* "xutils.pyx":112
 *                                     mins[1] = i
 *                                 if j > maxs[1]:
 *                                     maxs[1] = i             # <<<<<<<<<<<<<<
 *                                 if k < mins[2]:
 *                                     mins[2] = i
 */
                __pyx_t_60 = 1;
                __pyx_t_9 = -1;
                if (__pyx_t_60 < 0) {
                  __pyx_t_60 += __pyx_bshape_0_maxs;
                  if (unlikely(__pyx_t_60 < 0)) __pyx_t_9 = 0;
                } else if (unlikely(__pyx_t_60 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
                if (unlikely(__pyx_t_9 != -1)) {
                  __Pyx_RaiseBufferIndexError(__pyx_t_9);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                }
                *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_60, __pyx_bstride_0_maxs) = __pyx_v_i;
                goto __pyx_L44;
              }
              __pyx_L44:;
 113:                                 if k < mins[2]:
              /* "xutils.pyx":113
 *                                 if j > maxs[1]:
 *                                     maxs[1] = i
 *                                 if k < mins[2]:             # <<<<<<<<<<<<<<
 *                                     mins[2] = i
 *                                 if k > maxs[2]:
 */
              __pyx_t_61 = 2;
              __pyx_t_9 = -1;
              if (__pyx_t_61 < 0) {
                __pyx_t_61 += __pyx_bshape_0_mins;
                if (unlikely(__pyx_t_61 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_61 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              __pyx_t_12 = (__pyx_v_k < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_61, __pyx_bstride_0_mins)));
              if (__pyx_t_12) {
 114:                                     mins[2] = i
                /* "xutils.pyx":114
 *                                     maxs[1] = i
 *                                 if k < mins[2]:
 *                                     mins[2] = i             # <<<<<<<<<<<<<<
 *                                 if k > maxs[2]:
 *                                     maxs[2] = i
 */
                __pyx_t_62 = 2;
                __pyx_t_9 = -1;
                if (__pyx_t_62 < 0) {
                  __pyx_t_62 += __pyx_bshape_0_mins;
                  if (unlikely(__pyx_t_62 < 0)) __pyx_t_9 = 0;
                } else if (unlikely(__pyx_t_62 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
                if (unlikely(__pyx_t_9 != -1)) {
                  __Pyx_RaiseBufferIndexError(__pyx_t_9);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                }
                *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_62, __pyx_bstride_0_mins) = __pyx_v_i;
                goto __pyx_L45;
              }
              __pyx_L45:;
 115:                                 if k > maxs[2]:
              /* "xutils.pyx":115
 *                                 if k < mins[2]:
 *                                     mins[2] = i
 *                                 if k > maxs[2]:             # <<<<<<<<<<<<<<
 *                                     maxs[2] = i
 *                                 if l < mins[3]:
 */
              __pyx_t_63 = 2;
              __pyx_t_9 = -1;
              if (__pyx_t_63 < 0) {
                __pyx_t_63 += __pyx_bshape_0_maxs;
                if (unlikely(__pyx_t_63 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_63 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              __pyx_t_12 = (__pyx_v_k > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_63, __pyx_bstride_0_maxs)));
              if (__pyx_t_12) {
 116:                                     maxs[2] = i
                /* "xutils.pyx":116
 *                                     mins[2] = i
 *                                 if k > maxs[2]:
 *                                     maxs[2] = i             # <<<<<<<<<<<<<<
 *                                 if l < mins[3]:
 *                                     mins[3] = i
 */
                __pyx_t_64 = 2;
                __pyx_t_9 = -1;
                if (__pyx_t_64 < 0) {
                  __pyx_t_64 += __pyx_bshape_0_maxs;
                  if (unlikely(__pyx_t_64 < 0)) __pyx_t_9 = 0;
                } else if (unlikely(__pyx_t_64 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
                if (unlikely(__pyx_t_9 != -1)) {
                  __Pyx_RaiseBufferIndexError(__pyx_t_9);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                }
                *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_64, __pyx_bstride_0_maxs) = __pyx_v_i;
                goto __pyx_L46;
              }
              __pyx_L46:;
 117:                                 if l < mins[3]:
              /* "xutils.pyx":117
 *                                 if k > maxs[2]:
 *                                     maxs[2] = i
 *                                 if l < mins[3]:             # <<<<<<<<<<<<<<
 *                                     mins[3] = i
 *                                 if l > maxs[3]:
 */
              __pyx_t_65 = 3;
              __pyx_t_9 = -1;
              if (__pyx_t_65 < 0) {
                __pyx_t_65 += __pyx_bshape_0_mins;
                if (unlikely(__pyx_t_65 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_65 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              __pyx_t_12 = (__pyx_v_l < (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_65, __pyx_bstride_0_mins)));
              if (__pyx_t_12) {
 118:                                     mins[3] = i
                /* "xutils.pyx":118
 *                                     maxs[2] = i
 *                                 if l < mins[3]:
 *                                     mins[3] = i             # <<<<<<<<<<<<<<
 *                                 if l > maxs[3]:
 *                                     maxs[3] = i
 */
                __pyx_t_66 = 3;
                __pyx_t_9 = -1;
                if (__pyx_t_66 < 0) {
                  __pyx_t_66 += __pyx_bshape_0_mins;
                  if (unlikely(__pyx_t_66 < 0)) __pyx_t_9 = 0;
                } else if (unlikely(__pyx_t_66 >= __pyx_bshape_0_mins)) __pyx_t_9 = 0;
                if (unlikely(__pyx_t_9 != -1)) {
                  __Pyx_RaiseBufferIndexError(__pyx_t_9);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                }
                *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_mins.buf, __pyx_t_66, __pyx_bstride_0_mins) = __pyx_v_i;
                goto __pyx_L47;
              }
              __pyx_L47:;
 119:                                 if l > maxs[3]:
              /* "xutils.pyx":119
 *                                 if l < mins[3]:
 *                                     mins[3] = i
 *                                 if l > maxs[3]:             # <<<<<<<<<<<<<<
 *                                     maxs[3] = i
 *     else:
 */
              __pyx_t_67 = 3;
              __pyx_t_9 = -1;
              if (__pyx_t_67 < 0) {
                __pyx_t_67 += __pyx_bshape_0_maxs;
                if (unlikely(__pyx_t_67 < 0)) __pyx_t_9 = 0;
              } else if (unlikely(__pyx_t_67 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
              if (unlikely(__pyx_t_9 != -1)) {
                __Pyx_RaiseBufferIndexError(__pyx_t_9);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              }
              __pyx_t_12 = (__pyx_v_l > (*__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_67, __pyx_bstride_0_maxs)));
              if (__pyx_t_12) {
 120:                                     maxs[3] = i
                /* "xutils.pyx":120
 *                                     mins[3] = i
 *                                 if l > maxs[3]:
 *                                     maxs[3] = i             # <<<<<<<<<<<<<<
 *     else:
 *         raise RuntimeError("Dimensions > 4 not implemented")
 */
                __pyx_t_68 = 3;
                __pyx_t_9 = -1;
                if (__pyx_t_68 < 0) {
                  __pyx_t_68 += __pyx_bshape_0_maxs;
                  if (unlikely(__pyx_t_68 < 0)) __pyx_t_9 = 0;
                } else if (unlikely(__pyx_t_68 >= __pyx_bshape_0_maxs)) __pyx_t_9 = 0;
                if (unlikely(__pyx_t_9 != -1)) {
                  __Pyx_RaiseBufferIndexError(__pyx_t_9);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                }
                *__Pyx_BufPtrStrided1d(long *, __pyx_bstruct_maxs.buf, __pyx_t_68, __pyx_bstride_0_maxs) = __pyx_v_i;
                goto __pyx_L48;
              }
              __pyx_L48:;
              goto __pyx_L40;
            }
            __pyx_L40:;
          }
        }
      }
    }
    break;
    default:
 121:     else:
 122:         raise RuntimeError("Dimensions > 4 not implemented")
    /* "xutils.pyx":122
 *                                     maxs[3] = i
 *     else:
 *         raise RuntimeError("Dimensions > 4 not implemented")             # <<<<<<<<<<<<<<
 *     return tuple(mins) + tuple(maxs)
 * 
 */
    __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    break;
  }

  /* "xutils.pyx":122
 *                                     maxs[3] = i
 *     else:
 *         raise RuntimeError("Dimensions > 4 not implemented")             # <<<<<<<<<<<<<<
 *     return tuple(mins) + tuple(maxs)
 * 
 */
  __pyx_k_tuple_2 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_2));
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
  PyTuple_SET_ITEM(__pyx_k_tuple_2, 0, ((PyObject *)__pyx_kp_s_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
 123:     return tuple(mins) + tuple(maxs)
  /* "xutils.pyx":123
 *     else:
 *         raise RuntimeError("Dimensions > 4 not implemented")
 *     return tuple(mins) + tuple(maxs)             # <<<<<<<<<<<<<<
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __Pyx_INCREF(((PyObject *)__pyx_v_mins));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_mins));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_mins));
  __pyx_t_52 = PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_52);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __Pyx_INCREF(((PyObject *)__pyx_v_maxs));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_maxs));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_maxs));
  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Add(__pyx_t_52, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __Pyx_DECREF(__pyx_t_52); __pyx_t_52 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = ((PyObject *)__pyx_t_2);
  __pyx_t_2 = 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_7);
  __Pyx_XDECREF(__pyx_t_52);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_maxs);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_shape);
    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_mins);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("xutils.boundingBox", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_maxs);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_shape);
  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_mins);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_shape);
  __Pyx_XDECREF((PyObject *)__pyx_v_mins);
  __Pyx_XDECREF((PyObject *)__pyx_v_maxs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 124: