Generated by Cython 0.19 on Mon Sep 30 17:13:04 2013
Raw output: bilinear.c
1: # -*- coding: utf-8 -*-
/* "bilinear.pyx":1 * # -*- coding: utf-8 -*- #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* # * # 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 (PyDict_SetItem(__pyx_d, __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__ = "31/01/2013" */ if (PyDict_SetItem(__pyx_d, __pyx_n_s____author__, ((PyObject *)__pyx_kp_s_49))<
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__ = "31/01/2013" * __copyright__ = "2011-2013, ESRF" */ if (PyDict_SetItem(__pyx_d, __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__ = "31/01/2013"
/* "bilinear.pyx":28 * __author__ = "Jerome Kieffer" * __license__ = "GPLv3" * __date__ = "31/01/2013" #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* __copyright__ = "2011-2013, ESRF" * __contact__ = "jerome.kieffer@esrf.fr" */ if (PyDict_SetItem(__pyx_d, __pyx_n_s____date__, ((PyObject *)__pyx_kp_s_50))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
29: __copyright__ = "2011-2013, ESRF"
/* "bilinear.pyx":29 * __license__ = "GPLv3" * __date__ = "31/01/2013" * __copyright__ = "2011-2013, ESRF" #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* __contact__ = "jerome.kieffer@esrf.fr" * */ if (PyDict_SetItem(__pyx_d, __pyx_n_s____copyright__, ((PyObject *)__pyx_kp_s_51))<
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__ = "31/01/2013" * __copyright__ = "2011-2013, ESRF" * __contact__ = "jerome.kieffer@esrf.fr" #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* * import cython */ if (PyDict_SetItem(__pyx_d, __pyx_n_s____contact__, ((PyObject *)__pyx_kp_s_52))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
31:
32: import cython
33: import numpy
/* "bilinear.pyx":33 * * import cython * import numpy #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* cimport numpy * */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__numpy, __pyx_t_1)<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
34: cimport numpy
35:
36: from libc.math cimport floor,ceil
37:
38:
39: cdef class Bilinear:
/* "bilinear.pyx":39 * * * cdef class Bilinear: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* """Bilinear interpolator for finding max""" * */ struct __pyx_obj_8bilinear_Bilinear { PyObject_HEAD __Pyx_memviewslice data; float maxi; float mini; size_t d0_max; size_t d1_max; size_t r; };
40: """Bilinear interpolator for finding max"""
41:
42: cdef float[:,:] data
43: cdef float maxi, mini
44: cdef size_t d0_max, d1_max, r
45:
46: def __cinit__(self, data not None):
/* "bilinear.pyx":46 * cdef size_t d0_max, d1_max, r * * def __cinit__(self, data not None): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* assert data.ndim == 2 * self.d0_max = data.shape[0] - 1 */ static int __pyx_pf_8bilinear_8Bilinear___cinit__(struct __pyx_obj_8bilinear_Bilinear *__pyx_v_self, PyObject *__pyx_v_data) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__cinit__", 0);
47: assert data.ndim == 2
/* "bilinear.pyx":47 * * def __cinit__(self, 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 __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_data, __pyx_n_s__ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3<
0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif
48: self.d0_max = data.shape[0] - 1
/* "bilinear.pyx":48 * def __cinit__(self, data not None): * assert data.ndim == 2 * self.d0_max = data.shape[0] - 1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.d1_max = data.shape[1] - 1 * self.maxi = data.max() */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_data, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyInt_AsSize_t(__pyx_t_2); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_self->d0_max = __pyx_t_4;
49: self.d1_max = data.shape[1] - 1
/* "bilinear.pyx":49 * assert data.ndim == 2 * self.d0_max = data.shape[0] - 1 * self.d1_max = data.shape[1] - 1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.maxi = data.max() * self.mini = data.min() */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_data, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyInt_AsSize_t(__pyx_t_2); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_self->d1_max = __pyx_t_4;
50: self.maxi = data.max()
/* "bilinear.pyx":50 * self.d0_max = data.shape[0] - 1 * self.d1_max = data.shape[1] - 1 * self.maxi = data.max() #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.mini = data.min() * self.data = numpy.ascontiguousarray(data, dtype=numpy.float32) */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_data, __pyx_n_s__max); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_self->maxi = __pyx_t_5;
51: self.mini = data.min()
/* "bilinear.pyx":51 * self.d1_max = data.shape[1] - 1 * self.maxi = data.max() * self.mini = data.min() #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* self.data = numpy.ascontiguousarray(data, dtype=numpy.float32) * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_data, __pyx_n_s__min); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __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 = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_2); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_self->mini = __pyx_t_5;
52: self.data = numpy.ascontiguousarray(data, dtype=numpy.float32)
/* "bilinear.pyx":52 * self.maxi = data.max() * self.mini = data.min() * self.data = numpy.ascontiguousarray(data, dtype=numpy.float32) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* * @cython.boundscheck(False) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__numpy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_data); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_data); __Pyx_GIVEREF(__pyx_v_data); __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__numpy); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__float32); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8)<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_8); if (unlikely(!__pyx_t_9.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_XDEC_MEMVIEW(&__pyx_v_self->data, 0); __pyx_v_self->data = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1); __Pyx_AddTraceback("bilinear.Bilinear.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_8bilinear_8Bilinear_3f_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_pw_8bilinear_8Bilinear_3f_cy(PyObject *__pyx_v_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("f_cy (wrapper)", 0); __pyx_r = __pyx_pf_8bilinear_8Bilinear_2f_cy(((struct __pyx_obj_8bilinear_Bilinear *)__pyx_v_self), ((PyObject *)__pyx_v_x)); __Pyx_RefNannyFinishContext(); return __pyx_r; }
53:
54: @cython.boundscheck(False)
55: @cython.wraparound(False)
56: def f_cy(self, x):
/* "bilinear.pyx":56 * @cython.boundscheck(False) * @cython.wraparound(False) * 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(struct __pyx_obj_8bilinear_Bilinear *__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", 0);
57: """
58: Function f((y,x)) where f is a continuous function (y,x) are pixel coordinates
59: @param x: 2-tuple of float
60: @return: Interpolated signal from the image (negative for minimizer)
61:
62: """
63: cdef float d0 = x[0]
/* "bilinear.pyx":63 * * """ * 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, 0, 0, 0); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_d0 = __pyx_t_2;
64: cdef float d1 = x[1]
/* "bilinear.pyx":64 * """ * 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, 0, 0, 0); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_d1 = __pyx_t_2;
65: cdef int i0, i1, j0, j1
66: cdef float x0, x1, y0, y1, res
67: with nogil:
/* "bilinear.pyx":67 * cdef int i0, i1, j0, j1 * cdef float x0, x1, y0, y1, res * with nogil: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* x0 = floor(d0) * x1 = ceil(d0) */ { #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS #endif /*try:*/ { /* "bilinear.pyx":67 * cdef int i0, i1, j0, j1 * cdef float x0, x1, y0, y1, res * with nogil: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* x0 = floor(d0) * x1 = ceil(d0) */ /*finally:*/ { int __pyx_why; __pyx_why = 0; goto __pyx_L5; __pyx_L4: __pyx_why = 4; goto __pyx_L5; __pyx_L5:; #ifdef WITH_THREAD Py_BLOCK_THREADS #endif switch (__pyx_why) { case 4: goto __pyx_L1_error; } } }
68: x0 = floor(d0)
/* "bilinear.pyx":68 * cdef float x0, x1, y0, y1, res * with nogil: * x0 = floor(d0) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* x1 = ceil(d0) * y0 = floor(d1) */ __pyx_v_x0 = floor(__pyx_v_d0);
69: x1 = ceil(d0)
/* "bilinear.pyx":69 * with nogil: * x0 = floor(d0) * x1 = ceil(d0) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* y0 = floor(d1) * y1 = ceil(d1) */ __pyx_v_x1 = ceil(__pyx_v_d0);
70: y0 = floor(d1)
/* "bilinear.pyx":70 * x0 = floor(d0) * x1 = ceil(d0) * y0 = floor(d1) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* y1 = ceil(d1) * i0 =<
int > x0 */ __pyx_v_y0 = floor(__pyx_v_d1);
71: y1 = ceil(d1)
/* "bilinear.pyx":71 * x1 = ceil(d0) * y0 = floor(d1) * y1 = ceil(d1) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* i0 =<
int > x0 * i1 =<
int > x1 */ __pyx_v_y1 = ceil(__pyx_v_d1);
72: i0 = < int > x0
/* "bilinear.pyx":72 * y0 = floor(d1) * y1 = ceil(d1) * i0 =<
int > x0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* i1 =<
int > x1 * j0 =<
int > y0 */ __pyx_v_i0 = ((int)__pyx_v_x0);
73: i1 = < int > x1
/* "bilinear.pyx":73 * y1 = ceil(d1) * i0 =<
int > x0 * i1 =<
int > x1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* j0 =<
int > y0 * j1 =<
int > y1 */ __pyx_v_i1 = ((int)__pyx_v_x1);
74: j0 = < int > y0
/* "bilinear.pyx":74 * i0 =<
int > x0 * i1 =<
int > x1 * j0 =<
int > y0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* j1 =<
int > y1 * if d0<
0: */ __pyx_v_j0 = ((int)__pyx_v_y0);
75: j1 = < int > y1
/* "bilinear.pyx":75 * i1 =<
int > x1 * j0 =<
int > y0 * j1 =<
int > y1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* if d0<
0: * res = self.mini + d0 */ __pyx_v_j1 = ((int)__pyx_v_y1);
76: if d0 < 0:
/* "bilinear.pyx":76 * j0 =<
int > y0 * j1 =<
int > y1 * if d0<
0: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.mini + d0 * elif d1<
0: */ __pyx_t_3 = (__pyx_v_d0<
0.0); if (__pyx_t_3) {
77: res = self.mini + d0
/* "bilinear.pyx":77 * j1 =<
int > y1 * if d0<
0: * res = self.mini + d0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif d1<
0: * res = self.mini + d1 */ __pyx_v_res = (__pyx_v_self->mini + __pyx_v_d0); goto __pyx_L6; }
78: elif d1 < 0:
/* "bilinear.pyx":78 * if d0<
0: * res = self.mini + d0 * elif d1<
0: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.mini + d1 * elif d0 > self.d0_max: */ __pyx_t_3 = (__pyx_v_d1<
0.0); if (__pyx_t_3) {
79: res = self.mini + d1
/* "bilinear.pyx":79 * res = self.mini + d0 * elif d1<
0: * res = self.mini + d1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif d0 > self.d0_max: * res = self.mini - d0 + self.d0_max */ __pyx_v_res = (__pyx_v_self->mini + __pyx_v_d1); goto __pyx_L6; }
80: elif d0 > self.d0_max:
/* "bilinear.pyx":80 * elif d1<
0: * res = self.mini + d1 * elif d0 > self.d0_max: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.mini - d0 + self.d0_max * elif d1 > self.d1_max: */ __pyx_t_3 = (__pyx_v_d0 > __pyx_v_self->d0_max); if (__pyx_t_3) {
81: res = self.mini - d0 + self.d0_max
/* "bilinear.pyx":81 * res = self.mini + d1 * elif d0 > self.d0_max: * res = self.mini - d0 + self.d0_max #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif d1 > self.d1_max: * res = self.mini - d1 + self.d1_max */ __pyx_v_res = ((__pyx_v_self->mini - __pyx_v_d0) + __pyx_v_self->d0_max); goto __pyx_L6; }
82: elif d1 > self.d1_max:
/* "bilinear.pyx":82 * elif d0 > self.d0_max: * res = self.mini - d0 + self.d0_max * elif d1 > self.d1_max: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.mini - d1 + self.d1_max * elif (i0 == i1) and (j0 == j1): */ __pyx_t_3 = (__pyx_v_d1 > __pyx_v_self->d1_max); if (__pyx_t_3) {
83: res = self.mini - d1 + self.d1_max
/* "bilinear.pyx":83 * res = self.mini - d0 + self.d0_max * elif d1 > self.d1_max: * res = self.mini - d1 + self.d1_max #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif (i0 == i1) and (j0 == j1): * res = self.data[i0,j0] */ __pyx_v_res = ((__pyx_v_self->mini - __pyx_v_d1) + __pyx_v_self->d1_max); goto __pyx_L6; }
84: elif (i0 == i1) and (j0 == j1):
/* "bilinear.pyx":84 * elif d1 > self.d1_max: * res = self.mini - d1 + self.d1_max * elif (i0 == i1) and (j0 == j1): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = self.data[i0,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) {
85: res = self.data[i0,j0]
/* "bilinear.pyx":85 * res = self.mini - d1 + self.d1_max * elif (i0 == i1) and (j0 == j1): * res = self.data[i0,j0] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif i0 == i1: * res = (self.data[i0,j0] * (y1 - d1)) + (self.data[i0,j1] * (d1 - y0)) */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_6 = __pyx_v_i0; __pyx_t_7 = __pyx_v_j0; __pyx_v_res = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_6 * __pyx_v_self->data.strides[0]) ) + __pyx_t_7 * __pyx_v_self->data.strides[1]) ))); goto __pyx_L6; }
86: elif i0 == i1:
/* "bilinear.pyx":86 * elif (i0 == i1) and (j0 == j1): * res = self.data[i0,j0] * elif i0 == i1: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = (self.data[i0,j0] * (y1 - d1)) + (self.data[i0,j1] * (d1 - y0)) * elif j0 == j1: */ __pyx_t_5 = (__pyx_v_i0 == __pyx_v_i1); if (__pyx_t_5) {
87: res = (self.data[i0,j0] * (y1 - d1)) + (self.data[i0,j1] * (d1 - y0))
/* "bilinear.pyx":87 * res = self.data[i0,j0] * elif i0 == i1: * res = (self.data[i0,j0] * (y1 - d1)) + (self.data[i0,j1] * (d1 - y0)) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* elif j0 == j1: * res = (self.data[i0,j0] * (x1 - d0)) + (self.data[i1,j0] * (d0 - x0)) */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_8 = __pyx_v_i0; __pyx_t_9 = __pyx_v_j0; if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_10 = __pyx_v_i0; __pyx_t_11 = __pyx_v_j1; __pyx_v_res = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_8 * __pyx_v_self->data.strides[0]) ) + __pyx_t_9 * __pyx_v_self->data.strides[1]) ))) * (__pyx_v_y1 - __pyx_v_d1)) + ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_10 * __pyx_v_self->data.strides[0]) ) + __pyx_t_11 * __pyx_v_self->data.strides[1]) ))) * (__pyx_v_d1 - __pyx_v_y0))); goto __pyx_L6; }
88: elif j0 == j1:
/* "bilinear.pyx":88 * elif i0 == i1: * res = (self.data[i0,j0] * (y1 - d1)) + (self.data[i0,j1] * (d1 - y0)) * elif j0 == j1: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* res = (self.data[i0,j0] * (x1 - d0)) + (self.data[i1,j0] * (d0 - x0)) * else: */ __pyx_t_5 = (__pyx_v_j0 == __pyx_v_j1); if (__pyx_t_5) {
89: res = (self.data[i0,j0] * (x1 - d0)) + (self.data[i1,j0] * (d0 - x0))
/* "bilinear.pyx":89 * res = (self.data[i0,j0] * (y1 - d1)) + (self.data[i0,j1] * (d1 - y0)) * elif j0 == j1: * res = (self.data[i0,j0] * (x1 - d0)) + (self.data[i1,j0] * (d0 - x0)) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* else: * res = (self.data[i0,j0] * (x1 - d0) * (y1 - d1)) \ */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_12 = __pyx_v_i0; __pyx_t_13 = __pyx_v_j0; if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_14 = __pyx_v_i1; __pyx_t_15 = __pyx_v_j0; __pyx_v_res = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_12 * __pyx_v_self->data.strides[0]) ) + __pyx_t_13 * __pyx_v_self->data.strides[1]) ))) * (__pyx_v_x1 - __pyx_v_d0)) + ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_14 * __pyx_v_self->data.strides[0]) ) + __pyx_t_15 * __pyx_v_self->data.strides[1]) ))) * (__pyx_v_d0 - __pyx_v_x0))); goto __pyx_L6; } /*else*/ {
90: else:
91: res = (self.data[i0,j0] * (x1 - d0) * (y1 - d1)) \
/* "bilinear.pyx":91 * res = (self.data[i0,j0] * (x1 - d0)) + (self.data[i1,j0] * (d0 - x0)) * else: * res = (self.data[i0,j0] * (x1 - d0) * (y1 - d1)) \ #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* + (self.data[i1,j0] * (d0 - x0) * (y1 - d1)) \ * + (self.data[i0,j1] * (x1 - d0) * (d1 - y0)) \ */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_16 = __pyx_v_i0; __pyx_t_17 = __pyx_v_j0;
92: + (self.data[i1,j0] * (d0 - x0) * (y1 - d1)) \
/* "bilinear.pyx":92 * else: * res = (self.data[i0,j0] * (x1 - d0) * (y1 - d1)) \ * + (self.data[i1,j0] * (d0 - x0) * (y1 - d1)) \ #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* + (self.data[i0,j1] * (x1 - d0) * (d1 - y0)) \ * + (self.data[i1,j1] * (d0 - x0) * (d1 - y0)) */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_18 = __pyx_v_i1; __pyx_t_19 = __pyx_v_j0;
93: + (self.data[i0,j1] * (x1 - d0) * (d1 - y0)) \
/* "bilinear.pyx":93 * res = (self.data[i0,j0] * (x1 - d0) * (y1 - d1)) \ * + (self.data[i1,j0] * (d0 - x0) * (y1 - d1)) \ * + (self.data[i0,j1] * (x1 - d0) * (d1 - y0)) \ #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* + (self.data[i1,j1] * (d0 - x0) * (d1 - y0)) * return - res */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_20 = __pyx_v_i0; __pyx_t_21 = __pyx_v_j1;
94: + (self.data[i1,j1] * (d0 - x0) * (d1 - y0))
/* "bilinear.pyx":94 * + (self.data[i1,j0] * (d0 - x0) * (y1 - d1)) \ * + (self.data[i0,j1] * (x1 - d0) * (d1 - y0)) \ * + (self.data[i1,j1] * (d0 - x0) * (d1 - y0)) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* return - res * */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_22 = __pyx_v_i1; __pyx_t_23 = __pyx_v_j1; __pyx_v_res = ((((((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_16 * __pyx_v_self->data.strides[0]) ) + __pyx_t_17 * __pyx_v_self->data.strides[1]) ))) * (__pyx_v_x1 - __pyx_v_d0)) * (__pyx_v_y1 - __pyx_v_d1)) + (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_18 * __pyx_v_self->data.strides[0]) ) + __pyx_t_19 * __pyx_v_self->data.strides[1]) ))) * (__pyx_v_d0 - __pyx_v_x0)) * (__pyx_v_y1 - __pyx_v_d1))) + (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_20 * __pyx_v_self->data.strides[0]) ) + __pyx_t_21 * __pyx_v_self->data.strides[1]) ))) * (__pyx_v_x1 - __pyx_v_d0)) * (__pyx_v_d1 - __pyx_v_y0))) + (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_22 * __pyx_v_self->data.strides[0]) ) + __pyx_t_23 * __pyx_v_self->data.strides[1]) ))) * (__pyx_v_d0 - __pyx_v_x0)) * (__pyx_v_d1 - __pyx_v_y0))); } __pyx_L6:; }
95: return - res
/* "bilinear.pyx":95 * + (self.data[i0,j1] * (x1 - d0) * (d1 - y0)) \ * + (self.data[i1,j1] * (d0 - x0) * (d1 - y0)) * return - res #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* * @cython.boundscheck(False) */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble((-__pyx_v_res)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __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; } /* Python wrapper */ static PyObject *__pyx_pw_8bilinear_8Bilinear_5local_maxi(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_8bilinear_8Bilinear_4local_maxi[] = "\n Return the local maximum ... with sub-pixel refinement\n \n @param x: 2-tuple of int\n @param w: half with of the window: 1 or 2 are adviced\n @return: 2-tuple of int with the nearest local maximum\n\n Sub-pixel refinement:\n Second order taylor expansion of the function; first derivative is nul\n delta = x-i = -Inverse[Hessian].gradient \n "; static PyObject *__pyx_pw_8bilinear_8Bilinear_5local_maxi(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_x = 0; int __pyx_v_w; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("local_maxi (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__w,0}; PyObject* values[2] = {0,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 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; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__w); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "local_maxi")<
0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { 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); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; if (values[1]) { __pyx_v_w = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_w == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_w = ((int)1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("local_maxi", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("bilinear.Bilinear.local_maxi", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_8bilinear_8Bilinear_4local_maxi(((struct __pyx_obj_8bilinear_Bilinear *)__pyx_v_self), __pyx_v_x, __pyx_v_w); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannyFinishContext(); return __pyx_r; }
96:
97: @cython.boundscheck(False)
98: @cython.wraparound(False)
99: @cython.cdivision(True)
100: def local_maxi(self, x, int w=1):
/* "bilinear.pyx":100 * @cython.wraparound(False) * @cython.cdivision(True) * def local_maxi(self, x, int w=1): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* """ * Return the local maximum ... with sub-pixel refinement */ static PyObject *__pyx_pf_8bilinear_8Bilinear_4local_maxi(struct __pyx_obj_8bilinear_Bilinear *__pyx_v_self, PyObject *__pyx_v_x, int __pyx_v_w) { int __pyx_v_current0; int __pyx_v_current1; int __pyx_v_i0; int __pyx_v_i1; int __pyx_v_start0; int __pyx_v_stop0; int __pyx_v_start1; int __pyx_v_stop1; int __pyx_v_new0; int __pyx_v_new1; int __pyx_v_cnt; int __pyx_v_width0; int __pyx_v_width1; float __pyx_v_tmp; float __pyx_v_value; float __pyx_v_current_value; float __pyx_v_sum0; float __pyx_v_sum1; float __pyx_v_sum; float __pyx_v_a00; float __pyx_v_a01; float __pyx_v_a02; float __pyx_v_a10; float __pyx_v_a11; float __pyx_v_a12; float __pyx_v_a20; float __pyx_v_a21; float __pyx_v_a22; float __pyx_v_d00; float __pyx_v_d11; float __pyx_v_d01; float __pyx_v_denom; PyObject *__pyx_v_delta0 = NULL; PyObject *__pyx_v_delta1 = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("local_maxi", 0);
101: """
102: Return the local maximum ... with sub-pixel refinement
103:
104: @param x: 2-tuple of int
105: @param w: half with of the window: 1 or 2 are adviced
106: @return: 2-tuple of int with the nearest local maximum
107:
108: Sub-pixel refinement:
109: Second order taylor expansion of the function; first derivative is nul
110: delta = x-i = -Inverse[Hessian].gradient
111: """
112: cdef int current0 = x[0]
/* "bilinear.pyx":112 * delta = x-i = -Inverse[Hessian].gradient * """ * cdef int current0 = x[0] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* cdef int current1 = x[1] * cdef int i0, i1, start0, stop0, start1, stop1, new0, new1, cnt=0, width0=w, width1=w */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x, 0, sizeof(long), PyInt_FromLong, 0, 0, 0); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_current0 = __pyx_t_2;
113: cdef int current1 = x[1]
/* "bilinear.pyx":113 * """ * cdef int current0 = x[0] * cdef int current1 = x[1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* cdef int i0, i1, start0, stop0, start1, stop1, new0, new1, cnt=0, width0=w, width1=w * cdef float tmp, value, current_value, sum0=0, sum1=0, sum=0 */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x, 1, sizeof(long), PyInt_FromLong, 0, 0, 0); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_current1 = __pyx_t_2;
114: cdef int i0, i1, start0, stop0, start1, stop1, new0, new1, cnt=0, width0=w, width1=w
/* "bilinear.pyx":114 * cdef int current0 = x[0] * cdef int current1 = x[1] * cdef int i0, i1, start0, stop0, start1, stop1, new0, new1, cnt=0, width0=w, width1=w #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* cdef float tmp, value, current_value, sum0=0, sum1=0, sum=0 * value = self.data[current0,current1] */ __pyx_v_cnt = 0; __pyx_v_width0 = __pyx_v_w; __pyx_v_width1 = __pyx_v_w;
115: cdef float tmp, value, current_value, sum0=0, sum1=0, sum=0
/* "bilinear.pyx":115 * cdef int current1 = x[1] * cdef int i0, i1, start0, stop0, start1, stop1, new0, new1, cnt=0, width0=w, width1=w * cdef float tmp, value, current_value, sum0=0, sum1=0, sum=0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* value = self.data[current0,current1] * current_value = value-1.0 */ __pyx_v_sum0 = 0.0; __pyx_v_sum1 = 0.0; __pyx_v_sum = 0.0;
116: value = self.data[current0,current1]
/* "bilinear.pyx":116 * cdef int i0, i1, start0, stop0, start1, stop1, new0, new1, cnt=0, width0=w, width1=w * cdef float tmp, value, current_value, sum0=0, sum1=0, sum=0 * value = self.data[current0,current1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* current_value = value-1.0 * new0,new1 = current0,current1 */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_2 = __pyx_v_current0; __pyx_t_3 = __pyx_v_current1; __pyx_v_value = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_2 * __pyx_v_self->data.strides[0]) ) + __pyx_t_3 * __pyx_v_self->data.strides[1]) )));
117: current_value = value-1.0
/* "bilinear.pyx":117 * cdef float tmp, value, current_value, sum0=0, sum1=0, sum=0 * value = self.data[current0,current1] * current_value = value-1.0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* new0,new1 = current0,current1 * with nogil: */ __pyx_v_current_value = (__pyx_v_value - 1.0);
118: new0,new1 = current0,current1
/* "bilinear.pyx":118 * value = self.data[current0,current1] * current_value = value-1.0 * new0,new1 = current0,current1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* with nogil: * while value>current_value: */ __pyx_t_4 = __pyx_v_current0; __pyx_t_5 = __pyx_v_current1; __pyx_v_new0 = __pyx_t_4; __pyx_v_new1 = __pyx_t_5;
119: with nogil:
/* "bilinear.pyx":119 * current_value = value-1.0 * new0,new1 = current0,current1 * with nogil: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* while value>current_value: * current_value=value */ { #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS #endif /*try:*/ { /* "bilinear.pyx":119 * current_value = value-1.0 * new0,new1 = current0,current1 * with nogil: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* while value>current_value: * current_value=value */ /*finally:*/ { int __pyx_why; __pyx_why = 0; goto __pyx_L5; __pyx_L4: __pyx_why = 4; goto __pyx_L5; __pyx_L5:; #ifdef WITH_THREAD Py_BLOCK_THREADS #endif switch (__pyx_why) { case 4: goto __pyx_L1_error; } } }
120: while value>current_value:
/* "bilinear.pyx":120 * new0,new1 = current0,current1 * with nogil: * while value>current_value: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* current_value=value * cnt+=1 */ while (1) { __pyx_t_6 = (__pyx_v_value > __pyx_v_current_value); if (!__pyx_t_6) break;
121: current_value=value
/* "bilinear.pyx":121 * with nogil: * while value>current_value: * current_value=value #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* cnt+=1 * if current0<
width0: */ __pyx_v_current_value = __pyx_v_value;
122: cnt+=1
/* "bilinear.pyx":122 * while value>current_value: * current_value=value * cnt+=1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* if current0<
width0: * start0 = 0 */ __pyx_v_cnt = (__pyx_v_cnt + 1);
123: if current0 < width0:
/* "bilinear.pyx":123 * current_value=value * cnt+=1 * if current0<
width0: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* start0 = 0 * else: */ __pyx_t_6 = (__pyx_v_current0<
__pyx_v_width0); if (__pyx_t_6) {
124: start0 = 0
/* "bilinear.pyx":124 * cnt+=1 * if current0<
width0: * start0 = 0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* else: * start0 = current0 - width0 */ __pyx_v_start0 = 0; goto __pyx_L8; } /*else*/ {
125: else:
126: start0 = current0 - width0
/* "bilinear.pyx":126 * start0 = 0 * else: * start0 = current0 - width0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* if current0 >= self.d0_max - width0: * stop0 = self.d0_max */ __pyx_v_start0 = (__pyx_v_current0 - __pyx_v_width0); } __pyx_L8:;
127: if current0 >= self.d0_max - width0:
/* "bilinear.pyx":127 * else: * start0 = current0 - width0 * if current0 >= self.d0_max - width0: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* stop0 = self.d0_max * else: */ __pyx_t_6 = (__pyx_v_current0 >= (__pyx_v_self->d0_max - __pyx_v_width0)); if (__pyx_t_6) {
128: stop0 = self.d0_max
/* "bilinear.pyx":128 * start0 = current0 - width0 * if current0 >= self.d0_max - width0: * stop0 = self.d0_max #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* else: * stop0 = current0 + width0 */ __pyx_t_7 = __pyx_v_self->d0_max; __pyx_v_stop0 = __pyx_t_7; goto __pyx_L9; } /*else*/ {
129: else:
130: stop0 = current0 + width0
/* "bilinear.pyx":130 * stop0 = self.d0_max * else: * stop0 = current0 + width0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* if current1<
width1: * start1 = 0 */ __pyx_v_stop0 = (__pyx_v_current0 + __pyx_v_width0); } __pyx_L9:;
131: if current1 < width1:
/* "bilinear.pyx":131 * else: * stop0 = current0 + width0 * if current1<
width1: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* start1 = 0 * else: */ __pyx_t_6 = (__pyx_v_current1<
__pyx_v_width1); if (__pyx_t_6) {
132: start1 = 0
/* "bilinear.pyx":132 * stop0 = current0 + width0 * if current1<
width1: * start1 = 0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* else: * start1 = current1 - width1 */ __pyx_v_start1 = 0; goto __pyx_L10; } /*else*/ {
133: else:
134: start1 = current1 - width1
/* "bilinear.pyx":134 * start1 = 0 * else: * start1 = current1 - width1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* if current1 >= self.d1_max - width1: * stop1=self.d1_max */ __pyx_v_start1 = (__pyx_v_current1 - __pyx_v_width1); } __pyx_L10:;
135: if current1 >= self.d1_max - width1:
/* "bilinear.pyx":135 * else: * start1 = current1 - width1 * if current1 >= self.d1_max - width1: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* stop1=self.d1_max * else: */ __pyx_t_6 = (__pyx_v_current1 >= (__pyx_v_self->d1_max - __pyx_v_width1)); if (__pyx_t_6) {
136: stop1=self.d1_max
/* "bilinear.pyx":136 * start1 = current1 - width1 * if current1 >= self.d1_max - width1: * stop1=self.d1_max #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* else: * stop1 = current1 + width1 */ __pyx_t_7 = __pyx_v_self->d1_max; __pyx_v_stop1 = __pyx_t_7; goto __pyx_L11; } /*else*/ {
137: else:
138: stop1 = current1 + width1
/* "bilinear.pyx":138 * stop1=self.d1_max * else: * stop1 = current1 + width1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* for i0 in range(start0, stop0+1): * for i1 in range(start1, stop1+1): */ __pyx_v_stop1 = (__pyx_v_current1 + __pyx_v_width1); } __pyx_L11:;
139: for i0 in range(start0, stop0+1):
/* "bilinear.pyx":139 * else: * stop1 = current1 + width1 * for i0 in range(start0, stop0+1): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* for i1 in range(start1, stop1+1): * tmp=self.data[i0,i1] */ __pyx_t_8 = (__pyx_v_stop0 + 1); for (__pyx_t_5 = __pyx_v_start0; __pyx_t_5<
__pyx_t_8; __pyx_t_5+=1) { __pyx_v_i0 = __pyx_t_5;
140: for i1 in range(start1, stop1+1):
/* "bilinear.pyx":140 * stop1 = current1 + width1 * for i0 in range(start0, stop0+1): * for i1 in range(start1, stop1+1): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* tmp=self.data[i0,i1] * if tmp>current_value: */ __pyx_t_9 = (__pyx_v_stop1 + 1); for (__pyx_t_4 = __pyx_v_start1; __pyx_t_4<
__pyx_t_9; __pyx_t_4+=1) { __pyx_v_i1 = __pyx_t_4;
141: tmp=self.data[i0,i1]
/* "bilinear.pyx":141 * for i0 in range(start0, stop0+1): * for i1 in range(start1, stop1+1): * tmp=self.data[i0,i1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* if tmp>current_value: * new0,new1=i0,i1 */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L4;}} __pyx_t_10 = __pyx_v_i0; __pyx_t_11 = __pyx_v_i1; __pyx_v_tmp = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_10 * __pyx_v_self->data.strides[0]) ) + __pyx_t_11 * __pyx_v_self->data.strides[1]) )));
142: if tmp>current_value:
/* "bilinear.pyx":142 * for i1 in range(start1, stop1+1): * tmp=self.data[i0,i1] * if tmp>current_value: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* new0,new1=i0,i1 * value = tmp */ __pyx_t_6 = (__pyx_v_tmp > __pyx_v_current_value); if (__pyx_t_6) {
143: new0,new1=i0,i1
/* "bilinear.pyx":143 * tmp=self.data[i0,i1] * if tmp>current_value: * new0,new1=i0,i1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* value = tmp * current0,current1=new0,new1 */ __pyx_t_12 = __pyx_v_i0; __pyx_t_13 = __pyx_v_i1; __pyx_v_new0 = __pyx_t_12; __pyx_v_new1 = __pyx_t_13;
144: value = tmp
/* "bilinear.pyx":144 * if tmp>current_value: * new0,new1=i0,i1 * value = tmp #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* current0,current1=new0,new1 * */ __pyx_v_value = __pyx_v_tmp; goto __pyx_L16; } __pyx_L16:; } }
145: current0,current1=new0,new1
/* "bilinear.pyx":145 * new0,new1=i0,i1 * value = tmp * current0,current1=new0,new1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* * cdef float a00, a01, a02, a10, a11, a12, a20, a21, a22 # coefficients of the array */ __pyx_t_5 = __pyx_v_new0; __pyx_t_4 = __pyx_v_new1; __pyx_v_current0 = __pyx_t_5; __pyx_v_current1 = __pyx_t_4; } }
146:
147: cdef float a00, a01, a02, a10, a11, a12, a20, a21, a22 # coefficients of the array
148: # cdef float g0, g1 # gradient values
149: cdef float d00, d11, d01, denom # Hessian coefficient
150: # print(current0,current1)
151: if (stop0>current0) and (current0>start0) and (stop1>current1) and (current1>start1):
/* "bilinear.pyx":151 * cdef float d00, d11, d01, denom # Hessian coefficient * # print(current0,current1) * if (stop0>current0) and (current0>start0) and (stop1>current1) and (current1>start1): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* #Use second order polynomial taylor expansion * a00 = self.data[current0-1,current1-1] */ __pyx_t_6 = (__pyx_v_stop0 > __pyx_v_current0); if (__pyx_t_6) { __pyx_t_14 = (__pyx_v_current0 > __pyx_v_start0); if (__pyx_t_14) { __pyx_t_15 = (__pyx_v_stop1 > __pyx_v_current1); if (__pyx_t_15) { __pyx_t_16 = (__pyx_v_current1 > __pyx_v_start1); __pyx_t_17 = __pyx_t_16; } else { __pyx_t_17 = __pyx_t_15; } __pyx_t_15 = __pyx_t_17; } else { __pyx_t_15 = __pyx_t_14; } __pyx_t_14 = __pyx_t_15; } else { __pyx_t_14 = __pyx_t_6; } if (__pyx_t_14) {
152: #Use second order polynomial taylor expansion
153: a00 = self.data[current0-1,current1-1]
/* "bilinear.pyx":153 * if (stop0>current0) and (current0>start0) and (stop1>current1) and (current1>start1): * #Use second order polynomial taylor expansion * a00 = self.data[current0-1,current1-1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* a01 = self.data[current0-1,current1 ] * a02 = self.data[current0-1,current1+1] */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_8 = (__pyx_v_current0 - 1); __pyx_t_9 = (__pyx_v_current1 - 1); __pyx_v_a00 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_8 * __pyx_v_self->data.strides[0]) ) + __pyx_t_9 * __pyx_v_self->data.strides[1]) )));
154: a01 = self.data[current0-1,current1 ]
/* "bilinear.pyx":154 * #Use second order polynomial taylor expansion * a00 = self.data[current0-1,current1-1] * a01 = self.data[current0-1,current1 ] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* a02 = self.data[current0-1,current1+1] * a10 = self.data[current0 ,current1-1] */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_18 = (__pyx_v_current0 - 1); __pyx_t_4 = __pyx_v_current1; __pyx_v_a01 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_18 * __pyx_v_self->data.strides[0]) ) + __pyx_t_4 * __pyx_v_self->data.strides[1]) )));
155: a02 = self.data[current0-1,current1+1]
/* "bilinear.pyx":155 * a00 = self.data[current0-1,current1-1] * a01 = self.data[current0-1,current1 ] * a02 = self.data[current0-1,current1+1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* a10 = self.data[current0 ,current1-1] * a11 = self.data[current0 ,current1 ] */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_19 = (__pyx_v_current0 - 1); __pyx_t_20 = (__pyx_v_current1 + 1); __pyx_v_a02 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_19 * __pyx_v_self->data.strides[0]) ) + __pyx_t_20 * __pyx_v_self->data.strides[1]) )));
156: a10 = self.data[current0 ,current1-1]
/* "bilinear.pyx":156 * a01 = self.data[current0-1,current1 ] * a02 = self.data[current0-1,current1+1] * a10 = self.data[current0 ,current1-1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* a11 = self.data[current0 ,current1 ] * a12 = self.data[current0 ,current1+1] */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_5 = __pyx_v_current0; __pyx_t_21 = (__pyx_v_current1 - 1); __pyx_v_a10 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_5 * __pyx_v_self->data.strides[0]) ) + __pyx_t_21 * __pyx_v_self->data.strides[1]) )));
157: a11 = self.data[current0 ,current1 ]
/* "bilinear.pyx":157 * a02 = self.data[current0-1,current1+1] * a10 = self.data[current0 ,current1-1] * a11 = self.data[current0 ,current1 ] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* a12 = self.data[current0 ,current1+1] * a20 = self.data[current0+1,current1-1] */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_13 = __pyx_v_current0; __pyx_t_12 = __pyx_v_current1; __pyx_v_a11 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_13 * __pyx_v_self->data.strides[0]) ) + __pyx_t_12 * __pyx_v_self->data.strides[1]) )));
158: a12 = self.data[current0 ,current1+1]
/* "bilinear.pyx":158 * a10 = self.data[current0 ,current1-1] * a11 = self.data[current0 ,current1 ] * a12 = self.data[current0 ,current1+1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* a20 = self.data[current0+1,current1-1] * a21 = self.data[current0+1,current1 ] */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_22 = __pyx_v_current0; __pyx_t_23 = (__pyx_v_current1 + 1); __pyx_v_a12 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_22 * __pyx_v_self->data.strides[0]) ) + __pyx_t_23 * __pyx_v_self->data.strides[1]) )));
159: a20 = self.data[current0+1,current1-1]
/* "bilinear.pyx":159 * a11 = self.data[current0 ,current1 ] * a12 = self.data[current0 ,current1+1] * a20 = self.data[current0+1,current1-1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* a21 = self.data[current0+1,current1 ] * a22 = self.data[current0+1,current1-1] */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_24 = (__pyx_v_current0 + 1); __pyx_t_25 = (__pyx_v_current1 - 1); __pyx_v_a20 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_24 * __pyx_v_self->data.strides[0]) ) + __pyx_t_25 * __pyx_v_self->data.strides[1]) )));
160: a21 = self.data[current0+1,current1 ]
/* "bilinear.pyx":160 * a12 = self.data[current0 ,current1+1] * a20 = self.data[current0+1,current1-1] * a21 = self.data[current0+1,current1 ] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* a22 = self.data[current0+1,current1-1] * # g0 = (a21 - a01)/2.0 */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_26 = (__pyx_v_current0 + 1); __pyx_t_27 = __pyx_v_current1; __pyx_v_a21 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_26 * __pyx_v_self->data.strides[0]) ) + __pyx_t_27 * __pyx_v_self->data.strides[1]) )));
161: a22 = self.data[current0+1,current1-1]
/* "bilinear.pyx":161 * a20 = self.data[current0+1,current1-1] * a21 = self.data[current0+1,current1 ] * a22 = self.data[current0+1,current1-1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* # g0 = (a21 - a01)/2.0 * # g1 = (a12 - a10)/2.0 */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_28 = (__pyx_v_current0 + 1); __pyx_t_29 = (__pyx_v_current1 - 1); __pyx_v_a22 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_28 * __pyx_v_self->data.strides[0]) ) + __pyx_t_29 * __pyx_v_self->data.strides[1]) )));
162: # g0 = (a21 - a01)/2.0
163: # g1 = (a12 - a10)/2.0
164: d00 = a12 - 2.0*a11 + a10
/* "bilinear.pyx":164 * # g0 = (a21 - a01)/2.0 * # g1 = (a12 - a10)/2.0 * d00 = a12 - 2.0*a11 + a10 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* d11 = a21 - 2.0*a11 + a01 * d01 = (a00 - a02 - a20 + a22)/4.0 */ __pyx_v_d00 = ((__pyx_v_a12 - (2.0 * __pyx_v_a11)) + __pyx_v_a10);
165: d11 = a21 - 2.0*a11 + a01
/* "bilinear.pyx":165 * # g1 = (a12 - a10)/2.0 * d00 = a12 - 2.0*a11 + a10 * d11 = a21 - 2.0*a11 + a01 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* d01 = (a00 - a02 - a20 + a22)/4.0 * denom = 2.0*(d00*d11-d01*d01) */ __pyx_v_d11 = ((__pyx_v_a21 - (2.0 * __pyx_v_a11)) + __pyx_v_a01);
166: d01 = (a00 - a02 - a20 + a22)/4.0
/* "bilinear.pyx":166 * d00 = a12 - 2.0*a11 + a10 * d11 = a21 - 2.0*a11 + a01 * d01 = (a00 - a02 - a20 + a22)/4.0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* denom = 2.0*(d00*d11-d01*d01) * if abs(denom)<
1e-10: */ __pyx_v_d01 = ((((__pyx_v_a00 - __pyx_v_a02) - __pyx_v_a20) + __pyx_v_a22) / 4.0);
167: denom = 2.0*(d00*d11-d01*d01)
/* "bilinear.pyx":167 * d11 = a21 - 2.0*a11 + a01 * d01 = (a00 - a02 - a20 + a22)/4.0 * denom = 2.0*(d00*d11-d01*d01) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* if abs(denom)<
1e-10: * print("Singular determinant, Hessian undefined") */ __pyx_v_denom = (2.0 * ((__pyx_v_d00 * __pyx_v_d11) - (__pyx_v_d01 * __pyx_v_d01)));
168: if abs(denom)<1e-10:
/* "bilinear.pyx":168 * d01 = (a00 - a02 - a20 + a22)/4.0 * denom = 2.0*(d00*d11-d01*d01) * if abs(denom)<
1e-10: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* print("Singular determinant, Hessian undefined") * else: */ __pyx_t_14 = (fabsf(__pyx_v_denom)<
1e-10); if (__pyx_t_14) {
169: print("Singular determinant, Hessian undefined")
/* "bilinear.pyx":169 * denom = 2.0*(d00*d11-d01*d01) * if abs(denom)<
1e-10: * print("Singular determinant, Hessian undefined") #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* else: * delta0 = ((a12 - a10)*d01 + (a01 - a21)*d11)/denom */ if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_1))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L19; } /*else*/ {
170: else:
171: delta0 = ((a12 - a10)*d01 + (a01 - a21)*d11)/denom
/* "bilinear.pyx":171 * print("Singular determinant, Hessian undefined") * else: * delta0 = ((a12 - a10)*d01 + (a01 - a21)*d11)/denom #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* delta1 = ((a10 - a12)*d00 + (a21 - a01)*d01)/denom * # print(delta0,delta1) */ __pyx_t_1 = PyFloat_FromDouble(((((__pyx_v_a12 - __pyx_v_a10) * __pyx_v_d01) + ((__pyx_v_a01 - __pyx_v_a21) * __pyx_v_d11)) / __pyx_v_denom)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_delta0 = __pyx_t_1; __pyx_t_1 = 0;
172: delta1 = ((a10 - a12)*d00 + (a21 - a01)*d01)/denom
/* "bilinear.pyx":172 * else: * delta0 = ((a12 - a10)*d01 + (a01 - a21)*d11)/denom * delta1 = ((a10 - a12)*d00 + (a21 - a01)*d01)/denom #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* # print(delta0,delta1) * if abs(delta0)<
=1.0 and abs(delta1)<
=1.0: #Result is OK is nower than 0.5. */ __pyx_t_1 = PyFloat_FromDouble(((((__pyx_v_a10 - __pyx_v_a12) * __pyx_v_d00) + ((__pyx_v_a21 - __pyx_v_a01) * __pyx_v_d01)) / __pyx_v_denom)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_delta1 = __pyx_t_1; __pyx_t_1 = 0;
173: # print(delta0,delta1)
174: if abs(delta0)<=1.0 and abs(delta1)<=1.0: #Result is OK is nower than 0.5.
/* "bilinear.pyx":174 * delta1 = ((a10 - a12)*d00 + (a21 - a01)*d01)/denom * # print(delta0,delta1) * if abs(delta0)<
=1.0 and abs(delta1)<
=1.0: #Result is OK is nower than 0.5. #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* return (float(current0) + delta0, float(current1) + delta1) * else: */ __pyx_t_1 = PyNumber_Absolute(__pyx_v_delta0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_30 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_30); __pyx_t_31 = PyObject_RichCompare(__pyx_t_1, __pyx_t_30, Py_LE); __Pyx_XGOTREF(__pyx_t_31); if (unlikely(!__pyx_t_31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0; __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_31); if (unlikely(__pyx_t_14<
0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0; if (__pyx_t_14) { __pyx_t_31 = PyNumber_Absolute(__pyx_v_delta1); if (unlikely(!__pyx_t_31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_31); __pyx_t_30 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_30); __pyx_t_1 = PyObject_RichCompare(__pyx_t_31, __pyx_t_30, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0; __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6<
0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_15 = __pyx_t_6; } else { __pyx_t_15 = __pyx_t_14; } if (__pyx_t_15) {
175: return (float(current0) + delta0, float(current1) + delta1)
/* "bilinear.pyx":175 * # print(delta0,delta1) * if abs(delta0)<
=1.0 and abs(delta1)<
=1.0: #Result is OK is nower than 0.5. * return (float(current0) + delta0, float(current1) + delta1) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* else: * print("Failed to find root using second order expansion") */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(((double)__pyx_v_current0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_30 = PyNumber_Add(__pyx_t_1, __pyx_v_delta0); if (unlikely(!__pyx_t_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_30); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyFloat_FromDouble(((double)__pyx_v_current1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_31 = PyNumber_Add(__pyx_t_1, __pyx_v_delta1); if (unlikely(!__pyx_t_31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_31); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_30); __Pyx_GIVEREF(__pyx_t_30); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_31); __Pyx_GIVEREF(__pyx_t_31); __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L20; } /*else*/ {
176: else:
177: print("Failed to find root using second order expansion")
/* "bilinear.pyx":177 * return (float(current0) + delta0, float(current1) + delta1) * else: * print("Failed to find root using second order expansion") #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* #refinement of the position by a simple center of mass of the last valid region used * for i0 in range(start0, stop0+1): */ if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_2))<
0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L20:; } __pyx_L19:; goto __pyx_L18; } __pyx_L18:;
178: #refinement of the position by a simple center of mass of the last valid region used
179: for i0 in range(start0, stop0+1):
/* "bilinear.pyx":179 * print("Failed to find root using second order expansion") * #refinement of the position by a simple center of mass of the last valid region used * for i0 in range(start0, stop0+1): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* for i1 in range(start1, stop1+1): * tmp = self.data[i0,i1] */ __pyx_t_32 = (__pyx_v_stop0 + 1); for (__pyx_t_33 = __pyx_v_start0; __pyx_t_33<
__pyx_t_32; __pyx_t_33+=1) { __pyx_v_i0 = __pyx_t_33;
180: for i1 in range(start1, stop1+1):
/* "bilinear.pyx":180 * #refinement of the position by a simple center of mass of the last valid region used * for i0 in range(start0, stop0+1): * for i1 in range(start1, stop1+1): #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* tmp = self.data[i0,i1] * sum0 += tmp * i0 */ __pyx_t_34 = (__pyx_v_stop1 + 1); for (__pyx_t_35 = __pyx_v_start1; __pyx_t_35<
__pyx_t_34; __pyx_t_35+=1) { __pyx_v_i1 = __pyx_t_35;
181: tmp = self.data[i0,i1]
/* "bilinear.pyx":181 * for i0 in range(start0, stop0+1): * for i1 in range(start1, stop1+1): * tmp = self.data[i0,i1] #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* sum0 += tmp * i0 * sum1 += tmp * i1 */ if (unlikely(!__pyx_v_self->data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}} __pyx_t_36 = __pyx_v_i0; __pyx_t_37 = __pyx_v_i1; __pyx_v_tmp = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->data.data + __pyx_t_36 * __pyx_v_self->data.strides[0]) ) + __pyx_t_37 * __pyx_v_self->data.strides[1]) )));
182: sum0 += tmp * i0
/* "bilinear.pyx":182 * for i1 in range(start1, stop1+1): * tmp = self.data[i0,i1] * sum0 += tmp * i0 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* sum1 += tmp * i1 * sum += tmp */ __pyx_v_sum0 = (__pyx_v_sum0 + (__pyx_v_tmp * __pyx_v_i0));
183: sum1 += tmp * i1
/* "bilinear.pyx":183 * tmp = self.data[i0,i1] * sum0 += tmp * i0 * sum1 += tmp * i1 #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* sum += tmp * if sum>0: */ __pyx_v_sum1 = (__pyx_v_sum1 + (__pyx_v_tmp * __pyx_v_i1));
184: sum += tmp
/* "bilinear.pyx":184 * sum0 += tmp * i0 * sum1 += tmp * i1 * sum += tmp #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* if sum>0: * #print current0,current1,sum0/sum,sum1/sum */ __pyx_v_sum = (__pyx_v_sum + __pyx_v_tmp); } }
185: if sum>0:
/* "bilinear.pyx":185 * sum1 += tmp * i1 * sum += tmp * if sum>0: #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* #print current0,current1,sum0/sum,sum1/sum * return (sum0/sum,sum1/sum) */ __pyx_t_15 = (__pyx_v_sum > 0.0); if (__pyx_t_15) {
186: #print current0,current1,sum0/sum,sum1/sum
187: return (sum0/sum,sum1/sum)
/* "bilinear.pyx":187 * if sum>0: * #print current0,current1,sum0/sum,sum1/sum * return (sum0/sum,sum1/sum) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
* else: * return (current0,current1) */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble((__pyx_v_sum0 / __pyx_v_sum)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_31 = PyFloat_FromDouble((__pyx_v_sum1 / __pyx_v_sum)); if (unlikely(!__pyx_t_31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_31); __pyx_t_30 = PyTuple_New(2); if (unlikely(!__pyx_t_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_30); PyTuple_SET_ITEM(__pyx_t_30, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_30, 1, __pyx_t_31); __Pyx_GIVEREF(__pyx_t_31); __pyx_t_1 = 0; __pyx_t_31 = 0; __pyx_r = ((PyObject *)__pyx_t_30); __pyx_t_30 = 0; goto __pyx_L0; goto __pyx_L25; } /*else*/ {
188: else:
189: return (current0,current1)
/* "bilinear.pyx":189 * return (sum0/sum,sum1/sum) * else: * return (current0,current1) #<
<
<
<
<
<
<
<
<
<
<
<
<
<
*/ __Pyx_XDECREF(__pyx_r); __pyx_t_30 = PyInt_FromLong(__pyx_v_current0); if (unlikely(!__pyx_t_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_30); __pyx_t_31 = PyInt_FromLong(__pyx_v_current1); if (unlikely(!__pyx_t_31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_31); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_30); __Pyx_GIVEREF(__pyx_t_30); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_31); __Pyx_GIVEREF(__pyx_t_31); __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; } __pyx_L25:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_30); __Pyx_XDECREF(__pyx_t_31); __Pyx_AddTraceback("bilinear.Bilinear.local_maxi", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_delta0); __Pyx_XDECREF(__pyx_v_delta1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); __Pyx_RefNannyFinishContext(); return __pyx_r; }