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: