Generated by Cython 0.15.1+ on Wed Dec 21 21:48:02 2011
Raw output: bilinear.c
1: # -*- coding: utf8 -*-
/* "bilinear.pyx":1 * # -*- coding: utf8 -*- #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* # * # Project: Azimuthal integration */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
2: #
3: # Project: Azimuthal integration
4: # https://forge.epn-campus.eu/projects/azimuthal
5: #
6: # File: "$Id$"
7: #
8: # Copyright (C) European Synchrotron Radiation Facility, Grenoble, France
9: #
10: # Principal author: Jérôme Kieffer (Jerome.Kieffer@ESRF.eu)
11: #
12: # This program is free software: you can redistribute it and/or modify
13: # it under the terms of the GNU General Public License as published by
14: # the Free Software Foundation, either version 3 of the License, or
15: # (at your option) any later version.
16: #
17: # This program is distributed in the hope that it will be useful,
18: # but WITHOUT ANY WARRANTY; without even the implied warranty of
19: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20: # GNU General Public License for more details.
21: #
22: # You should have received a copy of the GNU General Public License
23: # along with this program. If not, see <http://www.gnu.org/licenses/>.
24: #
25:
26: __author__ = "Jerome Kieffer"
/* "bilinear.pyx":26 * # * * __author__ = "Jerome Kieffer" #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* __license__ = "GPLv3" * __date__ = "21/12/2011" */ if (PyObject_SetAttr(__pyx_m, __pyx_n_s____author__, ((PyObject *)__pyx_kp_s_14))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
27: __license__ = "GPLv3"
/* "bilinear.pyx":27 * * __author__ = "Jerome Kieffer" * __license__ = "GPLv3" #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* __date__ = "21/12/2011" * __copyright__ = "2011, ESRF" */ if (PyObject_SetAttr(__pyx_m, __pyx_n_s____license__, ((PyObject *)__pyx_n_s__GPLv3))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
28: __date__ = "21/12/2011"
/* "bilinear.pyx":28 * __author__ = "Jerome Kieffer" * __license__ = "GPLv3" * __date__ = "21/12/2011" #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* __copyright__ = "2011, ESRF" * __contact__ = "jerome.kieffer@esrf.fr" */ if (PyObject_SetAttr(__pyx_m, __pyx_n_s____date__, ((PyObject *)__pyx_kp_s_15))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
29: __copyright__ = "2011, ESRF"
/* "bilinear.pyx":29 * __license__ = "GPLv3" * __date__ = "21/12/2011" * __copyright__ = "2011, ESRF" #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* __contact__ = "jerome.kieffer@esrf.fr" * */ if (PyObject_SetAttr(__pyx_m, __pyx_n_s____copyright__, ((PyObject *)__pyx_kp_s_16))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
30: __contact__ = "jerome.kieffer@esrf.fr"
/* "bilinear.pyx":30 * __date__ = "21/12/2011" * __copyright__ = "2011, ESRF" * __contact__ = "jerome.kieffer@esrf.fr" #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* * import cython */ if (PyObject_SetAttr(__pyx_m, __pyx_n_s____contact__, ((PyObject *)__pyx_kp_s_17))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
31:
32: import cython
33: cimport numpy
34: import numpy
/* "bilinear.pyx":34 * import cython * cimport numpy * import numpy #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* ctypedef numpy.float32_t DTYPE_float32_t * */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetAttr(__pyx_m, __pyx_n_s__numpy, __pyx_t_1)<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
35: ctypedef numpy.float32_t DTYPE_float32_t
36:
37: cdef extern from "math.h":
38: float floor(float) nogil
39: float ceil(float) nogil
40: cdef extern from "stdlib.h":
41: void free(void * ptr)nogil
42: void * calloc(size_t nmemb, size_t size)nogil
43: void * malloc(size_t size)nogil
44: void * memcpy(void * dst, void * src, long n)
45: cdef extern from "numpy/arrayobject.h":
46: ctypedef int intp
47: ctypedef extern class numpy.ndarray [object PyArrayObject]:
48: cdef char * data
49: cdef int nd
50: cdef intp * dimensions
51: cdef intp * strides
52: cdef int flags
53:
54: @cython.boundscheck(False)
55: cdef class bilinear:
56: """Bilinear interpolator for finding max"""
57:
58: cdef float * data
59: cdef float max, min
60: cdef long d0_max, d1_max, r
61:
62: def __dealloc__(self):
/* "bilinear.pyx":62 * cdef long d0_max, d1_max, r * * def __dealloc__(self): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* free(self.data) * */ static void __pyx_pf_8bilinear_8bilinear___dealloc__(PyObject *__pyx_v_self); /*proto*/ static void __pyx_pf_8bilinear_8bilinear___dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__");
63: free(self.data)
/* "bilinear.pyx":63 * * def __dealloc__(self): * free(self.data) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* * def __init__(self, numpy.ndarray data not None): */ free(((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data); __Pyx_RefNannyFinishContext(); }
64:
65: def __init__(self, numpy.ndarray data not None):
/* "bilinear.pyx":65 * free(self.data) * * def __init__(self, numpy.ndarray data not None): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* assert data.ndim == 2 * self.d0_max = data.shape[0] - 1 */ static int __pyx_pf_8bilinear_8bilinear_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pf_8bilinear_8bilinear_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyArrayObject *__pyx_v_data = 0; PyArrayObject *__pyx_v_data2 = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_data2; __Pyx_Buffer __pyx_pybuffer_data2; int __pyx_r; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__data,0}; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__"); { PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); 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, pos_args, "__init__")<
0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_data = ((PyArrayObject *)values[0]); } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_data = ((PyArrayObject *)values[0]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("bilinear.bilinear.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; __pyx_pybuffer_data2.pybuffer.buf = NULL; __pyx_pybuffer_data2.refcount = 0; __pyx_pybuffernd_data2.data = NULL; __pyx_pybuffernd_data2.rcbuffer = &__pyx_pybuffer_data2; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 0, "data", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
66: assert data.ndim == 2
/* "bilinear.pyx":66 * * def __init__(self, numpy.ndarray data not None): * assert data.ndim == 2 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.d0_max = data.shape[0] - 1 * self.d1_max = data.shape[1] - 1 */ #ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!(__pyx_v_data->nd == 2))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif
67: self.d0_max = data.shape[0] - 1
/* "bilinear.pyx":67 * def __init__(self, numpy.ndarray data not None): * assert data.ndim == 2 * self.d0_max = data.shape[0] - 1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.d1_max = data.shape[1] - 1 * self.r = data.shape[1] */ ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->d0_max = ((__pyx_v_data->dimensions[0]) - 1);
68: self.d1_max = data.shape[1] - 1
/* "bilinear.pyx":68 * assert data.ndim == 2 * self.d0_max = data.shape[0] - 1 * self.d1_max = data.shape[1] - 1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.r = data.shape[1] * self.max = data.max() */ ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->d1_max = ((__pyx_v_data->dimensions[1]) - 1);
69: self.r = data.shape[1]
/* "bilinear.pyx":69 * self.d0_max = data.shape[0] - 1 * self.d1_max = data.shape[1] - 1 * self.r = data.shape[1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.max = data.max() * self.min = data.min() */ ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r = (__pyx_v_data->dimensions[1]);
70: self.max = data.max()
/* "bilinear.pyx":70 * self.d1_max = data.shape[1] - 1 * self.r = data.shape[1] * self.max = data.max() #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.min = data.min() * self.data =<
float *> malloc(data.size * sizeof(float)) */ __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_data), __pyx_n_s__max); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->max = __pyx_t_3;
71: self.min = data.min()
/* "bilinear.pyx":71 * self.r = data.shape[1] * self.max = data.max() * self.min = data.min() #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.data =<
float *> malloc(data.size * sizeof(float)) * cdef numpy.ndarray[DTYPE_float32_t, ndim = 2] data2 = numpy.ascontiguousarray(data.astype("float32")) */ __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_data), __pyx_n_s__min); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->min = __pyx_t_3;
72: self.data = < float *> malloc(data.size * sizeof(float))
/* "bilinear.pyx":72 * self.max = data.max() * self.min = data.min() * self.data =<
float *> malloc(data.size * sizeof(float)) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* cdef numpy.ndarray[DTYPE_float32_t, ndim = 2] data2 = numpy.ascontiguousarray(data.astype("float32")) * memcpy(self.data, data2.data, data.size * sizeof(float)) */ __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_data), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_FromSize_t((sizeof(float))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = __Pyx_PyInt_AsSize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data = ((float *)malloc(__pyx_t_5));
73: cdef numpy.ndarray[DTYPE_float32_t, ndim = 2] data2 = numpy.ascontiguousarray(data.astype("float32"))
/* "bilinear.pyx":73 * self.min = data.min() * self.data =<
float *> malloc(data.size * sizeof(float)) * cdef numpy.ndarray[DTYPE_float32_t, ndim = 2] data2 = numpy.ascontiguousarray(data.astype("float32")) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* memcpy(self.data, data2.data, data.size * sizeof(float)) * */ __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_data), __pyx_n_s__astype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_k_tuple_1), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_data2.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_8bilinear_DTYPE_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { __pyx_v_data2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_data2.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_data2.diminfo[0].strides = __pyx_pybuffernd_data2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_data2.diminfo[0].shape = __pyx_pybuffernd_data2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_data2.diminfo[1].strides = __pyx_pybuffernd_data2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_data2.diminfo[1].shape = __pyx_pybuffernd_data2.rcbuffer->pybuffer.shape[1]; } } __pyx_t_6 = 0; __pyx_v_data2 = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "bilinear.pyx":73 * self.min = data.min() * self.data =<
float *> malloc(data.size * sizeof(float)) * cdef numpy.ndarray[DTYPE_float32_t, ndim = 2] data2 = numpy.ascontiguousarray(data.astype("float32")) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* memcpy(self.data, data2.data, data.size * sizeof(float)) * */ __pyx_k_tuple_1 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__float32)); PyTuple_SET_ITEM(__pyx_k_tuple_1, 0, ((PyObject *)__pyx_n_s__float32)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__float32)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_1));
74: memcpy(self.data, data2.data, data.size * sizeof(float))
/* "bilinear.pyx":74 * self.data =<
float *> malloc(data.size * sizeof(float)) * cdef numpy.ndarray[DTYPE_float32_t, ndim = 2] data2 = numpy.ascontiguousarray(data.astype("float32")) * memcpy(self.data, data2.data, data.size * sizeof(float)) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* * */ __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_data), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyInt_FromSize_t((sizeof(float))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = __Pyx_PyInt_AsLong(__pyx_t_2); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; memcpy(((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data, __pyx_v_data2->data, __pyx_t_7); __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data2.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("bilinear.bilinear.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data2.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_data2); __Pyx_RefNannyFinishContext(); return __pyx_r; }
75:
76:
77: def f_cy(self, x):
/* "bilinear.pyx":77 * * * def f_cy(self, x): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* """ * Function f((y,x)) where f is a continuous function (y,x) are pixel coordinates */ static PyObject *__pyx_pf_8bilinear_8bilinear_2f_cy(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/ static char __pyx_doc_8bilinear_8bilinear_2f_cy[] = "\n Function f((y,x)) where f is a continuous function (y,x) are pixel coordinates\n @param x: 2-tuple of float \n @return: Interpolated signal from the image (negative for minimizer)\n\n "; static PyObject *__pyx_pf_8bilinear_8bilinear_2f_cy(PyObject *__pyx_v_self, PyObject *__pyx_v_x) { float __pyx_v_d0; float __pyx_v_d1; int __pyx_v_i0; int __pyx_v_i1; int __pyx_v_j0; int __pyx_v_j1; float __pyx_v_x0; float __pyx_v_x1; float __pyx_v_y0; float __pyx_v_y1; float __pyx_v_res; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("f_cy");
78: """
79: Function f((y,x)) where f is a continuous function (y,x) are pixel coordinates
80: @param x: 2-tuple of float
81: @return: Interpolated signal from the image (negative for minimizer)
82:
83: """
84: cdef float d0 = x[0]
/* "bilinear.pyx":84 * * """ * cdef float d0 = x[0] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* cdef float d1 = x[1] * cdef int i0, i1, j0, j1 */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_d0 = __pyx_t_2;
85: cdef float d1 = x[1]
/* "bilinear.pyx":85 * """ * cdef float d0 = x[0] * cdef float d1 = x[1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* cdef int i0, i1, j0, j1 * cdef float x0, x1, y0, y1, res */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_d1 = __pyx_t_2;
86: cdef int i0, i1, j0, j1
87: cdef float x0, x1, y0, y1, res
88: x0 = floor(d0)
/* "bilinear.pyx":88 * cdef int i0, i1, j0, j1 * cdef float x0, x1, y0, y1, res * x0 = floor(d0) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* x1 = ceil(d0) * y0 = floor(d1) */ __pyx_v_x0 = floor(__pyx_v_d0);
89: x1 = ceil(d0)
/* "bilinear.pyx":89 * cdef float x0, x1, y0, y1, res * x0 = floor(d0) * x1 = ceil(d0) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* y0 = floor(d1) * y1 = ceil(d1) */ __pyx_v_x1 = ceil(__pyx_v_d0);
90: y0 = floor(d1)
/* "bilinear.pyx":90 * x0 = floor(d0) * x1 = ceil(d0) * y0 = floor(d1) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* y1 = ceil(d1) * i0 =<
int > x0 */ __pyx_v_y0 = floor(__pyx_v_d1);
91: y1 = ceil(d1)
/* "bilinear.pyx":91 * x1 = ceil(d0) * y0 = floor(d1) * y1 = ceil(d1) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* i0 =<
int > x0 * i1 =<
int > x1 */ __pyx_v_y1 = ceil(__pyx_v_d1);
92: i0 = < int > x0
/* "bilinear.pyx":92 * y0 = floor(d1) * y1 = ceil(d1) * i0 =<
int > x0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* i1 =<
int > x1 * j0 =<
int > y0 */ __pyx_v_i0 = ((int)__pyx_v_x0);
93: i1 = < int > x1
/* "bilinear.pyx":93 * y1 = ceil(d1) * i0 =<
int > x0 * i1 =<
int > x1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* j0 =<
int > y0 * j1 =<
int > y1 */ __pyx_v_i1 = ((int)__pyx_v_x1);
94: j0 = < int > y0
/* "bilinear.pyx":94 * i0 =<
int > x0 * i1 =<
int > x1 * j0 =<
int > y0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* j1 =<
int > y1 * if d0<
0: */ __pyx_v_j0 = ((int)__pyx_v_y0);
95: j1 = < int > y1
/* "bilinear.pyx":95 * i1 =<
int > x1 * j0 =<
int > y0 * j1 =<
int > y1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* if d0<
0: * res = self.min + d0 */ __pyx_v_j1 = ((int)__pyx_v_y1);
96: if d0 < 0:
/* "bilinear.pyx":96 * j0 =<
int > y0 * j1 =<
int > y1 * if d0<
0: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.min + d0 * elif d1<
0: */ __pyx_t_3 = (__pyx_v_d0<
0.0); if (__pyx_t_3) {
97: res = self.min + d0
/* "bilinear.pyx":97 * j1 =<
int > y1 * if d0<
0: * res = self.min + d0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif d1<
0: * res = self.min + d1 */ __pyx_v_res = (((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->min + __pyx_v_d0); goto __pyx_L5; }
98: elif d1 < 0:
/* "bilinear.pyx":98 * if d0<
0: * res = self.min + d0 * elif d1<
0: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.min + d1 * elif d0 > self.d0_max: */ __pyx_t_3 = (__pyx_v_d1<
0.0); if (__pyx_t_3) {
99: res = self.min + d1
/* "bilinear.pyx":99 * res = self.min + d0 * elif d1<
0: * res = self.min + d1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif d0 > self.d0_max: * res = self.min - d0 + self.d0_max */ __pyx_v_res = (((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->min + __pyx_v_d1); goto __pyx_L5; }
100: elif d0 > self.d0_max:
/* "bilinear.pyx":100 * elif d1<
0: * res = self.min + d1 * elif d0 > self.d0_max: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.min - d0 + self.d0_max * elif d1 > self.d1_max: */ __pyx_t_3 = (__pyx_v_d0 > ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->d0_max); if (__pyx_t_3) {
101: res = self.min - d0 + self.d0_max
/* "bilinear.pyx":101 * res = self.min + d1 * elif d0 > self.d0_max: * res = self.min - d0 + self.d0_max #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif d1 > self.d1_max: * res = self.min - d1 + self.d1_max */ __pyx_v_res = ((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->min - __pyx_v_d0) + ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->d0_max); goto __pyx_L5; }
102: elif d1 > self.d1_max:
/* "bilinear.pyx":102 * elif d0 > self.d0_max: * res = self.min - d0 + self.d0_max * elif d1 > self.d1_max: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.min - d1 + self.d1_max * elif (i0 == i1) and (j0 == j1): */ __pyx_t_3 = (__pyx_v_d1 > ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->d1_max); if (__pyx_t_3) {
103: res = self.min - d1 + self.d1_max
/* "bilinear.pyx":103 * res = self.min - d0 + self.d0_max * elif d1 > self.d1_max: * res = self.min - d1 + self.d1_max #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif (i0 == i1) and (j0 == j1): * res = self.data[i0 * self.r + j0] */ __pyx_v_res = ((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->min - __pyx_v_d1) + ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->d1_max); goto __pyx_L5; }
104: elif (i0 == i1) and (j0 == j1):
/* "bilinear.pyx":104 * elif d1 > self.d1_max: * res = self.min - d1 + self.d1_max * elif (i0 == i1) and (j0 == j1): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.data[i0 * self.r + j0] * elif i0 == i1: */ __pyx_t_3 = (__pyx_v_i0 == __pyx_v_i1); if (__pyx_t_3) { __pyx_t_4 = (__pyx_v_j0 == __pyx_v_j1); __pyx_t_5 = __pyx_t_4; } else { __pyx_t_5 = __pyx_t_3; } if (__pyx_t_5) {
105: res = self.data[i0 * self.r + j0]
/* "bilinear.pyx":105 * res = self.min - d1 + self.d1_max * elif (i0 == i1) and (j0 == j1): * res = self.data[i0 * self.r + j0] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif i0 == i1: * res = (self.data[i0 * self.r + j0] * (y1 - d1)) + (self.data[i0 * self.r + j1] * (d1 - y0)) */ __pyx_v_res = (((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data[((__pyx_v_i0 * ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r) + __pyx_v_j0)]); goto __pyx_L5; }
106: elif i0 == i1:
/* "bilinear.pyx":106 * elif (i0 == i1) and (j0 == j1): * res = self.data[i0 * self.r + j0] * elif i0 == i1: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = (self.data[i0 * self.r + j0] * (y1 - d1)) + (self.data[i0 * self.r + j1] * (d1 - y0)) * elif j0 == j1: */ __pyx_t_5 = (__pyx_v_i0 == __pyx_v_i1); if (__pyx_t_5) {
107: res = (self.data[i0 * self.r + j0] * (y1 - d1)) + (self.data[i0 * self.r + j1] * (d1 - y0))
/* "bilinear.pyx":107 * res = self.data[i0 * self.r + j0] * elif i0 == i1: * res = (self.data[i0 * self.r + j0] * (y1 - d1)) + (self.data[i0 * self.r + j1] * (d1 - y0)) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif j0 == j1: * res = (self.data[i0 * self.r + j0] * (x1 - d0)) + (self.data[i1 * self.r + j0] * (d0 - x0)) */ __pyx_v_res = (((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data[((__pyx_v_i0 * ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r) + __pyx_v_j0)]) * (__pyx_v_y1 - __pyx_v_d1)) + ((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data[((__pyx_v_i0 * ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r) + __pyx_v_j1)]) * (__pyx_v_d1 - __pyx_v_y0))); goto __pyx_L5; }
108: elif j0 == j1:
/* "bilinear.pyx":108 * elif i0 == i1: * res = (self.data[i0 * self.r + j0] * (y1 - d1)) + (self.data[i0 * self.r + j1] * (d1 - y0)) * elif j0 == j1: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = (self.data[i0 * self.r + j0] * (x1 - d0)) + (self.data[i1 * self.r + j0] * (d0 - x0)) * else: */ __pyx_t_5 = (__pyx_v_j0 == __pyx_v_j1); if (__pyx_t_5) {
109: res = (self.data[i0 * self.r + j0] * (x1 - d0)) + (self.data[i1 * self.r + j0] * (d0 - x0))
/* "bilinear.pyx":109 * res = (self.data[i0 * self.r + j0] * (y1 - d1)) + (self.data[i0 * self.r + j1] * (d1 - y0)) * elif j0 == j1: * res = (self.data[i0 * self.r + j0] * (x1 - d0)) + (self.data[i1 * self.r + j0] * (d0 - x0)) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* else: * res = (self.data[i0 * self.r + j0] * (x1 - d0) * (y1 - d1)) \ */ __pyx_v_res = (((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data[((__pyx_v_i0 * ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r) + __pyx_v_j0)]) * (__pyx_v_x1 - __pyx_v_d0)) + ((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data[((__pyx_v_i1 * ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r) + __pyx_v_j0)]) * (__pyx_v_d0 - __pyx_v_x0))); goto __pyx_L5; } /*else*/ {
110: else:
111: res = (self.data[i0 * self.r + j0] * (x1 - d0) * (y1 - d1)) \
112: + (self.data[i1 * self.r + j0] * (d0 - x0) * (y1 - d1)) \
113: + (self.data[i0 * self.r + j1] * (x1 - d0) * (d1 - y0)) \
114: + (self.data[i1 * self.r + j1] * (d0 - x0) * (d1 - y0))
/* "bilinear.pyx":114 * + (self.data[i1 * self.r + j0] * (d0 - x0) * (y1 - d1)) \ * + (self.data[i0 * self.r + j1] * (x1 - d0) * (d1 - y0)) \ * + (self.data[i1 * self.r + j1] * (d0 - x0) * (d1 - y0)) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* return - res */ __pyx_v_res = ((((((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data[((__pyx_v_i0 * ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r) + __pyx_v_j0)]) * (__pyx_v_x1 - __pyx_v_d0)) * (__pyx_v_y1 - __pyx_v_d1)) + (((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data[((__pyx_v_i1 * ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r) + __pyx_v_j0)]) * (__pyx_v_d0 - __pyx_v_x0)) * (__pyx_v_y1 - __pyx_v_d1))) + (((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data[((__pyx_v_i0 * ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r) + __pyx_v_j1)]) * (__pyx_v_x1 - __pyx_v_d0)) * (__pyx_v_d1 - __pyx_v_y0))) + (((((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->data[((__pyx_v_i1 * ((struct __pyx_obj_8bilinear_bilinear *)__pyx_v_self)->r) + __pyx_v_j1)]) * (__pyx_v_d0 - __pyx_v_x0)) * (__pyx_v_d1 - __pyx_v_y0))); } __pyx_L5:;
115: return - res
/* "bilinear.pyx":115 * + (self.data[i0 * self.r + j1] * (x1 - d0) * (d1 - y0)) \ * + (self.data[i1 * self.r + j1] * (d0 - x0) * (d1 - y0)) * return - res #<
<
<
<
<
<
<
<
<
<
<
<
<
<
*/ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble((-__pyx_v_res)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("bilinear.bilinear.f_cy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }