Skip to content
Snippets Groups Projects
ancillary.c 990 KiB
Newer Older
  __pyx_t_5 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __pyx_t_5 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 144, __pyx_L1_error)
  __pyx_v_loc_uniform_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "ancillary.pyx":145
 *     cdef np.ndarray water_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
 *     cdef np.ndarray loc_uniform_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
 *     cdef int[:, ::1] coast_mv = coast_r             # <<<<<<<<<<<<<<
 *     cdef int[:, ::1] land_mv = land_r
 *     cdef int[:, ::1] water_mv = water_r
 */
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_coast_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 145, __pyx_L1_error)
  __pyx_v_coast_mv = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;

  /* "ancillary.pyx":146
 *     cdef np.ndarray loc_uniform_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
 *     cdef int[:, ::1] coast_mv = coast_r
 *     cdef int[:, ::1] land_mv = land_r             # <<<<<<<<<<<<<<
 *     cdef int[:, ::1] water_mv = water_r
 *     cdef int[:, ::1] loc_uniform_mv = loc_uniform_r
 */
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_land_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 146, __pyx_L1_error)
  __pyx_v_land_mv = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;

  /* "ancillary.pyx":147
 *     cdef int[:, ::1] coast_mv = coast_r
 *     cdef int[:, ::1] land_mv = land_r
 *     cdef int[:, ::1] water_mv = water_r             # <<<<<<<<<<<<<<
 *     cdef int[:, ::1] loc_uniform_mv = loc_uniform_r
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_water_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 147, __pyx_L1_error)
  __pyx_v_water_mv = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
Paolo Veglio's avatar
Paolo Veglio committed

  /* "ancillary.pyx":148
 *     cdef int[:, ::1] land_mv = land_r
 *     cdef int[:, ::1] water_mv = water_r
 *     cdef int[:, ::1] loc_uniform_mv = loc_uniform_r             # <<<<<<<<<<<<<<
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 *     lines = eco_type.shape[0]
 */
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_loc_uniform_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 148, __pyx_L1_error)
  __pyx_v_loc_uniform_mv = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;

  /* "ancillary.pyx":150
 *     cdef int[:, ::1] loc_uniform_mv = loc_uniform_r
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 *     lines = eco_type.shape[0]             # <<<<<<<<<<<<<<
 *     eles = eco_type.shape[1]
 *     for i in range(lines):
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __pyx_v_lines = (__pyx_v_eco_type->dimensions[0]);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "ancillary.pyx":151
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 *     lines = eco_type.shape[0]
 *     eles = eco_type.shape[1]             # <<<<<<<<<<<<<<
 *     for i in range(lines):
 *         for j in range(eles):
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __pyx_v_eles = (__pyx_v_eco_type->dimensions[1]);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "ancillary.pyx":152
 *     lines = eco_type.shape[0]
 *     eles = eco_type.shape[1]
 *     for i in range(lines):             # <<<<<<<<<<<<<<
 *         for j in range(eles):
 *             if (i == 0 or i == lines):
 */
  __pyx_t_7 = __pyx_v_lines;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
Paolo Veglio's avatar
Paolo Veglio committed

    /* "ancillary.pyx":153
 *     eles = eco_type.shape[1]
 *     for i in range(lines):
 *         for j in range(eles):             # <<<<<<<<<<<<<<
 *             if (i == 0 or i == lines):
 *                 line_edge = 1
 */
    __pyx_t_10 = __pyx_v_eles;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_j = __pyx_t_12;

      /* "ancillary.pyx":154
 *     for i in range(lines):
 *         for j in range(eles):
 *             if (i == 0 or i == lines):             # <<<<<<<<<<<<<<
 *                 line_edge = 1
 *             else:
 */
      __pyx_t_14 = ((__pyx_v_i == 0) != 0);
      if (!__pyx_t_14) {
      } else {
        __pyx_t_13 = __pyx_t_14;
        goto __pyx_L8_bool_binop_done;
      }
      __pyx_t_14 = ((__pyx_v_i == __pyx_v_lines) != 0);
      __pyx_t_13 = __pyx_t_14;
      __pyx_L8_bool_binop_done:;
      if (__pyx_t_13) {

        /* "ancillary.pyx":155
 *         for j in range(eles):
 *             if (i == 0 or i == lines):
 *                 line_edge = 1             # <<<<<<<<<<<<<<
 *             else:
 *                 line_edge = 0
Paolo Veglio's avatar
Paolo Veglio committed
 */
        __pyx_v_line_edge = 1;
Paolo Veglio's avatar
Paolo Veglio committed

        /* "ancillary.pyx":154
 *     for i in range(lines):
 *         for j in range(eles):
 *             if (i == 0 or i == lines):             # <<<<<<<<<<<<<<
 *                 line_edge = 1
 *             else:
 */
        goto __pyx_L7;
      }
Paolo Veglio's avatar
Paolo Veglio committed

      /* "ancillary.pyx":157
 *                 line_edge = 1
 *             else:
 *                 line_edge = 0             # <<<<<<<<<<<<<<
 *             if (j == 0 or j == eles):
 *                 elem_edge = 1
Paolo Veglio's avatar
Paolo Veglio committed
 */
      /*else*/ {
        __pyx_v_line_edge = 0;
      }
      __pyx_L7:;
Paolo Veglio's avatar
Paolo Veglio committed

      /* "ancillary.pyx":158
 *             else:
 *                 line_edge = 0
 *             if (j == 0 or j == eles):             # <<<<<<<<<<<<<<
 *                 elem_edge = 1
 *             else:
 */
      __pyx_t_14 = ((__pyx_v_j == 0) != 0);
      if (!__pyx_t_14) {
      } else {
        __pyx_t_13 = __pyx_t_14;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_14 = ((__pyx_v_j == __pyx_v_eles) != 0);
      __pyx_t_13 = __pyx_t_14;
      __pyx_L11_bool_binop_done:;
      if (__pyx_t_13) {

        /* "ancillary.pyx":159
 *                 line_edge = 0
 *             if (j == 0 or j == eles):
 *                 elem_edge = 1             # <<<<<<<<<<<<<<
 *             else:
 *                 elem_edge = 0
 */
        __pyx_v_elem_edge = 1;

        /* "ancillary.pyx":158
 *             else:
 *                 line_edge = 0
 *             if (j == 0 or j == eles):             # <<<<<<<<<<<<<<
 *                 elem_edge = 1
 *             else:
 */
        goto __pyx_L10;
      }

      /* "ancillary.pyx":161
 *                 elem_edge = 1
 *             else:
 *                 elem_edge = 0             # <<<<<<<<<<<<<<
 *             check_reg_uniformity(eles, line_edge, elem_edge, i, j, eco_type[i][j],
 *                                 &eco[0, 0], &snowfr[0, 0], &icefr[0, 0], &lsf[0, 0],
 */
      /*else*/ {
        __pyx_v_elem_edge = 0;
      }
      __pyx_L10:;

      /* "ancillary.pyx":162
 *             else:
 *                 elem_edge = 0
 *             check_reg_uniformity(eles, line_edge, elem_edge, i, j, eco_type[i][j],             # <<<<<<<<<<<<<<
 *                                 &eco[0, 0], &snowfr[0, 0], &icefr[0, 0], &lsf[0, 0],
 *                                 &coast, &land, &water, &loc_uniform)
 */
      __pyx_t_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_eco_type), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_j, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_15 = __Pyx_PyInt_As_unsigned_char(__pyx_t_2); if (unlikely((__pyx_t_15 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 162, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "ancillary.pyx":163
 *                 elem_edge = 0
 *             check_reg_uniformity(eles, line_edge, elem_edge, i, j, eco_type[i][j],
 *                                 &eco[0, 0], &snowfr[0, 0], &icefr[0, 0], &lsf[0, 0],             # <<<<<<<<<<<<<<
 *                                 &coast, &land, &water, &loc_uniform)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */
      __pyx_t_16 = 0;
      __pyx_t_17 = 0;
      __pyx_t_18 = 0;
      __pyx_t_19 = 0;
      __pyx_t_20 = 0;
      __pyx_t_21 = 0;
      __pyx_t_22 = 0;
      __pyx_t_23 = 0;
Paolo Veglio's avatar
Paolo Veglio committed

      /* "ancillary.pyx":162
 *             else:
 *                 elem_edge = 0
 *             check_reg_uniformity(eles, line_edge, elem_edge, i, j, eco_type[i][j],             # <<<<<<<<<<<<<<
 *                                 &eco[0, 0], &snowfr[0, 0], &icefr[0, 0], &lsf[0, 0],
 *                                 &coast, &land, &water, &loc_uniform)
 */
      check_reg_uniformity(__pyx_v_eles, __pyx_v_line_edge, __pyx_v_elem_edge, __pyx_v_i, __pyx_v_j, __pyx_t_15, (&(*__Pyx_BufPtrStrided2d(unsigned char *, __pyx_pybuffernd_eco.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_eco.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_eco.diminfo[1].strides))), (&(*__Pyx_BufPtrStrided2d(float *, __pyx_pybuffernd_snowfr.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_snowfr.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_snowfr.diminfo[1].strides))), (&(*__Pyx_BufPtrStrided2d(float *, __pyx_pybuffernd_icefr.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_icefr.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_icefr.diminfo[1].strides))), (&(*__Pyx_BufPtrStrided2d(unsigned char *, __pyx_pybuffernd_lsf.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_lsf.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_lsf.diminfo[1].strides))), (&__pyx_v_coast), (&__pyx_v_land), (&__pyx_v_water), (&__pyx_v_loc_uniform));

      /* "ancillary.pyx":166
 *                                 &coast, &land, &water, &loc_uniform)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 *             coast_mv[i][j] = coast             # <<<<<<<<<<<<<<
 *             land_mv[i][j] = land
 *             water_mv[i][j] = water
Paolo Veglio's avatar
Paolo Veglio committed
 */
      __pyx_t_23 = __pyx_v_i;
      __pyx_t_22 = __pyx_v_j;
      *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_coast_mv.data + __pyx_t_23 * __pyx_v_coast_mv.strides[0]) )) + __pyx_t_22)) )) = __pyx_v_coast;
Paolo Veglio's avatar
Paolo Veglio committed

      /* "ancillary.pyx":167
 * 
 *             coast_mv[i][j] = coast
 *             land_mv[i][j] = land             # <<<<<<<<<<<<<<
 *             water_mv[i][j] = water
 *             loc_uniform_mv[i][j] = loc_uniform
 */
      __pyx_t_22 = __pyx_v_i;
      __pyx_t_23 = __pyx_v_j;
      *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_land_mv.data + __pyx_t_22 * __pyx_v_land_mv.strides[0]) )) + __pyx_t_23)) )) = __pyx_v_land;
Paolo Veglio's avatar
Paolo Veglio committed

      /* "ancillary.pyx":168
 *             coast_mv[i][j] = coast
 *             land_mv[i][j] = land
 *             water_mv[i][j] = water             # <<<<<<<<<<<<<<
 *             loc_uniform_mv[i][j] = loc_uniform
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */
      __pyx_t_23 = __pyx_v_i;
      __pyx_t_22 = __pyx_v_j;
      *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_water_mv.data + __pyx_t_23 * __pyx_v_water_mv.strides[0]) )) + __pyx_t_22)) )) = __pyx_v_water;
Paolo Veglio's avatar
Paolo Veglio committed

      /* "ancillary.pyx":169
 *             land_mv[i][j] = land
 *             water_mv[i][j] = water
 *             loc_uniform_mv[i][j] = loc_uniform             # <<<<<<<<<<<<<<
 * 
 *     scene_uniformity = {'coast': coast_r,
 */
      __pyx_t_22 = __pyx_v_i;
      __pyx_t_23 = __pyx_v_j;
      *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_loc_uniform_mv.data + __pyx_t_22 * __pyx_v_loc_uniform_mv.strides[0]) )) + __pyx_t_23)) )) = __pyx_v_loc_uniform;
    }
  }
Paolo Veglio's avatar
Paolo Veglio committed

  /* "ancillary.pyx":171
 *             loc_uniform_mv[i][j] = loc_uniform
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 *     scene_uniformity = {'coast': coast_r,             # <<<<<<<<<<<<<<
 *                         'land': land_r,
 *                         'water': water_r,
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_coast, ((PyObject *)__pyx_v_coast_r)) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
Paolo Veglio's avatar
Paolo Veglio committed

  /* "ancillary.pyx":172
 * 
 *     scene_uniformity = {'coast': coast_r,
 *                         'land': land_r,             # <<<<<<<<<<<<<<
 *                         'water': water_r,
 *                         'loc_uniform': loc_uniform_r}
Paolo Veglio's avatar
Paolo Veglio committed
 */
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_land, ((PyObject *)__pyx_v_land_r)) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
Paolo Veglio's avatar
Paolo Veglio committed

  /* "ancillary.pyx":173
 *     scene_uniformity = {'coast': coast_r,
 *                         'land': land_r,
 *                         'water': water_r,             # <<<<<<<<<<<<<<
 *                         'loc_uniform': loc_uniform_r}
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_water, ((PyObject *)__pyx_v_water_r)) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
Paolo Veglio's avatar
Paolo Veglio committed

  /* "ancillary.pyx":174
 *                         'land': land_r,
 *                         'water': water_r,
 *                         'loc_uniform': loc_uniform_r}             # <<<<<<<<<<<<<<
 * 
 *     return scene_uniformity
Paolo Veglio's avatar
Paolo Veglio committed
 */
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_loc_uniform, ((PyObject *)__pyx_v_loc_uniform_r)) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
  __pyx_v_scene_uniformity = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
Paolo Veglio's avatar
Paolo Veglio committed

  /* "ancillary.pyx":176
 *                         'loc_uniform': loc_uniform_r}
 * 
 *     return scene_uniformity             # <<<<<<<<<<<<<<
 * 
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_scene_uniformity);
  __pyx_r = __pyx_v_scene_uniformity;
Paolo Veglio's avatar
Paolo Veglio committed
  goto __pyx_L0;

  /* "ancillary.pyx":134
 * @cython.wraparound(False)
 * @cython.initializedcheck(False)
 * def py_check_reg_uniformity(np.ndarray[unsigned char, ndim=2] eco_type, np.ndarray[unsigned char, ndim=2] eco,             # <<<<<<<<<<<<<<
 *                             np.ndarray[float, ndim=2] snowfr,
 *                             np.ndarray[float, ndim=2] icefr, np.ndarray[unsigned char, ndim=2] lsf):
Paolo Veglio's avatar
Paolo Veglio committed
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eco.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eco_type.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_icefr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lsf.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_snowfr.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("ancillary_data.py_check_reg_uniformity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
Paolo Veglio's avatar
Paolo Veglio committed
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eco.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eco_type.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_icefr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lsf.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_snowfr.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_coast_r);
  __Pyx_XDECREF((PyObject *)__pyx_v_land_r);
  __Pyx_XDECREF((PyObject *)__pyx_v_water_r);
  __Pyx_XDECREF((PyObject *)__pyx_v_loc_uniform_r);
  __PYX_XDEC_MEMVIEW(&__pyx_v_coast_mv, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_land_mv, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_water_mv, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_loc_uniform_mv, 1);
  __Pyx_XDECREF(__pyx_v_scene_uniformity);
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":735
 * ctypedef npy_cdouble     complex_t
 * 
 * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(1, <void*>a)
 * 
Paolo Veglio's avatar
Paolo Veglio committed
 */

static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
  PyObject *__pyx_r = NULL;
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":736
 * 
 * cdef inline object PyArray_MultiIterNew1(a):
 *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object PyArray_MultiIterNew2(a, b):
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":735
 * ctypedef npy_cdouble     complex_t
 * 
 * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(1, <void*>a)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
Paolo Veglio's avatar
Paolo Veglio committed
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":738
 *     return PyArray_MultiIterNew(1, <void*>a)
 * 
 * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
  PyObject *__pyx_r = NULL;
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":739
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object PyArray_MultiIterNew2(a, b):
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object PyArray_MultiIterNew3(a, b, c):
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":738
 *     return PyArray_MultiIterNew(1, <void*>a)
 * 
 * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":741
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
 * 
 * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":742
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object PyArray_MultiIterNew3(a, b, c):
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 742, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":741
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
 * 
 * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
Paolo Veglio's avatar
Paolo Veglio committed
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":744
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
 * 
 * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
  PyObject *__pyx_r = NULL;
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":745
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 745, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":744
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
Paolo Veglio's avatar
Paolo Veglio committed
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":747
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) {
  PyObject *__pyx_r = NULL;
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":748
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
Paolo Veglio's avatar
Paolo Veglio committed
  goto __pyx_L0;

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":747
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
Paolo Veglio's avatar
Paolo Veglio committed
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":750
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):             # <<<<<<<<<<<<<<
 *     if PyDataType_HASSUBARRAY(d):
 *         return <tuple>d.subarray.shape
Paolo Veglio's avatar
Paolo Veglio committed
 */

static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) {
  PyObject *__pyx_r = NULL;
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":751
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):
 *     if PyDataType_HASSUBARRAY(d):             # <<<<<<<<<<<<<<
 *         return <tuple>d.subarray.shape
 *     else:
 */
  __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0);
  if (__pyx_t_1) {

    /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":752
 * cdef inline tuple PyDataType_SHAPE(dtype d):
 *     if PyDataType_HASSUBARRAY(d):
 *         return <tuple>d.subarray.shape             # <<<<<<<<<<<<<<
 *     else:
 *         return ()
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape));
    __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape);
    goto __pyx_L0;

    /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":751
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):
 *     if PyDataType_HASSUBARRAY(d):             # <<<<<<<<<<<<<<
 *         return <tuple>d.subarray.shape
 *     else:
Paolo Veglio's avatar
Paolo Veglio committed
 */
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":754
 *         return <tuple>d.subarray.shape
 *     else:
 *         return ()             # <<<<<<<<<<<<<<
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * 
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_empty_tuple);
    __pyx_r = __pyx_empty_tuple;
    goto __pyx_L0;
  }

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":750
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):             # <<<<<<<<<<<<<<
 *     if PyDataType_HASSUBARRAY(d):
 *         return <tuple>d.subarray.shape
Paolo Veglio's avatar
Paolo Veglio committed
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
Paolo Veglio's avatar
Paolo Veglio committed
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":929
 *     int _import_umath() except -1
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
 *     Py_INCREF(base) # important to do this before stealing the reference below!
 *     PyArray_SetBaseObject(arr, base)
Paolo Veglio's avatar
Paolo Veglio committed
 */

static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_array_base", 0);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":930
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline void set_array_base(ndarray arr, object base):
 *     Py_INCREF(base) # important to do this before stealing the reference below!             # <<<<<<<<<<<<<<
 *     PyArray_SetBaseObject(arr, base)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */
  Py_INCREF(__pyx_v_base);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":931
 * cdef inline void set_array_base(ndarray arr, object base):
 *     Py_INCREF(base) # important to do this before stealing the reference below!
 *     PyArray_SetBaseObject(arr, base)             # <<<<<<<<<<<<<<
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object get_array_base(ndarray arr):
Paolo Veglio's avatar
Paolo Veglio committed
 */
  (void)(PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base));
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":929
 *     int _import_umath() except -1
 * 
 * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
 *     Py_INCREF(base) # important to do this before stealing the reference below!
 *     PyArray_SetBaseObject(arr, base)
 */

  /* function exit code */
  __Pyx_RefNannyFinishContext();
Paolo Veglio's avatar
Paolo Veglio committed
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":933
 *     PyArray_SetBaseObject(arr, base)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
 *     base = PyArray_BASE(arr)
 *     if base is NULL:
 */

static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
  PyObject *__pyx_v_base;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("get_array_base", 0);

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":934
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object get_array_base(ndarray arr):
 *     base = PyArray_BASE(arr)             # <<<<<<<<<<<<<<
 *     if base is NULL:
 *         return None
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __pyx_v_base = PyArray_BASE(__pyx_v_arr);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":935
 * cdef inline object get_array_base(ndarray arr):
 *     base = PyArray_BASE(arr)
 *     if base is NULL:             # <<<<<<<<<<<<<<
 *         return None
 *     return <object>base
 */
  __pyx_t_1 = ((__pyx_v_base == NULL) != 0);
  if (__pyx_t_1) {
Paolo Veglio's avatar
Paolo Veglio committed

    /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":936
 *     base = PyArray_BASE(arr)
 *     if base is NULL:
 *         return None             # <<<<<<<<<<<<<<
 *     return <object>base
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":935
 * cdef inline object get_array_base(ndarray arr):
 *     base = PyArray_BASE(arr)
 *     if base is NULL:             # <<<<<<<<<<<<<<
 *         return None
 *     return <object>base
 */
  }

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":937
 *     if base is NULL:
 *         return None
 *     return <object>base             # <<<<<<<<<<<<<<
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * # Versions of the import_* functions which are more suitable for
Paolo Veglio's avatar
Paolo Veglio committed
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_base));
  __pyx_r = ((PyObject *)__pyx_v_base);
Paolo Veglio's avatar
Paolo Veglio committed
  goto __pyx_L0;

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":933
 *     PyArray_SetBaseObject(arr, base)
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
 *     base = PyArray_BASE(arr)
 *     if base is NULL:
Paolo Veglio's avatar
Paolo Veglio committed
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
Paolo Veglio's avatar
Paolo Veglio committed
  return __pyx_r;
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":941
 * # Versions of the import_* functions which are more suitable for
 * # Cython code.
 * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
 *     try:
 *         __pyx_import_array()
Paolo Veglio's avatar
Paolo Veglio committed
 */

static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("import_array", 0);
Paolo Veglio's avatar
Paolo Veglio committed

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":942
 * # Cython code.
 * cdef inline int import_array() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         __pyx_import_array()
 *     except Exception:
Paolo Veglio's avatar
Paolo Veglio committed
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {
Paolo Veglio's avatar
Paolo Veglio committed

      /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":943
 * cdef inline int import_array() except -1:
 *     try:
 *         __pyx_import_array()             # <<<<<<<<<<<<<<
 *     except Exception:
 *         raise ImportError("numpy.core.multiarray failed to import")
 */
      __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 943, __pyx_L3_error)

      /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":942
 * # Cython code.
 * cdef inline int import_array() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         __pyx_import_array()
 *     except Exception:
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":944
 *     try:
 *         __pyx_import_array()
 *     except Exception:             # <<<<<<<<<<<<<<
 *         raise ImportError("numpy.core.multiarray failed to import")
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 */
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_4) {
      __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 944, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);

      /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":945
 *         __pyx_import_array()
 *     except Exception:
 *         raise ImportError("numpy.core.multiarray failed to import")             # <<<<<<<<<<<<<<
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline int import_umath() except -1:
 */
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 945, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(1, 945, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":942
 * # Cython code.
 * cdef inline int import_array() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         __pyx_import_array()
 *     except Exception:
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }

  /* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":941
 * # Versions of the import_* functions which are more suitable for
 * # Cython code.
 * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
 *     try:
 *         __pyx_import_array()
Paolo Veglio's avatar
Paolo Veglio committed
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
Paolo Veglio's avatar
Paolo Veglio committed
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
Paolo Veglio's avatar
Paolo Veglio committed
  return __pyx_r;
}

/* "../miniconda3/lib/python3.9/site-packages/numpy/__init__.pxd":947
 *         raise ImportError("numpy.core.multiarray failed to import")
Paolo Veglio's avatar
Paolo Veglio committed
 * 
 * cdef inline int import_umath() except -1:             # <<<<<<<<<<<<<<
 *     try:
 *         _import_umath()
Paolo Veglio's avatar
Paolo Veglio committed
 */

static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) {