Generated by Cython 0.10 on Wed Nov 12 16:52:13 2008
Raw output: gridworld.c
1: """
2: Defines the `GridWorld` class.
#if PY_MAJOR_VERSION < 3
return;
#else
return __pyx_m;
#endif
__pyx_L1_error:;
Py_XDECREF(__pyx_1);
__Pyx_AddTraceback("spatial.gridworld");
#if PY_MAJOR_VERSION >= 3
return NULL;
#endif
}
3: """
4:
5: # import the appropriate classes
6: from geometry cimport Box, Point
7: from gravity cimport setInducedGF_box_nomask_nonrandom, GravityField
8: from numpy cimport ndarray as ar
9: import numpy as np
__pyx_1 = __Pyx_Import(__pyx_kp_numpy, 0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
if (PyObject_SetAttr(__pyx_m, __pyx_kp_np, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
10: cimport cython
11:
12: ctypedef unsigned long int size_t
13:
struct __pyx_obj_7spatial_7gravity_GravityField {
PyObject_HEAD
struct __pyx_vtabstruct_7spatial_7gravity_GravityField *__pyx_vtab;
double Txx;
double Txy;
double Tyy;
};
struct __pyx_vtabstruct_7spatial_7gravity_GravityField {
void (*set)(struct __pyx_obj_7spatial_7gravity_GravityField *, float, float, float);
void (*addTo)(struct __pyx_obj_7spatial_7gravity_GravityField *, struct __pyx_obj_7spatial_7gravity_GravityField *);
void (*scaleBy)(struct __pyx_obj_7spatial_7gravity_GravityField *, double);
float (*det)(struct __pyx_obj_7spatial_7gravity_GravityField *);
};
static struct __pyx_vtabstruct_7spatial_7gravity_GravityField *__pyx_vtabptr_7spatial_7gravity_GravityField;
14: cdef extern from "math.h":
struct __pyx_obj_7spatial_8geometry_Point {
PyObject_HEAD
struct __pyx_vtabstruct_7spatial_8geometry_Point *__pyx_vtab;
float x;
float y;
float z;
};
struct __pyx_vtabstruct_7spatial_8geometry_Point {
void (*set)(struct __pyx_obj_7spatial_8geometry_Point *, float, float, float);
};
static struct __pyx_vtabstruct_7spatial_8geometry_Point *__pyx_vtabptr_7spatial_8geometry_Point;
15: float ceil(float)
16:
17: ############################################################
18: # Some low-level inline functions to make sure the indexing is
19: # consistent
20:
21: cdef inline int _idx_to_xi(int idx, int nx, int ny, int nz):
static INLINE int __pyx_f_7spatial_9gridworld__idx_to_xi(int __pyx_v_idx, int __pyx_v_nx, int __pyx_v_ny, int __pyx_v_nz) {
int __pyx_r;
enum __pyx_t_7spatial_8geometry_GeomType {
__pyx_e_7spatial_8geometry_null,
__pyx_e_7spatial_8geometry_point,
__pyx_e_7spatial_8geometry_box,
__pyx_e_7spatial_8geometry_point_mass
};
typedef unsigned long __pyx_t_7spatial_7gravity_size_t;
typedef unsigned long __pyx_t_7spatial_9gridworld_size_t;
22: return idx % (ny*nz)
__pyx_r = (__pyx_v_idx % (__pyx_v_ny * __pyx_v_nz));
goto __pyx_L0;
__pyx_r = 0;
__pyx_L0:;
return __pyx_r;
}
23:
24: cdef inline int _idx_to_yi(int idx, int nx, int ny, int nz):
static INLINE int __pyx_f_7spatial_9gridworld__idx_to_yi(int __pyx_v_idx, int __pyx_v_nx, int __pyx_v_ny, int __pyx_v_nz) {
int __pyx_r;
struct __pyx_obj_7spatial_8geometry_SpatialObject {
PyObject_HEAD
struct __pyx_vtabstruct_7spatial_8geometry_SpatialObject *__pyx_vtab;
enum __pyx_t_7spatial_8geometry_GeomType gt;
float _density;
};
struct __pyx_vtabstruct_7spatial_8geometry_SpatialObject {
PyObject *(*_setType)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, enum __pyx_t_7spatial_8geometry_GeomType);
enum __pyx_t_7spatial_8geometry_GeomType (*gtype)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, int __pyx_skip_dispatch);
PyObject *(*setDensity)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, float, int __pyx_skip_dispatch);
void (*_setDensity)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, float);
PyArrayObject *(*sample)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, __pyx_t_7spatial_8geometry_size_t, int __pyx_skip_dispatch);
PyArrayObject *(*sample_nonrandom)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, __pyx_t_7spatial_8geometry_size_t, int __pyx_skip_dispatch);
float (*density)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, int __pyx_skip_dispatch);
float (*mass)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, int __pyx_skip_dispatch);
int (*isInside)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, struct __pyx_obj_7spatial_8geometry_Point *, int __pyx_skip_dispatch);
float (*volume)(struct __pyx_obj_7spatial_8geometry_SpatialObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_7spatial_8geometry_SpatialObject *__pyx_vtabptr_7spatial_8geometry_SpatialObject;
25: return (idx / nx) % nz
__pyx_r = ((__pyx_v_idx / __pyx_v_nx) % __pyx_v_nz);
goto __pyx_L0;
__pyx_r = 0;
__pyx_L0:;
return __pyx_r;
}
26:
27: cdef inline int _idx_to_zi(int idx, int nx, int ny, int nz):
static INLINE int __pyx_f_7spatial_9gridworld__idx_to_zi(int __pyx_v_idx, int __pyx_v_nx, int __pyx_v_ny, int __pyx_v_nz) {
int __pyx_r;
28: return idx / (nx*ny)
__pyx_r = (__pyx_v_idx / (__pyx_v_nx * __pyx_v_ny));
goto __pyx_L0;
__pyx_r = 0;
__pyx_L0:;
return __pyx_r;
}
29:
30: @cython.boundscheck(True)
31: def _edges_from_center(a_o, tuple bounds = None):
static PyObject *__pyx_pf_7spatial_9gridworld__edges_from_center(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pf_7spatial_9gridworld__edges_from_center(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_a_o = 0;
PyObject *__pyx_v_bounds = 0;
PyArrayObject *__pyx_v_a = 0;
PyArrayObject *__pyx_v_r = 0;
Py_buffer __pyx_bstruct_a;
Py_ssize_t __pyx_bstride_0_a = 0;
Py_ssize_t __pyx_bshape_0_a = 0;
Py_buffer __pyx_bstruct_r;
Py_ssize_t __pyx_bstride_0_r = 0;
Py_ssize_t __pyx_bshape_0_r = 0;
PyObject *__pyx_r;
static PyObject **__pyx_pyargnames[] = {&__pyx_kp_a_o,&__pyx_kp_bounds,0};
__pyx_self = __pyx_self;
__pyx_v_bounds = ((PyObject *)Py_None);
if (unlikely(__pyx_kwds)) {
PyObject* values[2] = {0,0};
Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 0:
values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_a_o);
if (likely(values[0])) kw_args--;
else goto __pyx_L5_argtuple_error;
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_edges_from_center") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
}
__pyx_v_a_o = values[0];
if (values[1]) {
__pyx_v_bounds = ((PyObject *)values[1]);
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 2: __pyx_v_bounds = ((PyObject *)PyTuple_GET_ITEM(__pyx_args, 1));
case 1: __pyx_v_a_o = PyTuple_GET_ITEM(__pyx_args, 0);
break;
default: goto __pyx_L5_argtuple_error;
}
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_edges_from_center", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
__pyx_L3_error:;
__Pyx_AddTraceback("spatial.gridworld._edges_from_center");
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_bstruct_a.buf = NULL;
__pyx_bstruct_r.buf = NULL;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bounds), &PyTuple_Type, 1, "bounds", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
32:
33: cdef ar[float] a = np.asarray(a_o, dtype= np.float32)
__pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_asarray); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
__pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_INCREF(__pyx_v_a_o);
PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_a_o);
__pyx_3 = PyDict_New(); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_4 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_5 = PyObject_GetAttr(__pyx_4, __pyx_kp_25); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_4); __pyx_4 = 0;
if (PyDict_SetItem(__pyx_3, __pyx_kp_dtype, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_5); __pyx_5 = 0;
__pyx_4 = PyEval_CallObjectWithKeywords(__pyx_2, ((PyObject *)__pyx_1), ((PyObject *)__pyx_3)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_2); __pyx_2 = 0;
Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
if (!(__Pyx_TypeTest(__pyx_4, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_t_1 = ((PyArrayObject *)__pyx_4);
if (unlikely(__Pyx_GetBuffer_float((PyObject*)__pyx_t_1, &__pyx_bstruct_a, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0) == -1)) {
__pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_bstruct_a.buf = NULL;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
} else {__pyx_bstride_0_a = __pyx_bstruct_a.strides[0];
__pyx_bshape_0_a = __pyx_bstruct_a.shape[0];
}
__pyx_t_1 = 0;
__pyx_v_a = ((PyArrayObject *)__pyx_4);
__pyx_4 = 0;
34: cdef ar[float] r = np.empty( a.size + 1, dtype=np.float32)
__pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_kp_empty); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_5); __pyx_5 = 0;
__pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_a), __pyx_kp_size); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_t_2 = PyNumber_Add(__pyx_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
__pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
PyTuple_SET_ITEM(__pyx_3, 0, __pyx_t_2);
__pyx_t_2 = 0;
__pyx_4 = PyDict_New(); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_1 = PyObject_GetAttr(__pyx_5, __pyx_kp_25); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_5); __pyx_5 = 0;
if (PyDict_SetItem(__pyx_4, __pyx_kp_dtype, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
__pyx_5 = PyEval_CallObjectWithKeywords(__pyx_2, ((PyObject *)__pyx_3), ((PyObject *)__pyx_4)); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_2); __pyx_2 = 0;
Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
if (!(__Pyx_TypeTest(__pyx_5, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_t_3 = ((PyArrayObject *)__pyx_5);
if (unlikely(__Pyx_GetBuffer_float((PyObject*)__pyx_t_3, &__pyx_bstruct_r, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0) == -1)) {
__pyx_v_r = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_bstruct_r.buf = NULL;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
} else {__pyx_bstride_0_r = __pyx_bstruct_r.strides[0];
__pyx_bshape_0_r = __pyx_bstruct_r.shape[0];
}
__pyx_t_3 = 0;
__pyx_v_r = ((PyArrayObject *)__pyx_5);
__pyx_5 = 0;
35:
36: if r.size > 2:
__pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_r), __pyx_kp_size); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_2 = PyObject_RichCompare(__pyx_1, __pyx_int_2, Py_GT); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
__pyx_6 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_2); __pyx_2 = 0;
if (__pyx_6) {
37: r[1:-1] = (a[:-1] + a[1:]) / 2
__pyx_3 = PySequence_GetSlice(((PyObject *)__pyx_v_a), 0, -1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_4 = PySequence_GetSlice(((PyObject *)__pyx_v_a), 1, PY_SSIZE_T_MAX); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_t_2 = PyNumber_Add(__pyx_3, __pyx_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_3); __pyx_3 = 0;
Py_DECREF(__pyx_4); __pyx_4 = 0;
__pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_int_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (PySequence_SetSlice(((PyObject *)__pyx_v_r), 1, -1, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L6;
}
__pyx_L6:;
38:
39: if bounds is None:
__pyx_6 = (__pyx_v_bounds == ((PyObject *)Py_None));
if (__pyx_6) {
40: r[0] = a[0] - (r[1] - a[0])
__pyx_t_5 = 0;
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_bshape_0_a;
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_bshape_0_a)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
__pyx_t_7 = 1;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_bshape_0_r;
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_bshape_0_r)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
__pyx_t_8 = 0;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_bshape_0_a;
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_bshape_0_a)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
__pyx_t_9 = 0;
__pyx_t_6 = -1;
if (__pyx_t_9 < 0) {
__pyx_t_9 += __pyx_bshape_0_r;
if (unlikely(__pyx_t_9 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_9 >= __pyx_bshape_0_r)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_r.buf, __pyx_t_9, __pyx_bstride_0_r) = ((*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_a.buf, __pyx_t_5, __pyx_bstride_0_a)) - ((*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_r.buf, __pyx_t_7, __pyx_bstride_0_r)) - (*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_a.buf, __pyx_t_8, __pyx_bstride_0_a))));
41: r[-1] = a[-1] + (a[-1] - r[-2])
__pyx_t_10 = -1;
__pyx_t_6 = -1;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_bshape_0_a;
if (unlikely(__pyx_t_10 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_10 >= __pyx_bshape_0_a)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
__pyx_t_11 = -1;
__pyx_t_6 = -1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_bshape_0_a;
if (unlikely(__pyx_t_11 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_11 >= __pyx_bshape_0_a)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
__pyx_t_12 = -2;
__pyx_t_6 = -1;
if (__pyx_t_12 < 0) {
__pyx_t_12 += __pyx_bshape_0_r;
if (unlikely(__pyx_t_12 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_12 >= __pyx_bshape_0_r)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
__pyx_t_13 = -1;
__pyx_t_6 = -1;
if (__pyx_t_13 < 0) {
__pyx_t_13 += __pyx_bshape_0_r;
if (unlikely(__pyx_t_13 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_13 >= __pyx_bshape_0_r)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_r.buf, __pyx_t_13, __pyx_bstride_0_r) = ((*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_a.buf, __pyx_t_10, __pyx_bstride_0_a)) + ((*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_a.buf, __pyx_t_11, __pyx_bstride_0_a)) - (*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_r.buf, __pyx_t_12, __pyx_bstride_0_r))));
goto __pyx_L7;
}
/*else*/ {
42: else:
struct __pyx_obj_7spatial_8geometry_PointMass {
struct __pyx_obj_7spatial_8geometry_SpatialObject __pyx_base;
struct __pyx_obj_7spatial_8geometry_Point *p;
};
struct __pyx_vtabstruct_7spatial_8geometry_PointMass {
struct __pyx_vtabstruct_7spatial_8geometry_SpatialObject __pyx_base;
struct __pyx_obj_7spatial_8geometry_Point *(*point)(struct __pyx_obj_7spatial_8geometry_PointMass *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_7spatial_8geometry_PointMass *__pyx_vtabptr_7spatial_8geometry_PointMass;
43: r[0] = bounds[0]
__pyx_5 = __Pyx_GetItemInt(((PyObject *)__pyx_v_bounds), 0, 0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_7 = __pyx_PyFloat_AsDouble(__pyx_5); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_5); __pyx_5 = 0;
__pyx_t_14 = 0;
__pyx_t_6 = -1;
if (__pyx_t_14 < 0) {
__pyx_t_14 += __pyx_bshape_0_r;
if (unlikely(__pyx_t_14 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_14 >= __pyx_bshape_0_r)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_r.buf, __pyx_t_14, __pyx_bstride_0_r) = __pyx_7;
44: r[-1] = bounds[1]
__pyx_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_bounds), 1, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_7 = __pyx_PyFloat_AsDouble(__pyx_1); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
__pyx_t_15 = -1;
__pyx_t_6 = -1;
if (__pyx_t_15 < 0) {
__pyx_t_15 += __pyx_bshape_0_r;
if (unlikely(__pyx_t_15 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_15 >= __pyx_bshape_0_r)) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexError(__pyx_t_6);
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
}
*__Pyx_BufPtrStrided1d(float *, __pyx_bstruct_r.buf, __pyx_t_15, __pyx_bstride_0_r) = __pyx_7;
}
__pyx_L7:;
__pyx_r = Py_None; Py_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
Py_XDECREF(__pyx_1);
Py_XDECREF(__pyx_2);
Py_XDECREF(__pyx_3);
Py_XDECREF(__pyx_4);
Py_XDECREF(__pyx_5);
{ PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
__Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_a);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_r);
__Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
__Pyx_AddTraceback("spatial.gridworld._edges_from_center");
__pyx_r = NULL;
goto __pyx_L2;
__pyx_L0:;
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_a);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_r);
__pyx_L2:;
Py_XDECREF(__pyx_v_a);
Py_XDECREF(__pyx_v_r);
return __pyx_r;
}
45:
46: ######################################################################
47: # Now the gridworld class
48:
49: cdef class GridWorld:
struct __pyx_obj_7spatial_9gridworld_GridWorld {
PyObject_HEAD
PyArrayObject *x_edges;
PyArrayObject *y_edges;
PyArrayObject *z_edges;
};
50: """
static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
int __pyx_v_t;
char *__pyx_v_f;
PyArray_Descr *__pyx_v_descr = 0;
PyObject *__pyx_v_stack;
int __pyx_v_hasfields;
PyObject *__pyx_v_iterator;
int __pyx_r;
if (__pyx_v_info == NULL) return 0;
__pyx_v_info->obj = Py_None; Py_INCREF(Py_None);
__pyx_v_stack = ((PyObject *)Py_None); Py_INCREF(Py_None);
__pyx_v_iterator = Py_None; Py_INCREF(Py_None);
51: Defines a world that has a grid structure.
52: """
struct __pyx_obj_7spatial_8geometry_Box {
struct __pyx_obj_7spatial_8geometry_SpatialObject __pyx_base;
float xmin;
float ymin;
float zmin;
float xmax;
float ymax;
float zmax;
float wx;
float wy;
float wz;
};
struct __pyx_vtabstruct_7spatial_8geometry_Box {
struct __pyx_vtabstruct_7spatial_8geometry_SpatialObject __pyx_base;
PyObject *(*get_nonrandom_array_size)(struct __pyx_obj_7spatial_8geometry_Box *, __pyx_t_7spatial_8geometry_size_t);
__pyx_t_7spatial_8geometry_size_t (*get_gridsize)(struct __pyx_obj_7spatial_8geometry_Box *, __pyx_t_7spatial_8geometry_size_t);
void (*setNonrandomSamples)(struct __pyx_obj_7spatial_8geometry_Box *, PyArrayObject *, __pyx_t_7spatial_8geometry_size_t);
void (*setCoordsDirect)(struct __pyx_obj_7spatial_8geometry_Box *, struct __pyx_obj_7spatial_8geometry_Point *, struct __pyx_obj_7spatial_8geometry_Point *);
void (*_setWidths)(struct __pyx_obj_7spatial_8geometry_Box *);
};
53:
54: # Class type declarations:
55: cdef:
__pyx_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
if (__pyx_1) {
56: ar x_edges, y_edges, z_edges
__pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_INCREF(__pyx_kp_1);
PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_1);
__pyx_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
__Pyx_Raise(__pyx_3, 0, 0);
Py_DECREF(__pyx_3); __pyx_3 = 0;
{__pyx_filename = __pyx_f[1]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
goto __pyx_L5;
}
__pyx_L5:;
57:
58: def __init__(self, x_centers, y_centers, z_centers,
static int __pyx_pf_7spatial_9gridworld_9GridWorld___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); __pyx_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS); if (__pyx_1) {
59: tuple x_bounds = None, tuple y_bounds = None, tuple z_bounds = None):
__pyx_1 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_C_CONTIGUOUS));
}
if (__pyx_1) {
60: """
__pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_INCREF(__pyx_kp_2);
PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_2);
__pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
__Pyx_Raise(__pyx_3, 0, 0);
Py_DECREF(__pyx_3); __pyx_3 = 0;
{__pyx_filename = __pyx_f[1]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
goto __pyx_L6;
}
__pyx_L6:;
61: Borkborkbork
62: """
__pyx_1 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS);
if (__pyx_1) {
63:
__pyx_1 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_F_CONTIGUOUS));
}
if (__pyx_1) {
64: self.x_edges = _edges_from_center(x_centers, x_bounds)
__pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp__edges_from_center); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_2 = PyTuple_New(2); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_INCREF(__pyx_v_x_centers);
PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_x_centers);
Py_INCREF(((PyObject *)__pyx_v_x_bounds));
PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject *)__pyx_v_x_bounds));
__pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(((PyObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->x_edges));
((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->x_edges = ((PyArrayObject *)__pyx_3);
__pyx_3 = 0;
__pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_INCREF(__pyx_kp_3);
PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_3);
__pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
__Pyx_Raise(__pyx_3, 0, 0);
Py_DECREF(__pyx_3); __pyx_3 = 0;
{__pyx_filename = __pyx_f[1]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
goto __pyx_L7;
}
__pyx_L7:;
65: self.y_edges = _edges_from_center(y_centers, y_bounds)
__pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp__edges_from_center); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_2 = PyTuple_New(2); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_INCREF(__pyx_v_y_centers);
PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_y_centers);
Py_INCREF(((PyObject *)__pyx_v_y_bounds));
PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject *)__pyx_v_y_bounds));
__pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(((PyObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->y_edges));
((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->y_edges = ((PyArrayObject *)__pyx_3);
__pyx_3 = 0;
66: self.z_edges = _edges_from_center(z_centers, z_bounds)
__pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp__edges_from_center); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_2 = PyTuple_New(2); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_INCREF(__pyx_v_z_centers);
PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_z_centers);
Py_INCREF(((PyObject *)__pyx_v_z_bounds));
PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject *)__pyx_v_z_bounds));
__pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(((PyObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->z_edges));
((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->z_edges = ((PyArrayObject *)__pyx_3);
__pyx_3 = 0;
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
Py_XDECREF(__pyx_1);
Py_XDECREF(__pyx_2);
Py_XDECREF(__pyx_3);
__Pyx_AddTraceback("spatial.gridworld.GridWorld.__init__");
__pyx_r = -1;
__pyx_L0:;
return __pyx_r;
}
__pyx_v_info->buf = PyArray_DATA(((PyArrayObject *)__pyx_v_self));
67:
__pyx_v_info->ndim = PyArray_NDIM(((PyArrayObject *)__pyx_v_self));
68:
__pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(((PyArrayObject *)__pyx_v_self)));
69: @cython.boundscheck(False)
__pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(((PyArrayObject *)__pyx_v_self)));
70: def generateCSCoefficients(self, cs_class, mset, size_t samples_per_box):
static PyObject *__pyx_pf_7spatial_9gridworld_9GridWorld_generateCSCoefficients(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); __pyx_v_info->suboffsets = NULL;
71: """
__pyx_v_info->itemsize = PyArray_ITEMSIZE(((PyArrayObject *)__pyx_v_self));
72: Returns a CS problem of type `cs_class` with the coefficients
__pyx_v_info->readonly = (!PyArray_ISWRITEABLE(((PyArrayObject *)__pyx_v_self)));
73: from
74: """
75:
__pyx_v_f = NULL;
76: # Type the data
Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_v_self)->descr));
__pyx_v_descr = ((PyArrayObject *)__pyx_v_self)->descr;
77: cdef ar[float, ndim=3] mdata = mset.data
__pyx_1 = PyObject_GetAttr(__pyx_v_mset, __pyx_kp_data); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
if (!(__Pyx_TypeTest(__pyx_1, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_t_1 = ((PyArrayObject *)__pyx_1);
if (unlikely(__Pyx_GetBuffer_float((PyObject*)__pyx_t_1, &__pyx_bstruct_mdata, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0) == -1)) {
__pyx_v_mdata = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_bstruct_mdata.buf = NULL;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
} else {__pyx_bstride_0_mdata = __pyx_bstruct_mdata.strides[0]; __pyx_bstride_1_mdata = __pyx_bstruct_mdata.strides[1]; __pyx_bstride_2_mdata = __pyx_bstruct_mdata.strides[2];
__pyx_bshape_0_mdata = __pyx_bstruct_mdata.shape[0]; __pyx_bshape_1_mdata = __pyx_bstruct_mdata.shape[1]; __pyx_bshape_2_mdata = __pyx_bstruct_mdata.shape[2];
}
__pyx_t_1 = 0;
__pyx_v_mdata = ((PyArrayObject *)__pyx_1);
__pyx_1 = 0;
78: cdef ar[float, ndim=2] mpts = mset.measure_pts
__pyx_1 = PyObject_GetAttr(__pyx_v_mset, __pyx_kp_measure_pts); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
if (!(__Pyx_TypeTest(__pyx_1, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_t_2 = ((PyArrayObject *)__pyx_1);
if (unlikely(__Pyx_GetBuffer_float((PyObject*)__pyx_t_2, &__pyx_bstruct_mpts, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0) == -1)) {
__pyx_v_mpts = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_bstruct_mpts.buf = NULL;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
} else {__pyx_bstride_0_mpts = __pyx_bstruct_mpts.strides[0]; __pyx_bstride_1_mpts = __pyx_bstruct_mpts.strides[1];
__pyx_bshape_0_mpts = __pyx_bstruct_mpts.shape[0]; __pyx_bshape_1_mpts = __pyx_bstruct_mpts.shape[1];
}
__pyx_t_2 = 0;
__pyx_v_mpts = ((PyArrayObject *)__pyx_1);
__pyx_1 = 0;
79:
__pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
80: # Init the output array
81: cdef ar[float, mode="c", ndim=3] mT = \
82: np.empty( (n_boxes, n_measurements), dtype=np.float32)
__pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_empty); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_1); __pyx_1 = 0;
__pyx_1 = PyLong_FromUnsignedLong(__pyx_v_n_boxes); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_3 = PyLong_FromUnsignedLong(__pyx_v_n_measurements); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
PyTuple_SET_ITEM(__pyx_4, 0, __pyx_1);
PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3);
__pyx_1 = 0;
__pyx_3 = 0;
__pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
PyTuple_SET_ITEM(__pyx_1, 0, ((PyObject *)__pyx_4));
__pyx_4 = 0;
__pyx_3 = PyDict_New(); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_4 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_5 = PyObject_GetAttr(__pyx_4, __pyx_kp_25); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_4); __pyx_4 = 0;
if (PyDict_SetItem(__pyx_3, __pyx_kp_dtype, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_5); __pyx_5 = 0;
__pyx_4 = PyEval_CallObjectWithKeywords(__pyx_2, ((PyObject *)__pyx_1), ((PyObject *)__pyx_3)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_2); __pyx_2 = 0;
Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
if (!(__Pyx_TypeTest(__pyx_4, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_t_3 = ((PyArrayObject *)__pyx_4);
if (unlikely(__Pyx_GetBuffer_float((PyObject*)__pyx_t_3, &__pyx_bstruct_mT, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS| PyBUF_WRITABLE, 3, 0) == -1)) {
__pyx_v_mT = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_bstruct_mT.buf = NULL;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
} else {__pyx_bstride_0_mT = __pyx_bstruct_mT.strides[0]; __pyx_bstride_1_mT = __pyx_bstruct_mT.strides[1]; __pyx_bstride_2_mT = __pyx_bstruct_mT.strides[2];
__pyx_bshape_0_mT = __pyx_bstruct_mT.shape[0]; __pyx_bshape_1_mT = __pyx_bstruct_mT.shape[1]; __pyx_bshape_2_mT = __pyx_bstruct_mT.shape[2];
}
__pyx_t_3 = 0;
__pyx_v_mT = ((PyArrayObject *)__pyx_4);
__pyx_4 = 0;
83:
84: # Get the temporary objects we need
85: cdef Box curbox = Box()
__pyx_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7spatial_8geometry_Box)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
if (!(__Pyx_TypeTest(__pyx_5, __pyx_ptype_7spatial_8geometry_Box))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_v_curbox = ((struct __pyx_obj_7spatial_8geometry_Box *)__pyx_5);
__pyx_5 = 0;
86: cdef Point measure_pt = Point()
__pyx_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7spatial_8geometry_Point)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
if (!(__Pyx_TypeTest(__pyx_2, __pyx_ptype_7spatial_8geometry_Point))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_v_measure_pt = ((struct __pyx_obj_7spatial_8geometry_Point *)__pyx_2);
__pyx_2 = 0;
87: cdef GravityField gf = GravityField()
__pyx_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7spatial_7gravity_GravityField)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
if (!(__Pyx_TypeTest(__pyx_1, __pyx_ptype_7spatial_7gravity_GravityField))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_v_gf = ((struct __pyx_obj_7spatial_7gravity_GravityField *)__pyx_1);
__pyx_1 = 0;
88:
89: # Get the gridsize:
90: cdef size_t grid_size = <size_t>ceil(( <float> samples_per_box)**(1.0/3))
__pyx_v_grid_size = ((__pyx_t_7spatial_9gridworld_size_t)ceil(pow(((float)__pyx_v_samples_per_box), (1.0 / 3))));
__pyx_1 = (!__pyx_v_hasfields);
if (__pyx_1) {
91:
Py_INCREF(Py_None);
Py_DECREF(__pyx_v_info->obj);
__pyx_v_info->obj = Py_None;
92: # get the arrays for setting the box locations, along with the points
__pyx_v_t = __pyx_v_descr->type_num;
93: cdef:
switch (__pyx_v_t) {
case NPY_BYTE:
__pyx_v_f = __pyx_k_4;
break;
case NPY_UBYTE:
94: ar[float, mode="c"] x_edges = self.x_edges
__pyx_t_4 = ((PyArrayObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->x_edges);
if (unlikely(__Pyx_GetBuffer_float((PyObject*)__pyx_t_4, &__pyx_bstruct_x_edges, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0) == -1)) {
__pyx_v_x_edges = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_bstruct_x_edges.buf = NULL;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
} else {__pyx_bstride_0_x_edges = __pyx_bstruct_x_edges.strides[0];
__pyx_bshape_0_x_edges = __pyx_bstruct_x_edges.shape[0];
}
__pyx_t_4 = 0;
Py_INCREF(((PyObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->x_edges));
__pyx_v_x_edges = ((PyArrayObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->x_edges);
__pyx_v_f = __pyx_k_5;
break;
case NPY_SHORT:
95: ar[float, mode="c"] y_edges = self.y_edges
__pyx_t_5 = ((PyArrayObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->y_edges);
if (unlikely(__Pyx_GetBuffer_float((PyObject*)__pyx_t_5, &__pyx_bstruct_y_edges, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0) == -1)) {
__pyx_v_y_edges = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_bstruct_y_edges.buf = NULL;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
} else {__pyx_bstride_0_y_edges = __pyx_bstruct_y_edges.strides[0];
__pyx_bshape_0_y_edges = __pyx_bstruct_y_edges.shape[0];
}
__pyx_t_5 = 0;
Py_INCREF(((PyObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->y_edges));
__pyx_v_y_edges = ((PyArrayObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->y_edges);
__pyx_v_f = __pyx_k_6;
break;
case NPY_USHORT:
96: ar[float, mode="c"] z_edges = self.z_edges
__pyx_t_6 = ((PyArrayObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->z_edges);
if (unlikely(__Pyx_GetBuffer_float((PyObject*)__pyx_t_6, &__pyx_bstruct_z_edges, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0) == -1)) {
__pyx_v_z_edges = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_bstruct_z_edges.buf = NULL;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
} else {__pyx_bstride_0_z_edges = __pyx_bstruct_z_edges.strides[0];
__pyx_bshape_0_z_edges = __pyx_bstruct_z_edges.shape[0];
}
__pyx_t_6 = 0;
Py_INCREF(((PyObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->z_edges));
__pyx_v_z_edges = ((PyArrayObject *)((struct __pyx_obj_7spatial_9gridworld_GridWorld *)__pyx_v_self)->z_edges);
__pyx_v_f = __pyx_k_7;
break;
case NPY_INT:
97: Point p1=Point(), p2=Point()
__pyx_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7spatial_8geometry_Point)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_7spatial_8geometry_Point))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_v_p1 = ((struct __pyx_obj_7spatial_8geometry_Point *)__pyx_3);
__pyx_3 = 0;
__pyx_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7spatial_8geometry_Point)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
if (!(__Pyx_TypeTest(__pyx_4, __pyx_ptype_7spatial_8geometry_Point))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_v_p2 = ((struct __pyx_obj_7spatial_8geometry_Point *)__pyx_4);
__pyx_4 = 0;
__pyx_v_f = __pyx_k_8;
break;
case NPY_UINT:
98:
__pyx_v_f = __pyx_k_9;
break;
case NPY_LONG:
99: # Set up the indexing
__pyx_v_f = __pyx_k_10;
break;
case NPY_ULONG:
100: cdef size_t nx, ny, nz, xi, yi, zi, bi, mi, n_boxes, n_measurements
__pyx_v_f = __pyx_k_11;
break;
case NPY_LONGLONG:
101:
__pyx_v_f = __pyx_k_12;
break;
case NPY_ULONGLONG:
102: nx = x_edges.shape[0] - 1
__pyx_v_nx = ((__pyx_v_x_edges->dimensions[0]) - 1);
__pyx_v_f = __pyx_k_13;
break;
case NPY_FLOAT:
103: ny = y_edges.shape[0] - 1
__pyx_v_ny = ((__pyx_v_y_edges->dimensions[0]) - 1);
__pyx_v_f = __pyx_k_14;
break;
case NPY_DOUBLE:
104: nz = z_edges.shape[0] - 1
__pyx_v_nz = ((__pyx_v_z_edges->dimensions[0]) - 1);
__pyx_v_f = __pyx_k_15;
break;
case NPY_LONGDOUBLE:
105: n_boxes = nx*ny*nz
__pyx_v_n_boxes = ((__pyx_v_nx * __pyx_v_ny) * __pyx_v_nz);
__pyx_v_f = __pyx_k_16;
break;
case NPY_CFLOAT:
106: n_measurements = mdata.shape[0]
__pyx_v_n_measurements = (__pyx_v_mdata->dimensions[0]);
__pyx_v_f = __pyx_k_17;
break;
case NPY_CDOUBLE:
107:
__pyx_v_f = __pyx_k_18;
break;
case NPY_CLONGDOUBLE:
108: # Now we're ready to get going
__pyx_v_f = __pyx_k_19;
break;
case NPY_OBJECT:
109: curbox.setDensity(0)
__pyx_5 = ((struct __pyx_vtabstruct_7spatial_8geometry_Box *)__pyx_v_curbox->__pyx_base.__pyx_vtab)->__pyx_base.setDensity(((struct __pyx_obj_7spatial_8geometry_SpatialObject *)__pyx_v_curbox), 0, 0); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_5); __pyx_5 = 0;
__pyx_v_f = __pyx_k_20;
break;
default:
110:
111: # Now do the looping
__pyx_2 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_t_1 = PyNumber_Remainder(__pyx_kp_21, __pyx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_2); __pyx_2 = 0;
__pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
PyTuple_SET_ITEM(__pyx_3, 0, __pyx_t_1);
__pyx_t_1 = 0;
__pyx_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
__Pyx_Raise(__pyx_2, 0, 0);
Py_DECREF(__pyx_2); __pyx_2 = 0;
{__pyx_filename = __pyx_f[1]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
break;
}
112: for bi from 0 <= bi < n_boxes:
for (__pyx_v_bi = 0; __pyx_v_bi < __pyx_v_n_boxes; __pyx_v_bi++) {
__pyx_v_info->format = __pyx_v_f;
113:
__pyx_r = 0;
goto __pyx_L0;
goto __pyx_L8;
}
/*else*/ {
114: # Set up the box; this would be easier to cycle through
115: # xi, yi, zi, then get the index, but they will probably
Py_INCREF(__pyx_v_self);
Py_DECREF(__pyx_v_info->obj);
__pyx_v_info->obj = __pyx_v_self;
116: # both get optimized to the same thing and this keeps
__pyx_v_info->format = ((char *)malloc(255));
117: # consistency with the other routines.
__pyx_v_f = __pyx_v_info->format;
118:
__pyx_3 = PyObject_GetAttr(__pyx_v_descr->fields, __pyx_kp_iteritems); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__pyx_2 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_3); __pyx_3 = 0;
__pyx_3 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_2); __pyx_2 = 0;
__pyx_2 = PyList_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
PyList_SET_ITEM(__pyx_2, 0, __pyx_3);
__pyx_3 = 0;
Py_DECREF(((PyObject *)__pyx_v_stack));
__pyx_v_stack = __pyx_2;
__pyx_2 = 0;
119: xi = _idx_to_xi(bi, nx, ny, nz)
__pyx_v_xi = __pyx_f_7spatial_9gridworld__idx_to_xi(__pyx_v_bi, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz);
120: yi = _idx_to_yi(bi, nx, ny, nz)
__pyx_v_yi = __pyx_f_7spatial_9gridworld__idx_to_yi(__pyx_v_bi, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz);
while (1) {
__pyx_1 = 1;
if (!__pyx_1) break;
121: zi = _idx_to_zi(bi, nx, ny, nz)
__pyx_v_zi = __pyx_f_7spatial_9gridworld__idx_to_zi(__pyx_v_bi, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz);
__pyx_3 = __Pyx_GetItemInt(((PyObject *)__pyx_v_stack), -1, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(__pyx_v_iterator);
__pyx_v_iterator = __pyx_3;
__pyx_3 = 0;
122:
Py_INCREF(Py_None);
Py_DECREF(((PyObject *)__pyx_v_descr));
__pyx_v_descr = ((PyArray_Descr *)Py_None);
123: p1.x = x_edges[xi]
__pyx_t_7 = __pyx_v_xi;
__pyx_v_p1->x = (*__Pyx_BufPtrCContig1d(float *, __pyx_bstruct_x_edges.buf, __pyx_t_7, __pyx_bstride_0_x_edges));
while (1) {
__pyx_1 = (((PyObject *)__pyx_v_descr) == Py_None);
if (!__pyx_1) break;
124: p2.x = x_edges[xi+1]
__pyx_t_8 = (__pyx_v_xi + 1);
__pyx_v_p2->x = (*__Pyx_BufPtrCContig1d(float *, __pyx_bstruct_x_edges.buf, __pyx_t_8, __pyx_bstride_0_x_edges));
{
PyObject *__pyx_save_exc_type, *__pyx_save_exc_value, *__pyx_save_exc_tb;
__Pyx_ExceptionSave(&__pyx_save_exc_type, &__pyx_save_exc_value, &__pyx_save_exc_tb);
/*try:*/ {
125: p1.y = y_edges[yi]
__pyx_t_9 = __pyx_v_yi;
__pyx_v_p1->y = (*__Pyx_BufPtrCContig1d(float *, __pyx_bstruct_y_edges.buf, __pyx_t_9, __pyx_bstride_0_y_edges));
__pyx_2 = PyObject_GetAttr(__pyx_v_iterator, __pyx_kp_next); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
__pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
Py_DECREF(__pyx_2); __pyx_2 = 0;
__pyx_2 = __Pyx_GetItemInt(__pyx_3, 1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
Py_DECREF(__pyx_3); __pyx_3 = 0;
__pyx_3 = __Pyx_GetItemInt(__pyx_2, 0, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
Py_DECREF(__pyx_2); __pyx_2 = 0;
if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_5numpy_dtype))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
Py_DECREF(((PyObject *)__pyx_v_descr));
__pyx_v_descr = ((PyArray_Descr *)__pyx_3);
__pyx_3 = 0;
}
goto __pyx_L17_try;
__pyx_L13_error:;
Py_XDECREF(__pyx_2); __pyx_2 = 0;
Py_XDECREF(__pyx_3); __pyx_3 = 0;
126: p2.y = y_edges[yi+1]
__pyx_t_10 = (__pyx_v_yi + 1);
__pyx_v_p2->y = (*__Pyx_BufPtrCContig1d(float *, __pyx_bstruct_y_edges.buf, __pyx_t_10, __pyx_bstride_0_y_edges));
__pyx_4 = PyErr_ExceptionMatches(__pyx_builtin_StopIteration);
if (__pyx_4) {
__Pyx_AddTraceback("numpy.__getbuffer__");
if (__Pyx_GetException(&__pyx_2, &__pyx_3, &__pyx_5) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
127: p1.z = z_edges[zi]
__pyx_t_11 = __pyx_v_zi;
__pyx_v_p1->z = (*__Pyx_BufPtrCContig1d(float *, __pyx_bstruct_z_edges.buf, __pyx_t_11, __pyx_bstride_0_z_edges));
__pyx_6 = PyObject_GetAttr(((PyObject *)__pyx_v_stack), __pyx_kp_pop); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
__pyx_7 = PyObject_Call(__pyx_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
Py_DECREF(__pyx_6); __pyx_6 = 0;
Py_DECREF(__pyx_7); __pyx_7 = 0;
128: p2.z = z_edges[zi+1]
__pyx_t_12 = (__pyx_v_zi + 1);
__pyx_v_p2->z = (*__Pyx_BufPtrCContig1d(float *, __pyx_bstruct_z_edges.buf, __pyx_t_12, __pyx_bstride_0_z_edges));
__pyx_8 = PyObject_Length(((PyObject *)__pyx_v_stack)); if (unlikely(__pyx_8 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
__pyx_1 = (__pyx_8 > 0);
if (__pyx_1) {
129:
(__pyx_v_f[0]) = 125;
130: curbox.setCoordsDirect(p1, p2)
((struct __pyx_vtabstruct_7spatial_8geometry_Box *)__pyx_v_curbox->__pyx_base.__pyx_vtab)->setCoordsDirect(__pyx_v_curbox, __pyx_v_p1, __pyx_v_p2);
__pyx_v_f += 1;
131:
__pyx_6 = __Pyx_GetItemInt(((PyObject *)__pyx_v_stack), -1, 0); if (!__pyx_6) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
Py_DECREF(__pyx_v_iterator);
__pyx_v_iterator = __pyx_6;
__pyx_6 = 0;
goto __pyx_L18;
}
/*else*/ {
132: # Now get all the measurements
133:
(__pyx_v_f[0]) = 0;
134: for mi from 0 <= mi < n_measurements:
for (__pyx_v_mi = 0; __pyx_v_mi < __pyx_v_n_measurements; __pyx_v_mi++) {
__pyx_r = 0;
Py_DECREF(__pyx_2); __pyx_2 = 0;
Py_DECREF(__pyx_3); __pyx_3 = 0;
Py_DECREF(__pyx_5); __pyx_5 = 0;
goto __pyx_L16_except_return;
}
__pyx_L18:;
Py_DECREF(__pyx_2); __pyx_2 = 0;
Py_DECREF(__pyx_3); __pyx_3 = 0;
Py_DECREF(__pyx_5); __pyx_5 = 0;
goto __pyx_L14_exception_handled;
}
__pyx_L15_except_error:;
Py_XDECREF(__pyx_save_exc_type);
Py_XDECREF(__pyx_save_exc_value);
Py_XDECREF(__pyx_save_exc_tb);
goto __pyx_L1_error;
__pyx_L16_except_return:;
__Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
goto __pyx_L0;
__pyx_L14_exception_handled:;
__Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
__pyx_L17_try:;
}
}
135: measure_pt.set(mpts[mi, 0], mpts[mi, 1], mpts[mi, 2])
__pyx_t_13 = __pyx_v_mi;
__pyx_t_14 = 0;
if (__pyx_t_14 < 0) __pyx_t_14 += __pyx_bshape_1_mpts;
__pyx_t_15 = __pyx_v_mi;
__pyx_t_16 = 1;
if (__pyx_t_16 < 0) __pyx_t_16 += __pyx_bshape_1_mpts;
__pyx_t_17 = __pyx_v_mi;
__pyx_t_18 = 2;
if (__pyx_t_18 < 0) __pyx_t_18 += __pyx_bshape_1_mpts;
((struct __pyx_vtabstruct_7spatial_8geometry_Point *)__pyx_v_measure_pt->__pyx_vtab)->set(__pyx_v_measure_pt, (*__Pyx_BufPtrStrided2d(float *, __pyx_bstruct_mpts.buf, __pyx_t_13, __pyx_bstride_0_mpts, __pyx_t_14, __pyx_bstride_1_mpts)), (*__Pyx_BufPtrStrided2d(float *, __pyx_bstruct_mpts.buf, __pyx_t_15, __pyx_bstride_0_mpts, __pyx_t_16, __pyx_bstride_1_mpts)), (*__Pyx_BufPtrStrided2d(float *, __pyx_bstruct_mpts.buf, __pyx_t_17, __pyx_bstride_0_mpts, __pyx_t_18, __pyx_bstride_1_mpts)));
136:
__pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
137: # Set the gravity field
__pyx_1 = (!__pyx_v_hasfields);
if (__pyx_1) {
138: setInducedGF_box_nomask_nonrandom(measure_pt, curbox, gf, grid_size)
__pyx_f_7spatial_7gravity_setInducedGF_box_nomask_nonrandom(__pyx_v_measure_pt, __pyx_v_curbox, __pyx_v_gf, __pyx_v_grid_size);
__pyx_v_t = __pyx_v_descr->type_num;
139:
__pyx_1 = ((__pyx_v_f - __pyx_v_info->format) > 240);
if (__pyx_1) {
140: # C is going to be Txx - Tyy, and D is going to be
__pyx_7 = PyTuple_New(1); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_INCREF(__pyx_kp_22);
PyTuple_SET_ITEM(__pyx_7, 0, __pyx_kp_22);
__pyx_6 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_7), NULL); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(((PyObject *)__pyx_7)); __pyx_7 = 0;
__Pyx_Raise(__pyx_6, 0, 0);
Py_DECREF(__pyx_6); __pyx_6 = 0;
{__pyx_filename = __pyx_f[1]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
goto __pyx_L20;
}
__pyx_L20:;
141: # Txy. This may be open to updating.
142: mT[bi, mi, 0] = gf.Txx
__pyx_t_19 = __pyx_v_bi;
__pyx_t_20 = __pyx_v_mi;
__pyx_t_21 = 0;
if (__pyx_t_21 < 0) __pyx_t_21 += __pyx_bshape_2_mT;
*__Pyx_BufPtrCContig3d(float *, __pyx_bstruct_mT.buf, __pyx_t_19, __pyx_bstride_0_mT, __pyx_t_20, __pyx_bstride_1_mT, __pyx_t_21, __pyx_bstride_2_mT) = __pyx_v_gf->Txx;
143: mT[bi, mi, 1] = gf.Txy
__pyx_t_22 = __pyx_v_bi;
__pyx_t_23 = __pyx_v_mi;
__pyx_t_24 = 1;
if (__pyx_t_24 < 0) __pyx_t_24 += __pyx_bshape_2_mT;
*__Pyx_BufPtrCContig3d(float *, __pyx_bstruct_mT.buf, __pyx_t_22, __pyx_bstride_0_mT, __pyx_t_23, __pyx_bstride_1_mT, __pyx_t_24, __pyx_bstride_2_mT) = __pyx_v_gf->Txy;
switch (__pyx_v_t) {
case NPY_BYTE:
(__pyx_v_f[0]) = 98;
break;
case NPY_UBYTE:
144: mT[bi, mi, 2] = gf.Tyy
__pyx_t_25 = __pyx_v_bi;
__pyx_t_26 = __pyx_v_mi;
__pyx_t_27 = 2;
if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_2_mT;
*__Pyx_BufPtrCContig3d(float *, __pyx_bstruct_mT.buf, __pyx_t_25, __pyx_bstride_0_mT, __pyx_t_26, __pyx_bstride_1_mT, __pyx_t_27, __pyx_bstride_2_mT) = __pyx_v_gf->Tyy;
}
}
(__pyx_v_f[0]) = 66;
break;
case NPY_SHORT:
145:
(__pyx_v_f[0]) = 104;
break;
case NPY_USHORT:
146: # We're done, now run with it!
(__pyx_v_f[0]) = 72;
break;
case NPY_INT:
147: return cs_class(mT)
__pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_INCREF(((PyObject *)__pyx_v_mT));
PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_mT));
__pyx_1 = PyObject_Call(__pyx_v_cs_class, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
__pyx_r = __pyx_1;
__pyx_1 = 0;
goto __pyx_L0;
__pyx_r = Py_None; Py_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
Py_XDECREF(__pyx_1);
Py_XDECREF(__pyx_2);
Py_XDECREF(__pyx_3);
Py_XDECREF(__pyx_4);
Py_XDECREF(__pyx_5);
{ PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
__Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_mdata);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_edges);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_mpts);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_y_edges);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_mT);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_z_edges);
__Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
__Pyx_AddTraceback("spatial.gridworld.GridWorld.generateCSCoefficients");
__pyx_r = NULL;
goto __pyx_L2;
__pyx_L0:;
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_mdata);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_edges);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_mpts);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_y_edges);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_mT);
__Pyx_SafeReleaseBuffer(&__pyx_bstruct_z_edges);
__pyx_L2:;
Py_XDECREF(__pyx_v_mdata);
Py_XDECREF(__pyx_v_mpts);
Py_XDECREF(__pyx_v_mT);
Py_XDECREF((PyObject *)__pyx_v_curbox);
Py_XDECREF(__pyx_v_measure_pt);
Py_XDECREF(__pyx_v_gf);
Py_XDECREF(__pyx_v_x_edges);
Py_XDECREF(__pyx_v_y_edges);
Py_XDECREF(__pyx_v_z_edges);
Py_XDECREF(__pyx_v_p1);
Py_XDECREF(__pyx_v_p2);
return __pyx_r;
}
(__pyx_v_f[0]) = 105;
break;
case NPY_UINT:
148:
(__pyx_v_f[0]) = 73;
break;
case NPY_LONG: