Generated by Cython 0.17 on Mon Mar 18 21:36:34 2013

Raw output: _distortion.c

 1: #!/usr/bin/env python
  /* "_distortion.pyx":1
 * #!/usr/bin/env python             # <<<<<<<<<<<<<<
 * # -*- coding: utf-8 -*-
 * #
 */
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
 2: # -*- coding: utf-8 -*-
 3: #
 4: #    Project: Fast Azimuthal integration
 5: #             https://github.com/kif/pyFAI
 6: #
 7: #    Copyright (C) European Synchrotron Radiation Facility, Grenoble, France
 8: #
 9: #    Principal author:       Jérôme Kieffer (Jerome.Kieffer@ESRF.eu)
 10: #
 11: #    This program is free software: you can redistribute it and/or modify
 12: #    it under the terms of the GNU General Public License as published by
 13: #    the Free Software Foundation, either version 3 of the License, or
 14: #    (at your option) any later version.
 15: #
 16: #    This program is distributed in the hope that it will be useful,
 17: #    but WITHOUT ANY WARRANTY; without even the implied warranty of
 18: #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 19: #    GNU General Public License for more details.
 20: #
 21: #    You should have received a copy of the GNU General Public License
 22: #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 23: #
 24: 
 25: 
 26: import cython
 27: cimport numpy
 28: import numpy
  /* "_distortion.pyx":28
 * import cython
 * cimport numpy
 * import numpy             # <<<<<<<<<<<<<<
 * from cython.parallel import prange
 * from libc.math cimport floor,ceil, fabs
 */
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __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 = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 29: from cython.parallel import prange
 30: from libc.math cimport floor,ceil, fabs
 31: from libc.string cimport memset
 32: import logging, threading
  /* "_distortion.pyx":32
 * from libc.math cimport floor,ceil, fabs
 * from libc.string cimport memset
 * import logging, threading             # <<<<<<<<<<<<<<
 * import types, os, sys, time
 * logger = logging.getLogger("pyFAI._distortion")
 */
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__logging), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__logging, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__threading), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__threading, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 33: import types, os, sys, time
  /* "_distortion.pyx":33
 * from libc.string cimport memset
 * import logging, threading
 * import types, os, sys, time             # <<<<<<<<<<<<<<
 * logger = logging.getLogger("pyFAI._distortion")
 * from .detectors import detector_factory
 */
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__types), 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 (PyObject_SetAttr(__pyx_m, __pyx_n_s__types, __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;
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__os), 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 (PyObject_SetAttr(__pyx_m, __pyx_n_s__os, __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;
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__sys), 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 (PyObject_SetAttr(__pyx_m, __pyx_n_s__sys, __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;
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__time), 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 (PyObject_SetAttr(__pyx_m, __pyx_n_s__time, __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: logger = logging.getLogger("pyFAI._distortion")
  /* "_distortion.pyx":34
 * import logging, threading
 * import types, os, sys, time
 * logger = logging.getLogger("pyFAI._distortion")             # <<<<<<<<<<<<<<
 * from .detectors import detector_factory
 * from .utils import timeit
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__logging); 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);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__getLogger); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_129), NULL); 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);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__logger, __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;

  /* "_distortion.pyx":34
 * import logging, threading
 * import types, os, sys, time
 * logger = logging.getLogger("pyFAI._distortion")             # <<<<<<<<<<<<<<
 * from .detectors import detector_factory
 * from .utils import timeit
 */
  __pyx_k_tuple_129 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_129)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_129);
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_128));
  PyTuple_SET_ITEM(__pyx_k_tuple_129, 0, ((PyObject *)__pyx_kp_s_128));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_128));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_129));
 35: from .detectors import detector_factory
  /* "_distortion.pyx":35
 * import types, os, sys, time
 * logger = logging.getLogger("pyFAI._distortion")
 * from .detectors import detector_factory             # <<<<<<<<<<<<<<
 * from .utils import timeit
 * import fabio
 */
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__detector_factory));
  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__detector_factory));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__detector_factory));
  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__detectors), ((PyObject *)__pyx_t_1), 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__detector_factory);
  if (__pyx_t_1 == NULL) {
    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__detector_factory);
    if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__detector_factory, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 36: from .utils import timeit
  /* "_distortion.pyx":36
 * logger = logging.getLogger("pyFAI._distortion")
 * from .detectors import detector_factory
 * from .utils import timeit             # <<<<<<<<<<<<<<
 * import fabio
 * 
 */
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__timeit));
  PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__timeit));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__timeit));
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__utils), ((PyObject *)__pyx_t_2), 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__timeit);
  if (__pyx_t_2 == NULL) {
    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__timeit);
    if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __Pyx_GOTREF(__pyx_t_2);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__timeit, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 37: import fabio
  /* "_distortion.pyx":37
 * from .detectors import detector_factory
 * from .utils import timeit
 * import fabio             # <<<<<<<<<<<<<<
 * 
 * cdef struct lut_point:
 */
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__fabio), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__fabio, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 38: 
 39: cdef struct lut_point:
/* "_distortion.pyx":39
 * import fabio
 * 
 * cdef struct lut_point:             # <<<<<<<<<<<<<<
 *     numpy.int32_t idx
 *     numpy.float32_t coef
 */
struct __pyx_t_11_distortion_lut_point {
  __pyx_t_5numpy_int32_t idx;
  __pyx_t_5numpy_float32_t coef;
};
 40:     numpy.int32_t idx
 41:     numpy.float32_t coef
 42: 
 43: cdef inline float min4f(float a, float b, float c, float d) nogil:
/* "_distortion.pyx":43
 *     numpy.float32_t coef
 * 
 * cdef inline float min4f(float a, float b, float c, float d) nogil:             # <<<<<<<<<<<<<<
 *     """Calculates the min of 4 float numbers"""
 *     if (a <= b) and (a <= c) and (a <= d):
 */

static CYTHON_INLINE float __pyx_f_11_distortion_min4f(float __pyx_v_a, float __pyx_v_b, float __pyx_v_c, float __pyx_v_d) {
  float __pyx_r;
 44:     """Calculates the min of 4 float numbers"""
 45:     if (a <= b) and (a <= c) and (a <= d):
  /* "_distortion.pyx":45
 * cdef inline float min4f(float a, float b, float c, float d) nogil:
 *     """Calculates the min of 4 float numbers"""
 *     if (a <= b) and (a <= c) and (a <= d):             # <<<<<<<<<<<<<<
 *         return a
 *     if (b <= a) and (b <= c) and (b <= d):
 */
  __pyx_t_1 = (__pyx_v_a <= __pyx_v_b);
  if (__pyx_t_1) {
    __pyx_t_2 = (__pyx_v_a <= __pyx_v_c);
    if (__pyx_t_2) {
      __pyx_t_3 = (__pyx_v_a <= __pyx_v_d);
      __pyx_t_4 = __pyx_t_3;
    } else {
      __pyx_t_4 = __pyx_t_2;
    }
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_2 = __pyx_t_1;
  }
  if (__pyx_t_2) {
 46:         return a
    /* "_distortion.pyx":46
 *     """Calculates the min of 4 float numbers"""
 *     if (a <= b) and (a <= c) and (a <= d):
 *         return a             # <<<<<<<<<<<<<<
 *     if (b <= a) and (b <= c) and (b <= d):
 *         return b
 */
    __pyx_r = __pyx_v_a;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;
 47:     if (b <= a) and (b <= c) and (b <= d):
  /* "_distortion.pyx":47
 *     if (a <= b) and (a <= c) and (a <= d):
 *         return a
 *     if (b <= a) and (b <= c) and (b <= d):             # <<<<<<<<<<<<<<
 *         return b
 *     if (c <= a) and (c <= b) and (c <= d):
 */
  __pyx_t_2 = (__pyx_v_b <= __pyx_v_a);
  if (__pyx_t_2) {
    __pyx_t_1 = (__pyx_v_b <= __pyx_v_c);
    if (__pyx_t_1) {
      __pyx_t_4 = (__pyx_v_b <= __pyx_v_d);
      __pyx_t_3 = __pyx_t_4;
    } else {
      __pyx_t_3 = __pyx_t_1;
    }
    __pyx_t_1 = __pyx_t_3;
  } else {
    __pyx_t_1 = __pyx_t_2;
  }
  if (__pyx_t_1) {
 48:         return b
    /* "_distortion.pyx":48
 *         return a
 *     if (b <= a) and (b <= c) and (b <= d):
 *         return b             # <<<<<<<<<<<<<<
 *     if (c <= a) and (c <= b) and (c <= d):
 *         return c
 */
    __pyx_r = __pyx_v_b;
    goto __pyx_L0;
    goto __pyx_L4;
  }
  __pyx_L4:;
 49:     if (c <= a) and (c <= b) and (c <= d):
  /* "_distortion.pyx":49
 *     if (b <= a) and (b <= c) and (b <= d):
 *         return b
 *     if (c <= a) and (c <= b) and (c <= d):             # <<<<<<<<<<<<<<
 *         return c
 *     else:
 */
  __pyx_t_1 = (__pyx_v_c <= __pyx_v_a);
  if (__pyx_t_1) {
    __pyx_t_2 = (__pyx_v_c <= __pyx_v_b);
    if (__pyx_t_2) {
      __pyx_t_3 = (__pyx_v_c <= __pyx_v_d);
      __pyx_t_4 = __pyx_t_3;
    } else {
      __pyx_t_4 = __pyx_t_2;
    }
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_2 = __pyx_t_1;
  }
  if (__pyx_t_2) {
 50:         return c
    /* "_distortion.pyx":50
 *         return b
 *     if (c <= a) and (c <= b) and (c <= d):
 *         return c             # <<<<<<<<<<<<<<
 *     else:
 *         return d
 */
    __pyx_r = __pyx_v_c;
    goto __pyx_L0;
    goto __pyx_L5;
  }
  /*else*/ {
 51:     else:
 52:         return d
    /* "_distortion.pyx":52
 *         return c
 *     else:
 *         return d             # <<<<<<<<<<<<<<
 * 
 * cdef inline float max4f(float a, float b, float c, float d) nogil:
 */
    __pyx_r = __pyx_v_d;
    goto __pyx_L0;
  }
  __pyx_L5:;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}
 53: 
 54: cdef inline float max4f(float a, float b, float c, float d) nogil:
/* "_distortion.pyx":54
 *         return d
 * 
 * cdef inline float max4f(float a, float b, float c, float d) nogil:             # <<<<<<<<<<<<<<
 *     """Calculates the max of 4 float numbers"""
 *     if (a >= b) and (a >= c) and (a >= d):
 */

static CYTHON_INLINE float __pyx_f_11_distortion_max4f(float __pyx_v_a, float __pyx_v_b, float __pyx_v_c, float __pyx_v_d) {
  float __pyx_r;
 55:     """Calculates the max of 4 float numbers"""
 56:     if (a >= b) and (a >= c) and (a >= d):
  /* "_distortion.pyx":56
 * cdef inline float max4f(float a, float b, float c, float d) nogil:
 *     """Calculates the max of 4 float numbers"""
 *     if (a >= b) and (a >= c) and (a >= d):             # <<<<<<<<<<<<<<
 *         return a
 *     if (b >= a) and (b >= c) and (b >= d):
 */
  __pyx_t_1 = (__pyx_v_a >= __pyx_v_b);
  if (__pyx_t_1) {
    __pyx_t_2 = (__pyx_v_a >= __pyx_v_c);
    if (__pyx_t_2) {
      __pyx_t_3 = (__pyx_v_a >= __pyx_v_d);
      __pyx_t_4 = __pyx_t_3;
    } else {
      __pyx_t_4 = __pyx_t_2;
    }
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_2 = __pyx_t_1;
  }
  if (__pyx_t_2) {
 57:         return a
    /* "_distortion.pyx":57
 *     """Calculates the max of 4 float numbers"""
 *     if (a >= b) and (a >= c) and (a >= d):
 *         return a             # <<<<<<<<<<<<<<
 *     if (b >= a) and (b >= c) and (b >= d):
 *         return b
 */
    __pyx_r = __pyx_v_a;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  __pyx_L3:;
 58:     if (b >= a) and (b >= c) and (b >= d):
  /* "_distortion.pyx":58
 *     if (a >= b) and (a >= c) and (a >= d):
 *         return a
 *     if (b >= a) and (b >= c) and (b >= d):             # <<<<<<<<<<<<<<
 *         return b
 *     if (c >= a) and (c >= b) and (c >= d):
 */
  __pyx_t_2 = (__pyx_v_b >= __pyx_v_a);
  if (__pyx_t_2) {
    __pyx_t_1 = (__pyx_v_b >= __pyx_v_c);
    if (__pyx_t_1) {
      __pyx_t_4 = (__pyx_v_b >= __pyx_v_d);
      __pyx_t_3 = __pyx_t_4;
    } else {
      __pyx_t_3 = __pyx_t_1;
    }
    __pyx_t_1 = __pyx_t_3;
  } else {
    __pyx_t_1 = __pyx_t_2;
  }
  if (__pyx_t_1) {
 59:         return b
    /* "_distortion.pyx":59
 *         return a
 *     if (b >= a) and (b >= c) and (b >= d):
 *         return b             # <<<<<<<<<<<<<<
 *     if (c >= a) and (c >= b) and (c >= d):
 *         return c
 */
    __pyx_r = __pyx_v_b;
    goto __pyx_L0;
    goto __pyx_L4;
  }
  __pyx_L4:;
 60:     if (c >= a) and (c >= b) and (c >= d):
  /* "_distortion.pyx":60
 *     if (b >= a) and (b >= c) and (b >= d):
 *         return b
 *     if (c >= a) and (c >= b) and (c >= d):             # <<<<<<<<<<<<<<
 *         return c
 *     else:
 */
  __pyx_t_1 = (__pyx_v_c >= __pyx_v_a);
  if (__pyx_t_1) {
    __pyx_t_2 = (__pyx_v_c >= __pyx_v_b);
    if (__pyx_t_2) {
      __pyx_t_3 = (__pyx_v_c >= __pyx_v_d);
      __pyx_t_4 = __pyx_t_3;
    } else {
      __pyx_t_4 = __pyx_t_2;
    }
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_2 = __pyx_t_1;
  }
  if (__pyx_t_2) {
 61:         return c
    /* "_distortion.pyx":61
 *         return b
 *     if (c >= a) and (c >= b) and (c >= d):
 *         return c             # <<<<<<<<<<<<<<
 *     else:
 *         return d
 */
    __pyx_r = __pyx_v_c;
    goto __pyx_L0;
    goto __pyx_L5;
  }
  /*else*/ {
 62:     else:
 63:         return d
    /* "_distortion.pyx":63
 *         return c
 *     else:
 *         return d             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_r = __pyx_v_d;
    goto __pyx_L0;
  }
  __pyx_L5:;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}
 64: 
 65: 
 66: cpdef inline float calc_area(float I1, float I2, float slope, float intercept) nogil:
/* "_distortion.pyx":66
 * 
 * 
 * cpdef inline float calc_area(float I1, float I2, float slope, float intercept) nogil:             # <<<<<<<<<<<<<<
 *     "Calculate the area between I1 and I2 of a line with a given slope & intercept"
 *     return 0.5 * (I2 - I1) * (slope * (I2 + I1) + 2 * intercept)
 */

static PyObject *__pyx_pw_11_distortion_1calc_area(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static CYTHON_INLINE float __pyx_f_11_distortion_calc_area(float __pyx_v_I1, float __pyx_v_I2, float __pyx_v_slope, float __pyx_v_intercept, CYTHON_UNUSED int __pyx_skip_dispatch) {
  float __pyx_r;

/* "_distortion.pyx":66
 * 
 * 
 * cpdef inline float calc_area(float I1, float I2, float slope, float intercept) nogil:             # <<<<<<<<<<<<<<
 *     "Calculate the area between I1 and I2 of a line with a given slope & intercept"
 *     return 0.5 * (I2 - I1) * (slope * (I2 + I1) + 2 * intercept)
 */

static PyObject *__pyx_pf_11_distortion_calc_area(CYTHON_UNUSED PyObject *__pyx_self, float __pyx_v_I1, float __pyx_v_I2, float __pyx_v_slope, float __pyx_v_intercept) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_f_11_distortion_calc_area(__pyx_v_I1, __pyx_v_I2, __pyx_v_slope, __pyx_v_intercept, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __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("_distortion.calc_area", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 67:     "Calculate the area between I1 and I2 of a line with a given slope & intercept"
 68:     return 0.5 * (I2 - I1) * (slope * (I2 + I1) + 2 * intercept)
  /* "_distortion.pyx":68
 * cpdef inline float calc_area(float I1, float I2, float slope, float intercept) nogil:
 *     "Calculate the area between I1 and I2 of a line with a given slope & intercept"
 *     return 0.5 * (I2 - I1) * (slope * (I2 + I1) + 2 * intercept)             # <<<<<<<<<<<<<<
 * 
 * @cython.wraparound(False)
 */
  __pyx_r = ((0.5 * (__pyx_v_I2 - __pyx_v_I1)) * ((__pyx_v_slope * (__pyx_v_I2 + __pyx_v_I1)) + (2.0 * __pyx_v_intercept)));
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_1calc_area(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11_distortion_calc_area[] = "Calculate the area between I1 and I2 of a line with a given slope & intercept";
static PyObject *__pyx_pw_11_distortion_1calc_area(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_I1;
  float __pyx_v_I2;
  float __pyx_v_slope;
  float __pyx_v_intercept;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__I1,&__pyx_n_s__I2,&__pyx_n_s__slope,&__pyx_n_s__intercept,0};
    PyObject* values[4] = {0,0,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  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        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__I1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__I2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("calc_area", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__slope)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("calc_area", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  3:
        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__intercept)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("calc_area", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calc_area") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_I1 = __pyx_PyFloat_AsFloat(values[0]); if (unlikely((__pyx_v_I1 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_I2 = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_I2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_slope = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_slope == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_intercept = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_intercept == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("calc_area", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.calc_area", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_calc_area(__pyx_self, __pyx_v_I1, __pyx_v_I2, __pyx_v_slope, __pyx_v_intercept);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 69: 
 70: @cython.wraparound(False)
 71: @cython.boundscheck(False)
 72: @cython.cdivision(True)
 73: cdef inline void integrate(float[:,:] box, float start, float stop, float slope, float intercept) nogil:
/* "_distortion.pyx":73
 * @cython.boundscheck(False)
 * @cython.cdivision(True)
 * cdef inline void integrate(float[:,:] box, float start, float stop, float slope, float intercept) nogil:             # <<<<<<<<<<<<<<
 *     "Integrate in a box a line between start and stop, line defined by its slope & intercept "
 *     cdef int i, h = 0
 */

static CYTHON_INLINE void __pyx_f_11_distortion_integrate(__Pyx_memviewslice __pyx_v_box, float __pyx_v_start, float __pyx_v_stop, float __pyx_v_slope, float __pyx_v_intercept) {
  int __pyx_v_i;
  int __pyx_v_h;
  float __pyx_v_P;
  float __pyx_v_dP;
  float __pyx_v_A;
  float __pyx_v_AA;
  float __pyx_v_dA;
  float __pyx_v_sign;
 74:     "Integrate in a box a line between start and stop, line defined by its slope & intercept "
 75:     cdef int i, h = 0
  /* "_distortion.pyx":75
 * cdef inline void integrate(float[:,:] box, float start, float stop, float slope, float intercept) nogil:
 *     "Integrate in a box a line between start and stop, line defined by its slope & intercept "
 *     cdef int i, h = 0             # <<<<<<<<<<<<<<
 *     cdef float P,dP, A, AA, dA, sign
 *     if start < stop:  # positive contribution
 */
  __pyx_v_h = 0;
 76:     cdef float P,dP, A, AA, dA, sign
 77:     if start < stop:  # positive contribution
  /* "_distortion.pyx":77
 *     cdef int i, h = 0
 *     cdef float P,dP, A, AA, dA, sign
 *     if start < stop:  # positive contribution             # <<<<<<<<<<<<<<
 *         P = ceil(start)
 *         dP = P - start
 */
  __pyx_t_1 = (__pyx_v_start < __pyx_v_stop);
  if (__pyx_t_1) {
 78:         P = ceil(start)
    /* "_distortion.pyx":78
 *     cdef float P,dP, A, AA, dA, sign
 *     if start < stop:  # positive contribution
 *         P = ceil(start)             # <<<<<<<<<<<<<<
 *         dP = P - start
 *         if P > stop:  # start and stop are in the same unit
 */
    __pyx_v_P = ceil(__pyx_v_start);
 79:         dP = P - start
    /* "_distortion.pyx":79
 *     if start < stop:  # positive contribution
 *         P = ceil(start)
 *         dP = P - start             # <<<<<<<<<<<<<<
 *         if P > stop:  # start and stop are in the same unit
 *             A = calc_area(start, stop, slope, intercept)
 */
    __pyx_v_dP = (__pyx_v_P - __pyx_v_start);
 80:         if P > stop:  # start and stop are in the same unit
    /* "_distortion.pyx":80
 *         P = ceil(start)
 *         dP = P - start
 *         if P > stop:  # start and stop are in the same unit             # <<<<<<<<<<<<<<
 *             A = calc_area(start, stop, slope, intercept)
 *             if A != 0:
 */
    __pyx_t_1 = (__pyx_v_P > __pyx_v_stop);
    if (__pyx_t_1) {
 81:             A = calc_area(start, stop, slope, intercept)
      /* "_distortion.pyx":81
 *         dP = P - start
 *         if P > stop:  # start and stop are in the same unit
 *             A = calc_area(start, stop, slope, intercept)             # <<<<<<<<<<<<<<
 *             if A != 0:
 *                 AA = fabs(A)
 */
      __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_start, __pyx_v_stop, __pyx_v_slope, __pyx_v_intercept, 0);
 82:             if A != 0:
      /* "_distortion.pyx":82
 *         if P > stop:  # start and stop are in the same unit
 *             A = calc_area(start, stop, slope, intercept)
 *             if A != 0:             # <<<<<<<<<<<<<<
 *                 AA = fabs(A)
 *                 sign = A / AA
 */
      __pyx_t_1 = (__pyx_v_A != 0.0);
      if (__pyx_t_1) {
 83:                 AA = fabs(A)
        /* "_distortion.pyx":83
 *             A = calc_area(start, stop, slope, intercept)
 *             if A != 0:
 *                 AA = fabs(A)             # <<<<<<<<<<<<<<
 *                 sign = A / AA
 *                 dA = (stop - start)  # always positive
 */
        __pyx_v_AA = fabs(__pyx_v_A);
 84:                 sign = A / AA
        /* "_distortion.pyx":84
 *             if A != 0:
 *                 AA = fabs(A)
 *                 sign = A / AA             # <<<<<<<<<<<<<<
 *                 dA = (stop - start)  # always positive
 *                 h = 0
 */
        __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 85:                 dA = (stop - start)  # always positive
        /* "_distortion.pyx":85
 *                 AA = fabs(A)
 *                 sign = A / AA
 *                 dA = (stop - start)  # always positive             # <<<<<<<<<<<<<<
 *                 h = 0
 *                 while AA > 0:
 */
        __pyx_v_dA = (__pyx_v_stop - __pyx_v_start);
 86:                 h = 0
        /* "_distortion.pyx":86
 *                 sign = A / AA
 *                 dA = (stop - start)  # always positive
 *                 h = 0             # <<<<<<<<<<<<<<
 *                 while AA > 0:
 *                     if dA > AA:
 */
        __pyx_v_h = 0;
 87:                 while AA > 0:
        /* "_distortion.pyx":87
 *                 dA = (stop - start)  # always positive
 *                 h = 0
 *                 while AA > 0:             # <<<<<<<<<<<<<<
 *                     if dA > AA:
 *                         dA = AA
 */
        while (1) {
          __pyx_t_1 = (__pyx_v_AA > 0.0);
          if (!__pyx_t_1) break;
 88:                     if dA > AA:
          /* "_distortion.pyx":88
 *                 h = 0
 *                 while AA > 0:
 *                     if dA > AA:             # <<<<<<<<<<<<<<
 *                         dA = AA
 *                         AA = -1
 */
          __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
          if (__pyx_t_1) {
 89:                         dA = AA
            /* "_distortion.pyx":89
 *                 while AA > 0:
 *                     if dA > AA:
 *                         dA = AA             # <<<<<<<<<<<<<<
 *                         AA = -1
 *                     box[(<int> floor(start)), h] += sign * dA
 */
            __pyx_v_dA = __pyx_v_AA;
 90:                         AA = -1
            /* "_distortion.pyx":90
 *                     if dA > AA:
 *                         dA = AA
 *                         AA = -1             # <<<<<<<<<<<<<<
 *                     box[(<int> floor(start)), h] += sign * dA
 *                     AA -= dA
 */
            __pyx_v_AA = -1.0;
            goto __pyx_L8;
          }
          __pyx_L8:;
 91:                     box[(<int> floor(start)), h] += sign * dA
          /* "_distortion.pyx":91
 *                         dA = AA
 *                         AA = -1
 *                     box[(<int> floor(start)), h] += sign * dA             # <<<<<<<<<<<<<<
 *                     AA -= dA
 *                     h += 1
 */
          __pyx_t_2 = ((int)floor(__pyx_v_start));
          __pyx_t_3 = __pyx_v_h;
          *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_box.data + __pyx_t_2 * __pyx_v_box.strides[0]) ) + __pyx_t_3 * __pyx_v_box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 92:                     AA -= dA
          /* "_distortion.pyx":92
 *                         AA = -1
 *                     box[(<int> floor(start)), h] += sign * dA
 *                     AA -= dA             # <<<<<<<<<<<<<<
 *                     h += 1
 *         else:
 */
          __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 93:                     h += 1
          /* "_distortion.pyx":93
 *                     box[(<int> floor(start)), h] += sign * dA
 *                     AA -= dA
 *                     h += 1             # <<<<<<<<<<<<<<
 *         else:
 *             if dP > 0:
 */
          __pyx_v_h = (__pyx_v_h + 1);
        }
        goto __pyx_L5;
      }
      __pyx_L5:;
      goto __pyx_L4;
    }
    /*else*/ {
 94:         else:
 95:             if dP > 0:
      /* "_distortion.pyx":95
 *                     h += 1
 *         else:
 *             if dP > 0:             # <<<<<<<<<<<<<<
 *                 A = calc_area(start, P, slope, intercept)
 *                 if A != 0:
 */
      __pyx_t_1 = (__pyx_v_dP > 0.0);
      if (__pyx_t_1) {
 96:                 A = calc_area(start, P, slope, intercept)
        /* "_distortion.pyx":96
 *         else:
 *             if dP > 0:
 *                 A = calc_area(start, P, slope, intercept)             # <<<<<<<<<<<<<<
 *                 if A != 0:
 *                     AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_start, __pyx_v_P, __pyx_v_slope, __pyx_v_intercept, 0);
 97:                 if A != 0:
        /* "_distortion.pyx":97
 *             if dP > 0:
 *                 A = calc_area(start, P, slope, intercept)
 *                 if A != 0:             # <<<<<<<<<<<<<<
 *                     AA = fabs(A)
 *                     sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 98:                     AA = fabs(A)
          /* "_distortion.pyx":98
 *                 A = calc_area(start, P, slope, intercept)
 *                 if A != 0:
 *                     AA = fabs(A)             # <<<<<<<<<<<<<<
 *                     sign = A / AA
 *                     h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 99:                     sign = A / AA
          /* "_distortion.pyx":99
 *                 if A != 0:
 *                     AA = fabs(A)
 *                     sign = A / AA             # <<<<<<<<<<<<<<
 *                     h = 0
 *                     dA = dP
 */
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 100:                     h = 0
          /* "_distortion.pyx":100
 *                     AA = fabs(A)
 *                     sign = A / AA
 *                     h = 0             # <<<<<<<<<<<<<<
 *                     dA = dP
 *                     while AA > 0:
 */
          __pyx_v_h = 0;
 101:                     dA = dP
          /* "_distortion.pyx":101
 *                     sign = A / AA
 *                     h = 0
 *                     dA = dP             # <<<<<<<<<<<<<<
 *                     while AA > 0:
 *                         if dA > AA:
 */
          __pyx_v_dA = __pyx_v_dP;
 102:                     while AA > 0:
          /* "_distortion.pyx":102
 *                     h = 0
 *                     dA = dP
 *                     while AA > 0:             # <<<<<<<<<<<<<<
 *                         if dA > AA:
 *                             dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 103:                         if dA > AA:
            /* "_distortion.pyx":103
 *                     dA = dP
 *                     while AA > 0:
 *                         if dA > AA:             # <<<<<<<<<<<<<<
 *                             dA = AA
 *                             AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 104:                             dA = AA
              /* "_distortion.pyx":104
 *                     while AA > 0:
 *                         if dA > AA:
 *                             dA = AA             # <<<<<<<<<<<<<<
 *                             AA = -1
 *                         box[(<int> floor(P)) - 1, h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 105:                             AA = -1
              /* "_distortion.pyx":105
 *                         if dA > AA:
 *                             dA = AA
 *                             AA = -1             # <<<<<<<<<<<<<<
 *                         box[(<int> floor(P)) - 1, h] += sign * dA
 *                         AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L13;
            }
            __pyx_L13:;
 106:                         box[(<int> floor(P)) - 1, h] += sign * dA
            /* "_distortion.pyx":106
 *                             dA = AA
 *                             AA = -1
 *                         box[(<int> floor(P)) - 1, h] += sign * dA             # <<<<<<<<<<<<<<
 *                         AA -= dA
 *                         h += 1
 */
            __pyx_t_4 = (((int)floor(__pyx_v_P)) - 1);
            __pyx_t_5 = __pyx_v_h;
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_box.data + __pyx_t_4 * __pyx_v_box.strides[0]) ) + __pyx_t_5 * __pyx_v_box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 107:                         AA -= dA
            /* "_distortion.pyx":107
 *                             AA = -1
 *                         box[(<int> floor(P)) - 1, h] += sign * dA
 *                         AA -= dA             # <<<<<<<<<<<<<<
 *                         h += 1
 *             # subsection P1->Pn
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 108:                         h += 1
            /* "_distortion.pyx":108
 *                         box[(<int> floor(P)) - 1, h] += sign * dA
 *                         AA -= dA
 *                         h += 1             # <<<<<<<<<<<<<<
 *             # subsection P1->Pn
 *             for i in range((<int> floor(P)), (<int> floor(stop))):
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L10;
        }
        __pyx_L10:;
        goto __pyx_L9;
      }
      __pyx_L9:;
 109:             # subsection P1->Pn
 110:             for i in range((<int> floor(P)), (<int> floor(stop))):
      /* "_distortion.pyx":110
 *                         h += 1
 *             # subsection P1->Pn
 *             for i in range((<int> floor(P)), (<int> floor(stop))):             # <<<<<<<<<<<<<<
 *                 A = calc_area(i, i + 1, slope, intercept)
 *                 if A != 0:
 */
      __pyx_t_6 = ((int)floor(__pyx_v_stop));
      for (__pyx_t_7 = ((int)floor(__pyx_v_P)); __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_i = __pyx_t_7;
 111:                 A = calc_area(i, i + 1, slope, intercept)
        /* "_distortion.pyx":111
 *             # subsection P1->Pn
 *             for i in range((<int> floor(P)), (<int> floor(stop))):
 *                 A = calc_area(i, i + 1, slope, intercept)             # <<<<<<<<<<<<<<
 *                 if A != 0:
 *                     AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_i, (__pyx_v_i + 1), __pyx_v_slope, __pyx_v_intercept, 0);
 112:                 if A != 0:
        /* "_distortion.pyx":112
 *             for i in range((<int> floor(P)), (<int> floor(stop))):
 *                 A = calc_area(i, i + 1, slope, intercept)
 *                 if A != 0:             # <<<<<<<<<<<<<<
 *                     AA = fabs(A)
 *                     sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 113:                     AA = fabs(A)
          /* "_distortion.pyx":113
 *                 A = calc_area(i, i + 1, slope, intercept)
 *                 if A != 0:
 *                     AA = fabs(A)             # <<<<<<<<<<<<<<
 *                     sign = A / AA
 * 
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 114:                     sign = A / AA
          /* "_distortion.pyx":114
 *                 if A != 0:
 *                     AA = fabs(A)
 *                     sign = A / AA             # <<<<<<<<<<<<<<
 * 
 *                     h = 0
 */
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 115: 
 116:                     h = 0
          /* "_distortion.pyx":116
 *                     sign = A / AA
 * 
 *                     h = 0             # <<<<<<<<<<<<<<
 *                     dA = 1.0
 *                     while AA > 0:
 */
          __pyx_v_h = 0;
 117:                     dA = 1.0
          /* "_distortion.pyx":117
 * 
 *                     h = 0
 *                     dA = 1.0             # <<<<<<<<<<<<<<
 *                     while AA > 0:
 *                         if dA > AA:
 */
          __pyx_v_dA = 1.0;
 118:                     while AA > 0:
          /* "_distortion.pyx":118
 *                     h = 0
 *                     dA = 1.0
 *                     while AA > 0:             # <<<<<<<<<<<<<<
 *                         if dA > AA:
 *                             dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 119:                         if dA > AA:
            /* "_distortion.pyx":119
 *                     dA = 1.0
 *                     while AA > 0:
 *                         if dA > AA:             # <<<<<<<<<<<<<<
 *                             dA = AA
 *                             AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 120:                             dA = AA
              /* "_distortion.pyx":120
 *                     while AA > 0:
 *                         if dA > AA:
 *                             dA = AA             # <<<<<<<<<<<<<<
 *                             AA = -1
 *                         box[i , h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 121:                             AA = -1
              /* "_distortion.pyx":121
 *                         if dA > AA:
 *                             dA = AA
 *                             AA = -1             # <<<<<<<<<<<<<<
 *                         box[i , h] += sign * dA
 *                         AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L19;
            }
            __pyx_L19:;
 122:                         box[i , h] += sign * dA
            /* "_distortion.pyx":122
 *                             dA = AA
 *                             AA = -1
 *                         box[i , h] += sign * dA             # <<<<<<<<<<<<<<
 *                         AA -= dA
 *                         h += 1
 */
            __pyx_t_8 = __pyx_v_i;
            __pyx_t_9 = __pyx_v_h;
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_box.data + __pyx_t_8 * __pyx_v_box.strides[0]) ) + __pyx_t_9 * __pyx_v_box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 123:                         AA -= dA
            /* "_distortion.pyx":123
 *                             AA = -1
 *                         box[i , h] += sign * dA
 *                         AA -= dA             # <<<<<<<<<<<<<<
 *                         h += 1
 *             # Section Pn->B
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 124:                         h += 1
            /* "_distortion.pyx":124
 *                         box[i , h] += sign * dA
 *                         AA -= dA
 *                         h += 1             # <<<<<<<<<<<<<<
 *             # Section Pn->B
 *             P = floor(stop)
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L16;
        }
        __pyx_L16:;
      }
 125:             # Section Pn->B
 126:             P = floor(stop)
      /* "_distortion.pyx":126
 *                         h += 1
 *             # Section Pn->B
 *             P = floor(stop)             # <<<<<<<<<<<<<<
 *             dP = stop - P
 *             if dP > 0:
 */
      __pyx_v_P = floor(__pyx_v_stop);
 127:             dP = stop - P
      /* "_distortion.pyx":127
 *             # Section Pn->B
 *             P = floor(stop)
 *             dP = stop - P             # <<<<<<<<<<<<<<
 *             if dP > 0:
 *                 A = calc_area(P, stop, slope, intercept)
 */
      __pyx_v_dP = (__pyx_v_stop - __pyx_v_P);
 128:             if dP > 0:
      /* "_distortion.pyx":128
 *             P = floor(stop)
 *             dP = stop - P
 *             if dP > 0:             # <<<<<<<<<<<<<<
 *                 A = calc_area(P, stop, slope, intercept)
 *                 if A != 0:
 */
      __pyx_t_1 = (__pyx_v_dP > 0.0);
      if (__pyx_t_1) {
 129:                 A = calc_area(P, stop, slope, intercept)
        /* "_distortion.pyx":129
 *             dP = stop - P
 *             if dP > 0:
 *                 A = calc_area(P, stop, slope, intercept)             # <<<<<<<<<<<<<<
 *                 if A != 0:
 *                     AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_P, __pyx_v_stop, __pyx_v_slope, __pyx_v_intercept, 0);
 130:                 if A != 0:
        /* "_distortion.pyx":130
 *             if dP > 0:
 *                 A = calc_area(P, stop, slope, intercept)
 *                 if A != 0:             # <<<<<<<<<<<<<<
 *                     AA = fabs(A)
 *                     sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 131:                     AA = fabs(A)
          /* "_distortion.pyx":131
 *                 A = calc_area(P, stop, slope, intercept)
 *                 if A != 0:
 *                     AA = fabs(A)             # <<<<<<<<<<<<<<
 *                     sign = A / AA
 *                     h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 132:                     sign = A / AA
          /* "_distortion.pyx":132
 *                 if A != 0:
 *                     AA = fabs(A)
 *                     sign = A / AA             # <<<<<<<<<<<<<<
 *                     h = 0
 *                     dA = fabs(dP)
 */
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 133:                     h = 0
          /* "_distortion.pyx":133
 *                     AA = fabs(A)
 *                     sign = A / AA
 *                     h = 0             # <<<<<<<<<<<<<<
 *                     dA = fabs(dP)
 *                     while AA > 0:
 */
          __pyx_v_h = 0;
 134:                     dA = fabs(dP)
          /* "_distortion.pyx":134
 *                     sign = A / AA
 *                     h = 0
 *                     dA = fabs(dP)             # <<<<<<<<<<<<<<
 *                     while AA > 0:
 *                         if dA > AA:
 */
          __pyx_v_dA = fabs(__pyx_v_dP);
 135:                     while AA > 0:
          /* "_distortion.pyx":135
 *                     h = 0
 *                     dA = fabs(dP)
 *                     while AA > 0:             # <<<<<<<<<<<<<<
 *                         if dA > AA:
 *                             dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 136:                         if dA > AA:
            /* "_distortion.pyx":136
 *                     dA = fabs(dP)
 *                     while AA > 0:
 *                         if dA > AA:             # <<<<<<<<<<<<<<
 *                             dA = AA
 *                             AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 137:                             dA = AA
              /* "_distortion.pyx":137
 *                     while AA > 0:
 *                         if dA > AA:
 *                             dA = AA             # <<<<<<<<<<<<<<
 *                             AA = -1
 *                         box[(<int> floor(P)), h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 138:                             AA = -1
              /* "_distortion.pyx":138
 *                         if dA > AA:
 *                             dA = AA
 *                             AA = -1             # <<<<<<<<<<<<<<
 *                         box[(<int> floor(P)), h] += sign * dA
 *                         AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L24;
            }
            __pyx_L24:;
 139:                         box[(<int> floor(P)), h] += sign * dA
            /* "_distortion.pyx":139
 *                             dA = AA
 *                             AA = -1
 *                         box[(<int> floor(P)), h] += sign * dA             # <<<<<<<<<<<<<<
 *                         AA -= dA
 *                         h += 1
 */
            __pyx_t_6 = ((int)floor(__pyx_v_P));
            __pyx_t_7 = __pyx_v_h;
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_box.data + __pyx_t_6 * __pyx_v_box.strides[0]) ) + __pyx_t_7 * __pyx_v_box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 140:                         AA -= dA
            /* "_distortion.pyx":140
 *                             AA = -1
 *                         box[(<int> floor(P)), h] += sign * dA
 *                         AA -= dA             # <<<<<<<<<<<<<<
 *                         h += 1
 *     elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 141:                         h += 1
            /* "_distortion.pyx":141
 *                         box[(<int> floor(P)), h] += sign * dA
 *                         AA -= dA
 *                         h += 1             # <<<<<<<<<<<<<<
 *     elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
 *         P = floor(start)
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L21;
        }
        __pyx_L21:;
        goto __pyx_L20;
      }
      __pyx_L20:;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
 142:     elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
  /* "_distortion.pyx":142
 *                         AA -= dA
 *                         h += 1
 *     elif    start > stop:  # negative contribution. Nota is start=stop: no contribution             # <<<<<<<<<<<<<<
 *         P = floor(start)
 *         if stop > P:  # start and stop are in the same unit
 */
  __pyx_t_1 = (__pyx_v_start > __pyx_v_stop);
  if (__pyx_t_1) {
 143:         P = floor(start)
    /* "_distortion.pyx":143
 *                         h += 1
 *     elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
 *         P = floor(start)             # <<<<<<<<<<<<<<
 *         if stop > P:  # start and stop are in the same unit
 *             A = calc_area(start, stop, slope, intercept)
 */
    __pyx_v_P = floor(__pyx_v_start);
 144:         if stop > P:  # start and stop are in the same unit
    /* "_distortion.pyx":144
 *     elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
 *         P = floor(start)
 *         if stop > P:  # start and stop are in the same unit             # <<<<<<<<<<<<<<
 *             A = calc_area(start, stop, slope, intercept)
 *             if A != 0:
 */
    __pyx_t_1 = (__pyx_v_stop > __pyx_v_P);
    if (__pyx_t_1) {
 145:             A = calc_area(start, stop, slope, intercept)
      /* "_distortion.pyx":145
 *         P = floor(start)
 *         if stop > P:  # start and stop are in the same unit
 *             A = calc_area(start, stop, slope, intercept)             # <<<<<<<<<<<<<<
 *             if A != 0:
 *                 AA = fabs(A)
 */
      __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_start, __pyx_v_stop, __pyx_v_slope, __pyx_v_intercept, 0);
 146:             if A != 0:
      /* "_distortion.pyx":146
 *         if stop > P:  # start and stop are in the same unit
 *             A = calc_area(start, stop, slope, intercept)
 *             if A != 0:             # <<<<<<<<<<<<<<
 *                 AA = fabs(A)
 *                 sign = A / AA
 */
      __pyx_t_1 = (__pyx_v_A != 0.0);
      if (__pyx_t_1) {
 147:                 AA = fabs(A)
        /* "_distortion.pyx":147
 *             A = calc_area(start, stop, slope, intercept)
 *             if A != 0:
 *                 AA = fabs(A)             # <<<<<<<<<<<<<<
 *                 sign = A / AA
 *                 dA = (start - stop)  # always positive
 */
        __pyx_v_AA = fabs(__pyx_v_A);
 148:                 sign = A / AA
        /* "_distortion.pyx":148
 *             if A != 0:
 *                 AA = fabs(A)
 *                 sign = A / AA             # <<<<<<<<<<<<<<
 *                 dA = (start - stop)  # always positive
 *                 h = 0
 */
        __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 149:                 dA = (start - stop)  # always positive
        /* "_distortion.pyx":149
 *                 AA = fabs(A)
 *                 sign = A / AA
 *                 dA = (start - stop)  # always positive             # <<<<<<<<<<<<<<
 *                 h = 0
 *                 while AA > 0:
 */
        __pyx_v_dA = (__pyx_v_start - __pyx_v_stop);
 150:                 h = 0
        /* "_distortion.pyx":150
 *                 sign = A / AA
 *                 dA = (start - stop)  # always positive
 *                 h = 0             # <<<<<<<<<<<<<<
 *                 while AA > 0:
 *                     if dA > AA:
 */
        __pyx_v_h = 0;
 151:                 while AA > 0:
        /* "_distortion.pyx":151
 *                 dA = (start - stop)  # always positive
 *                 h = 0
 *                 while AA > 0:             # <<<<<<<<<<<<<<
 *                     if dA > AA:
 *                         dA = AA
 */
        while (1) {
          __pyx_t_1 = (__pyx_v_AA > 0.0);
          if (!__pyx_t_1) break;
 152:                     if dA > AA:
          /* "_distortion.pyx":152
 *                 h = 0
 *                 while AA > 0:
 *                     if dA > AA:             # <<<<<<<<<<<<<<
 *                         dA = AA
 *                         AA = -1
 */
          __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
          if (__pyx_t_1) {
 153:                         dA = AA
            /* "_distortion.pyx":153
 *                 while AA > 0:
 *                     if dA > AA:
 *                         dA = AA             # <<<<<<<<<<<<<<
 *                         AA = -1
 *                     box[(<int> floor(start)), h] += sign * dA
 */
            __pyx_v_dA = __pyx_v_AA;
 154:                         AA = -1
            /* "_distortion.pyx":154
 *                     if dA > AA:
 *                         dA = AA
 *                         AA = -1             # <<<<<<<<<<<<<<
 *                     box[(<int> floor(start)), h] += sign * dA
 *                     AA -= dA
 */
            __pyx_v_AA = -1.0;
            goto __pyx_L29;
          }
          __pyx_L29:;
 155:                     box[(<int> floor(start)), h] += sign * dA
          /* "_distortion.pyx":155
 *                         dA = AA
 *                         AA = -1
 *                     box[(<int> floor(start)), h] += sign * dA             # <<<<<<<<<<<<<<
 *                     AA -= dA
 *                     h += 1
 */
          __pyx_t_10 = ((int)floor(__pyx_v_start));
          __pyx_t_11 = __pyx_v_h;
          *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_box.data + __pyx_t_10 * __pyx_v_box.strides[0]) ) + __pyx_t_11 * __pyx_v_box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 156:                     AA -= dA
          /* "_distortion.pyx":156
 *                         AA = -1
 *                     box[(<int> floor(start)), h] += sign * dA
 *                     AA -= dA             # <<<<<<<<<<<<<<
 *                     h += 1
 *         else:
 */
          __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 157:                     h += 1
          /* "_distortion.pyx":157
 *                     box[(<int> floor(start)), h] += sign * dA
 *                     AA -= dA
 *                     h += 1             # <<<<<<<<<<<<<<
 *         else:
 *             dP = P - start
 */
          __pyx_v_h = (__pyx_v_h + 1);
        }
        goto __pyx_L26;
      }
      __pyx_L26:;
      goto __pyx_L25;
    }
    /*else*/ {
 158:         else:
 159:             dP = P - start
      /* "_distortion.pyx":159
 *                     h += 1
 *         else:
 *             dP = P - start             # <<<<<<<<<<<<<<
 *             if dP < 0:
 *                 A = calc_area(start, P, slope, intercept)
 */
      __pyx_v_dP = (__pyx_v_P - __pyx_v_start);
 160:             if dP < 0:
      /* "_distortion.pyx":160
 *         else:
 *             dP = P - start
 *             if dP < 0:             # <<<<<<<<<<<<<<
 *                 A = calc_area(start, P, slope, intercept)
 *                 if A != 0:
 */
      __pyx_t_1 = (__pyx_v_dP < 0.0);
      if (__pyx_t_1) {
 161:                 A = calc_area(start, P, slope, intercept)
        /* "_distortion.pyx":161
 *             dP = P - start
 *             if dP < 0:
 *                 A = calc_area(start, P, slope, intercept)             # <<<<<<<<<<<<<<
 *                 if A != 0:
 *                     AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_start, __pyx_v_P, __pyx_v_slope, __pyx_v_intercept, 0);
 162:                 if A != 0:
        /* "_distortion.pyx":162
 *             if dP < 0:
 *                 A = calc_area(start, P, slope, intercept)
 *                 if A != 0:             # <<<<<<<<<<<<<<
 *                     AA = fabs(A)
 *                     sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 163:                     AA = fabs(A)
          /* "_distortion.pyx":163
 *                 A = calc_area(start, P, slope, intercept)
 *                 if A != 0:
 *                     AA = fabs(A)             # <<<<<<<<<<<<<<
 *                     sign = A / AA
 *                     h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 164:                     sign = A / AA
          /* "_distortion.pyx":164
 *                 if A != 0:
 *                     AA = fabs(A)
 *                     sign = A / AA             # <<<<<<<<<<<<<<
 *                     h = 0
 *                     dA = fabs(dP)
 */
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 165:                     h = 0
          /* "_distortion.pyx":165
 *                     AA = fabs(A)
 *                     sign = A / AA
 *                     h = 0             # <<<<<<<<<<<<<<
 *                     dA = fabs(dP)
 *                     while AA > 0:
 */
          __pyx_v_h = 0;
 166:                     dA = fabs(dP)
          /* "_distortion.pyx":166
 *                     sign = A / AA
 *                     h = 0
 *                     dA = fabs(dP)             # <<<<<<<<<<<<<<
 *                     while AA > 0:
 *                         if dA > AA:
 */
          __pyx_v_dA = fabs(__pyx_v_dP);
 167:                     while AA > 0:
          /* "_distortion.pyx":167
 *                     h = 0
 *                     dA = fabs(dP)
 *                     while AA > 0:             # <<<<<<<<<<<<<<
 *                         if dA > AA:
 *                             dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 168:                         if dA > AA:
            /* "_distortion.pyx":168
 *                     dA = fabs(dP)
 *                     while AA > 0:
 *                         if dA > AA:             # <<<<<<<<<<<<<<
 *                             dA = AA
 *                             AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 169:                             dA = AA
              /* "_distortion.pyx":169
 *                     while AA > 0:
 *                         if dA > AA:
 *                             dA = AA             # <<<<<<<<<<<<<<
 *                             AA = -1
 *                         box[(<int> floor(P)) , h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 170:                             AA = -1
              /* "_distortion.pyx":170
 *                         if dA > AA:
 *                             dA = AA
 *                             AA = -1             # <<<<<<<<<<<<<<
 *                         box[(<int> floor(P)) , h] += sign * dA
 *                         AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L34;
            }
            __pyx_L34:;
 171:                         box[(<int> floor(P)) , h] += sign * dA
            /* "_distortion.pyx":171
 *                             dA = AA
 *                             AA = -1
 *                         box[(<int> floor(P)) , h] += sign * dA             # <<<<<<<<<<<<<<
 *                         AA -= dA
 *                         h += 1
 */
            __pyx_t_12 = ((int)floor(__pyx_v_P));
            __pyx_t_13 = __pyx_v_h;
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_box.data + __pyx_t_12 * __pyx_v_box.strides[0]) ) + __pyx_t_13 * __pyx_v_box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 172:                         AA -= dA
            /* "_distortion.pyx":172
 *                             AA = -1
 *                         box[(<int> floor(P)) , h] += sign * dA
 *                         AA -= dA             # <<<<<<<<<<<<<<
 *                         h += 1
 *             # subsection P1->Pn
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 173:                         h += 1
            /* "_distortion.pyx":173
 *                         box[(<int> floor(P)) , h] += sign * dA
 *                         AA -= dA
 *                         h += 1             # <<<<<<<<<<<<<<
 *             # subsection P1->Pn
 *             for i in range((<int> start), (<int> ceil(stop)), -1):
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L31;
        }
        __pyx_L31:;
        goto __pyx_L30;
      }
      __pyx_L30:;
 174:             # subsection P1->Pn
 175:             for i in range((<int> start), (<int> ceil(stop)), -1):
      /* "_distortion.pyx":175
 *                         h += 1
 *             # subsection P1->Pn
 *             for i in range((<int> start), (<int> ceil(stop)), -1):             # <<<<<<<<<<<<<<
 *                 A = calc_area(i, i - 1, slope, intercept)
 *                 if A != 0:
 */
      __pyx_t_14 = ((int)ceil(__pyx_v_stop));
      for (__pyx_t_15 = ((int)__pyx_v_start); __pyx_t_15 > __pyx_t_14; __pyx_t_15-=1) {
        __pyx_v_i = __pyx_t_15;
 176:                 A = calc_area(i, i - 1, slope, intercept)
        /* "_distortion.pyx":176
 *             # subsection P1->Pn
 *             for i in range((<int> start), (<int> ceil(stop)), -1):
 *                 A = calc_area(i, i - 1, slope, intercept)             # <<<<<<<<<<<<<<
 *                 if A != 0:
 *                     AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_i, (__pyx_v_i - 1), __pyx_v_slope, __pyx_v_intercept, 0);
 177:                 if A != 0:
        /* "_distortion.pyx":177
 *             for i in range((<int> start), (<int> ceil(stop)), -1):
 *                 A = calc_area(i, i - 1, slope, intercept)
 *                 if A != 0:             # <<<<<<<<<<<<<<
 *                     AA = fabs(A)
 *                     sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 178:                     AA = fabs(A)
          /* "_distortion.pyx":178
 *                 A = calc_area(i, i - 1, slope, intercept)
 *                 if A != 0:
 *                     AA = fabs(A)             # <<<<<<<<<<<<<<
 *                     sign = A / AA
 *                     h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 179:                     sign = A / AA
          /* "_distortion.pyx":179
 *                 if A != 0:
 *                     AA = fabs(A)
 *                     sign = A / AA             # <<<<<<<<<<<<<<
 *                     h = 0
 *                     dA = 1
 */
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 180:                     h = 0
          /* "_distortion.pyx":180
 *                     AA = fabs(A)
 *                     sign = A / AA
 *                     h = 0             # <<<<<<<<<<<<<<
 *                     dA = 1
 *                     while AA > 0:
 */
          __pyx_v_h = 0;
 181:                     dA = 1
          /* "_distortion.pyx":181
 *                     sign = A / AA
 *                     h = 0
 *                     dA = 1             # <<<<<<<<<<<<<<
 *                     while AA > 0:
 *                         if dA > AA:
 */
          __pyx_v_dA = 1.0;
 182:                     while AA > 0:
          /* "_distortion.pyx":182
 *                     h = 0
 *                     dA = 1
 *                     while AA > 0:             # <<<<<<<<<<<<<<
 *                         if dA > AA:
 *                             dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 183:                         if dA > AA:
            /* "_distortion.pyx":183
 *                     dA = 1
 *                     while AA > 0:
 *                         if dA > AA:             # <<<<<<<<<<<<<<
 *                             dA = AA
 *                             AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 184:                             dA = AA
              /* "_distortion.pyx":184
 *                     while AA > 0:
 *                         if dA > AA:
 *                             dA = AA             # <<<<<<<<<<<<<<
 *                             AA = -1
 *                         box[i - 1 , h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 185:                             AA = -1
              /* "_distortion.pyx":185
 *                         if dA > AA:
 *                             dA = AA
 *                             AA = -1             # <<<<<<<<<<<<<<
 *                         box[i - 1 , h] += sign * dA
 *                         AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L40;
            }
            __pyx_L40:;
 186:                         box[i - 1 , h] += sign * dA
            /* "_distortion.pyx":186
 *                             dA = AA
 *                             AA = -1
 *                         box[i - 1 , h] += sign * dA             # <<<<<<<<<<<<<<
 *                         AA -= dA
 *                         h += 1
 */
            __pyx_t_16 = (__pyx_v_i - 1);
            __pyx_t_17 = __pyx_v_h;
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_box.data + __pyx_t_16 * __pyx_v_box.strides[0]) ) + __pyx_t_17 * __pyx_v_box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 187:                         AA -= dA
            /* "_distortion.pyx":187
 *                             AA = -1
 *                         box[i - 1 , h] += sign * dA
 *                         AA -= dA             # <<<<<<<<<<<<<<
 *                         h += 1
 *             # Section Pn->B
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 188:                         h += 1
            /* "_distortion.pyx":188
 *                         box[i - 1 , h] += sign * dA
 *                         AA -= dA
 *                         h += 1             # <<<<<<<<<<<<<<
 *             # Section Pn->B
 *             P = ceil(stop)
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L37;
        }
        __pyx_L37:;
      }
 189:             # Section Pn->B
 190:             P = ceil(stop)
      /* "_distortion.pyx":190
 *                         h += 1
 *             # Section Pn->B
 *             P = ceil(stop)             # <<<<<<<<<<<<<<
 *             dP = stop - P
 *             if dP < 0:
 */
      __pyx_v_P = ceil(__pyx_v_stop);
 191:             dP = stop - P
      /* "_distortion.pyx":191
 *             # Section Pn->B
 *             P = ceil(stop)
 *             dP = stop - P             # <<<<<<<<<<<<<<
 *             if dP < 0:
 *                 A = calc_area(P, stop, slope, intercept)
 */
      __pyx_v_dP = (__pyx_v_stop - __pyx_v_P);
 192:             if dP < 0:
      /* "_distortion.pyx":192
 *             P = ceil(stop)
 *             dP = stop - P
 *             if dP < 0:             # <<<<<<<<<<<<<<
 *                 A = calc_area(P, stop, slope, intercept)
 *                 if A != 0:
 */
      __pyx_t_1 = (__pyx_v_dP < 0.0);
      if (__pyx_t_1) {
 193:                 A = calc_area(P, stop, slope, intercept)
        /* "_distortion.pyx":193
 *             dP = stop - P
 *             if dP < 0:
 *                 A = calc_area(P, stop, slope, intercept)             # <<<<<<<<<<<<<<
 *                 if A != 0:
 *                     AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_P, __pyx_v_stop, __pyx_v_slope, __pyx_v_intercept, 0);
 194:                 if A != 0:
        /* "_distortion.pyx":194
 *             if dP < 0:
 *                 A = calc_area(P, stop, slope, intercept)
 *                 if A != 0:             # <<<<<<<<<<<<<<
 *                     AA = fabs(A)
 *                     sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 195:                     AA = fabs(A)
          /* "_distortion.pyx":195
 *                 A = calc_area(P, stop, slope, intercept)
 *                 if A != 0:
 *                     AA = fabs(A)             # <<<<<<<<<<<<<<
 *                     sign = A / AA
 *                     h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 196:                     sign = A / AA
          /* "_distortion.pyx":196
 *                 if A != 0:
 *                     AA = fabs(A)
 *                     sign = A / AA             # <<<<<<<<<<<<<<
 *                     h = 0
 *                     dA = fabs(dP)
 */
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 197:                     h = 0
          /* "_distortion.pyx":197
 *                     AA = fabs(A)
 *                     sign = A / AA
 *                     h = 0             # <<<<<<<<<<<<<<
 *                     dA = fabs(dP)
 *                     while AA > 0:
 */
          __pyx_v_h = 0;
 198:                     dA = fabs(dP)
          /* "_distortion.pyx":198
 *                     sign = A / AA
 *                     h = 0
 *                     dA = fabs(dP)             # <<<<<<<<<<<<<<
 *                     while AA > 0:
 *                         if dA > AA:
 */
          __pyx_v_dA = fabs(__pyx_v_dP);
 199:                     while AA > 0:
          /* "_distortion.pyx":199
 *                     h = 0
 *                     dA = fabs(dP)
 *                     while AA > 0:             # <<<<<<<<<<<<<<
 *                         if dA > AA:
 *                             dA = AA; AA = -1
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 200:                         if dA > AA:
            /* "_distortion.pyx":200
 *                     dA = fabs(dP)
 *                     while AA > 0:
 *                         if dA > AA:             # <<<<<<<<<<<<<<
 *                             dA = AA; AA = -1
 *                         box[(<int> floor(stop)), h] += sign * dA
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 201:                             dA = AA; AA = -1
              /* "_distortion.pyx":201
 *                     while AA > 0:
 *                         if dA > AA:
 *                             dA = AA; AA = -1             # <<<<<<<<<<<<<<
 *                         box[(<int> floor(stop)), h] += sign * dA
 *                         AA -= dA
 */
              __pyx_v_dA = __pyx_v_AA;
              __pyx_v_AA = -1.0;
              goto __pyx_L45;
            }
            __pyx_L45:;
 202:                         box[(<int> floor(stop)), h] += sign * dA
            /* "_distortion.pyx":202
 *                         if dA > AA:
 *                             dA = AA; AA = -1
 *                         box[(<int> floor(stop)), h] += sign * dA             # <<<<<<<<<<<<<<
 *                         AA -= dA
 *                         h += 1
 */
            __pyx_t_14 = ((int)floor(__pyx_v_stop));
            __pyx_t_15 = __pyx_v_h;
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_box.data + __pyx_t_14 * __pyx_v_box.strides[0]) ) + __pyx_t_15 * __pyx_v_box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 203:                         AA -= dA
            /* "_distortion.pyx":203
 *                             dA = AA; AA = -1
 *                         box[(<int> floor(stop)), h] += sign * dA
 *                         AA -= dA             # <<<<<<<<<<<<<<
 *                         h += 1
 * 
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 204:                         h += 1
            /* "_distortion.pyx":204
 *                         box[(<int> floor(stop)), h] += sign * dA
 *                         AA -= dA
 *                         h += 1             # <<<<<<<<<<<<<<
 * 
 * cdef class Quad:
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L42;
        }
        __pyx_L42:;
        goto __pyx_L41;
      }
      __pyx_L41:;
    }
    __pyx_L25:;
    goto __pyx_L3;
  }
  __pyx_L3:;

}

/* Python wrapper */
static int __pyx_pw_11_distortion_4Quad_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11_distortion_4Quad_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_buffer = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__buffer,0};
    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:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 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, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buffer = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0]); if (unlikely(!__pyx_v_buffer.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Quad.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_4Quad___cinit__(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self), __pyx_v_buffer);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 205: 
 206: cdef class Quad:
/* "_distortion.pyx":206
 *                         h += 1
 * 
 * cdef class Quad:             # <<<<<<<<<<<<<<
 *     """
 *     Basic quadrilatere object
 */
struct __pyx_obj_11_distortion_Quad {
  PyObject_HEAD
  struct __pyx_vtabstruct_11_distortion_Quad *__pyx_vtab;
  __Pyx_memviewslice box;
  float A0;
  float A1;
  float B0;
  float B1;
  float C0;
  float C1;
  float D0;
  float D1;
  float pAB;
  float pBC;
  float pCD;
  float pDA;
  float cAB;
  float cBC;
  float cCD;
  float cDA;
  float area;
  int offset0;
  int offset1;
  int box_size0;
  int box_size1;
  int has_area;
  int has_slope;
};


/* "_distortion.pyx":206
 *                         h += 1
 * 
 * cdef class Quad:             # <<<<<<<<<<<<<<
 *     """
 *     Basic quadrilatere object
 */

struct __pyx_vtabstruct_11_distortion_Quad {
  float (*get_box)(struct __pyx_obj_11_distortion_Quad *, int, int, int __pyx_skip_dispatch);
  int (*get_offset0)(struct __pyx_obj_11_distortion_Quad *, int __pyx_skip_dispatch);
  int (*get_offset1)(struct __pyx_obj_11_distortion_Quad *, int __pyx_skip_dispatch);
  int (*get_box_size0)(struct __pyx_obj_11_distortion_Quad *, int __pyx_skip_dispatch);
  int (*get_box_size1)(struct __pyx_obj_11_distortion_Quad *, int __pyx_skip_dispatch);
  PyObject *(*init_slope)(struct __pyx_obj_11_distortion_Quad *, int __pyx_skip_dispatch);
  float (*calc_area_AB)(struct __pyx_obj_11_distortion_Quad *, float, float, int __pyx_skip_dispatch);
  float (*calc_area_BC)(struct __pyx_obj_11_distortion_Quad *, float, float, int __pyx_skip_dispatch);
  float (*calc_area_CD)(struct __pyx_obj_11_distortion_Quad *, float, float, int __pyx_skip_dispatch);
  float (*calc_area_DA)(struct __pyx_obj_11_distortion_Quad *, float, float, int __pyx_skip_dispatch);
  float (*calc_area)(struct __pyx_obj_11_distortion_Quad *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_11_distortion_Quad *__pyx_vtabptr_11_distortion_Quad;
 207:     """
 208:     Basic quadrilatere object
 209: 
 210:                                      |
 211:                                      |
 212:                                      |                       xxxxxA
 213:                                      |      xxxxxxxI'xxxxxxxx     x
 214:                              xxxxxxxxIxxxxxx       |               x
 215:                 Bxxxxxxxxxxxx        |             |               x
 216:                 x                    |             |               x
 217:                 x                    |             |               x
 218:                  x                   |             |                x
 219:                  x                   |             |                x
 220:                  x                   |             |                x
 221:                  x                   |             |                x
 222:                  x                   |             |                x
 223:                   x                  |             |                 x
 224:                   x                  |             |                 x
 225:                   x                  |             |                 x
 226:                   x                 O|             P              A'  x
 227:  -----------------J------------------+--------------------------------L-----------------------
 228:                   x                  |                                 x
 229:                   x                  |                                  x
 230:                   x                  |                                  x
 231:                    x                 |     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxD
 232:                    CxxxxxxxxxxxxxxxxxKxxxxx
 233:                                      |
 234:                                      |
 235:                                      |
 236:                                      |
 237:         """
 238:     cdef float[:,:] box
 239:     cdef float A0, A1, B0, B1, C0, C1, D0, D1, pAB, pBC, pCD, pDA, cAB, cBC, cCD, cDA, area
 240:     cdef int offset0, offset1, box_size0, box_size1
 241:     cdef bint has_area, has_slope
 242: 
 243:     def __cinit__(self, float[:,:] buffer):
/* "_distortion.pyx":243
 *     cdef bint has_area, has_slope
 * 
 *     def __cinit__(self, float[:,:] buffer):             # <<<<<<<<<<<<<<
 *         self.box = buffer
 *         self.A0 = self.A1 = 0
 */

static int __pyx_pf_11_distortion_4Quad___cinit__(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, __Pyx_memviewslice __pyx_v_buffer) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);
 244:         self.box = buffer
  /* "_distortion.pyx":244
 * 
 *     def __cinit__(self, float[:,:] buffer):
 *         self.box = buffer             # <<<<<<<<<<<<<<
 *         self.A0 = self.A1 = 0
 *         self.B0 = self.B1 = 0
 */
  __PYX_XDEC_MEMVIEW(&__pyx_v_self->box, 0);
  __PYX_INC_MEMVIEW(&__pyx_v_buffer, 0);
  __pyx_v_self->box = __pyx_v_buffer;
 245:         self.A0 = self.A1 = 0
  /* "_distortion.pyx":245
 *     def __cinit__(self, float[:,:] buffer):
 *         self.box = buffer
 *         self.A0 = self.A1 = 0             # <<<<<<<<<<<<<<
 *         self.B0 = self.B1 = 0
 *         self.C0 = self.C1 = 0
 */
  __pyx_v_self->A0 = 0;
  __pyx_v_self->A1 = 0;
 246:         self.B0 = self.B1 = 0
  /* "_distortion.pyx":246
 *         self.box = buffer
 *         self.A0 = self.A1 = 0
 *         self.B0 = self.B1 = 0             # <<<<<<<<<<<<<<
 *         self.C0 = self.C1 = 0
 *         self.D0 = self.D1 = 0
 */
  __pyx_v_self->B0 = 0;
  __pyx_v_self->B1 = 0;
 247:         self.C0 = self.C1 = 0
  /* "_distortion.pyx":247
 *         self.A0 = self.A1 = 0
 *         self.B0 = self.B1 = 0
 *         self.C0 = self.C1 = 0             # <<<<<<<<<<<<<<
 *         self.D0 = self.D1 = 0
 *         self.offset0 = self.offset1 = 0
 */
  __pyx_v_self->C0 = 0;
  __pyx_v_self->C1 = 0;
 248:         self.D0 = self.D1 = 0
  /* "_distortion.pyx":248
 *         self.B0 = self.B1 = 0
 *         self.C0 = self.C1 = 0
 *         self.D0 = self.D1 = 0             # <<<<<<<<<<<<<<
 *         self.offset0 = self.offset1 = 0
 *         self.box_size0 = self.box_size1 = 0
 */
  __pyx_v_self->D0 = 0;
  __pyx_v_self->D1 = 0;
 249:         self.offset0 = self.offset1 = 0
  /* "_distortion.pyx":249
 *         self.C0 = self.C1 = 0
 *         self.D0 = self.D1 = 0
 *         self.offset0 = self.offset1 = 0             # <<<<<<<<<<<<<<
 *         self.box_size0 = self.box_size1 = 0
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0
 */
  __pyx_v_self->offset0 = 0;
  __pyx_v_self->offset1 = 0;
 250:         self.box_size0 = self.box_size1 = 0
  /* "_distortion.pyx":250
 *         self.D0 = self.D1 = 0
 *         self.offset0 = self.offset1 = 0
 *         self.box_size0 = self.box_size1 = 0             # <<<<<<<<<<<<<<
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0
 */
  __pyx_v_self->box_size0 = 0;
  __pyx_v_self->box_size1 = 0;
 251:         self.pAB = self.pBC = self.pCD = self.pDA = 0
  /* "_distortion.pyx":251
 *         self.offset0 = self.offset1 = 0
 *         self.box_size0 = self.box_size1 = 0
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0             # <<<<<<<<<<<<<<
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0
 *         self.area = 0
 */
  __pyx_v_self->pAB = 0;
  __pyx_v_self->pBC = 0;
  __pyx_v_self->pCD = 0;
  __pyx_v_self->pDA = 0;
 252:         self.cAB = self.cBC = self.cCD = self.cDA = 0
  /* "_distortion.pyx":252
 *         self.box_size0 = self.box_size1 = 0
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0             # <<<<<<<<<<<<<<
 *         self.area = 0
 *         self.has_area=0
 */
  __pyx_v_self->cAB = 0;
  __pyx_v_self->cBC = 0;
  __pyx_v_self->cCD = 0;
  __pyx_v_self->cDA = 0;
 253:         self.area = 0
  /* "_distortion.pyx":253
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0
 *         self.area = 0             # <<<<<<<<<<<<<<
 *         self.has_area=0
 *         self.has_slope=0
 */
  __pyx_v_self->area = 0.0;
 254:         self.has_area=0
  /* "_distortion.pyx":254
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0
 *         self.area = 0
 *         self.has_area=0             # <<<<<<<<<<<<<<
 *         self.has_slope=0
 * 
 */
  __pyx_v_self->has_area = 0;
 255:         self.has_slope=0
  /* "_distortion.pyx":255
 *         self.area = 0
 *         self.has_area=0
 *         self.has_slope=0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->has_slope = 0;

  __pyx_r = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_buffer, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_3reinit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_3reinit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_A0 = 0;
  PyObject *__pyx_v_A1 = 0;
  PyObject *__pyx_v_B0 = 0;
  PyObject *__pyx_v_B1 = 0;
  PyObject *__pyx_v_C0 = 0;
  PyObject *__pyx_v_C1 = 0;
  PyObject *__pyx_v_D0 = 0;
  PyObject *__pyx_v_D1 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reinit (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__A0,&__pyx_n_s__A1,&__pyx_n_s__B0,&__pyx_n_s__B1,&__pyx_n_s__C0,&__pyx_n_s__C1,&__pyx_n_s__D0,&__pyx_n_s__D1,0};
    PyObject* values[8] = {0,0,0,0,0,0,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  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        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__A0)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__A1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("reinit", 1, 8, 8, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__B0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("reinit", 1, 8, 8, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  3:
        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__B1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("reinit", 1, 8, 8, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  4:
        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__C0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("reinit", 1, 8, 8, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  5:
        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__C1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("reinit", 1, 8, 8, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  6:
        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__D0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("reinit", 1, 8, 8, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  7:
        if (likely((values[7] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__D1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("reinit", 1, 8, 8, 7); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reinit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 8) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
    }
    __pyx_v_A0 = values[0];
    __pyx_v_A1 = values[1];
    __pyx_v_B0 = values[2];
    __pyx_v_B1 = values[3];
    __pyx_v_C0 = values[4];
    __pyx_v_C1 = values[5];
    __pyx_v_D0 = values[6];
    __pyx_v_D1 = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reinit", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Quad.reinit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_4Quad_2reinit(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self), __pyx_v_A0, __pyx_v_A1, __pyx_v_B0, __pyx_v_B1, __pyx_v_C0, __pyx_v_C1, __pyx_v_D0, __pyx_v_D1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 256: 
 257: 
 258:     def reinit(self, A0, A1, B0, B1, C0, C1, D0, D1):
/* "_distortion.pyx":258
 * 
 * 
 *     def reinit(self, A0, A1, B0, B1, C0, C1, D0, D1):             # <<<<<<<<<<<<<<
 *         self.box[:, :] = 0.0
 *         self.A0 = A0
 */

static PyObject *__pyx_pf_11_distortion_4Quad_2reinit(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, PyObject *__pyx_v_A0, PyObject *__pyx_v_A1, PyObject *__pyx_v_B0, PyObject *__pyx_v_B1, PyObject *__pyx_v_C0, PyObject *__pyx_v_C1, PyObject *__pyx_v_D0, PyObject *__pyx_v_D1) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reinit", 0);
 259:         self.box[:, :] = 0.0
  /* "_distortion.pyx":259
 * 
 *     def reinit(self, A0, A1, B0, B1, C0, C1, D0, D1):
 *         self.box[:, :] = 0.0             # <<<<<<<<<<<<<<
 *         self.A0 = A0
 *         self.A1 = A1
 */
  if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
  __pyx_t_1 = __pyx_v_self->box;
  __PYX_INC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_t_3 = -1;
  __pyx_t_2.data = __pyx_t_1.data;
  __pyx_t_2.memview = __pyx_t_1.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_2.shape[0] = __pyx_t_1.shape[0];
__pyx_t_2.strides[0] = __pyx_t_1.strides[0];
    __pyx_t_2.suboffsets[0] = -1;

__pyx_t_2.shape[1] = __pyx_t_1.shape[1];
__pyx_t_2.strides[1] = __pyx_t_1.strides[1];
    __pyx_t_2.suboffsets[1] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  {
      float __pyx_temp_scalar = 0.0;
      {
          Py_ssize_t __pyx_temp_extent_0 = __pyx_t_2.shape[0];
          Py_ssize_t __pyx_temp_stride_0 = __pyx_t_2.strides[0];
          char *__pyx_temp_pointer_0;
          Py_ssize_t __pyx_temp_idx_0;
          Py_ssize_t __pyx_temp_extent_1 = __pyx_t_2.shape[1];
          Py_ssize_t __pyx_temp_stride_1 = __pyx_t_2.strides[1];
          char *__pyx_temp_pointer_1;
          Py_ssize_t __pyx_temp_idx_1;
          __pyx_temp_pointer_0 = __pyx_t_2.data;
          for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {
            __pyx_temp_pointer_1 = __pyx_temp_pointer_0;
            for (__pyx_temp_idx_1 = 0; __pyx_temp_idx_1 < __pyx_temp_extent_1; __pyx_temp_idx_1++) {
              *((float *) __pyx_temp_pointer_1) = __pyx_temp_scalar;
              __pyx_temp_pointer_1 += __pyx_temp_stride_1;
            }
            __pyx_temp_pointer_0 += __pyx_temp_stride_0;
          }
      }
  }
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
 260:         self.A0 = A0
  /* "_distortion.pyx":260
 *     def reinit(self, A0, A1, B0, B1, C0, C1, D0, D1):
 *         self.box[:, :] = 0.0
 *         self.A0 = A0             # <<<<<<<<<<<<<<
 *         self.A1 = A1
 *         self.B0 = B0
 */
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_A0); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->A0 = __pyx_t_4;
 261:         self.A1 = A1
  /* "_distortion.pyx":261
 *         self.box[:, :] = 0.0
 *         self.A0 = A0
 *         self.A1 = A1             # <<<<<<<<<<<<<<
 *         self.B0 = B0
 *         self.B1 = B1
 */
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_A1); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->A1 = __pyx_t_4;
 262:         self.B0 = B0
  /* "_distortion.pyx":262
 *         self.A0 = A0
 *         self.A1 = A1
 *         self.B0 = B0             # <<<<<<<<<<<<<<
 *         self.B1 = B1
 *         self.C0 = C0
 */
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_B0); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->B0 = __pyx_t_4;
 263:         self.B1 = B1
  /* "_distortion.pyx":263
 *         self.A1 = A1
 *         self.B0 = B0
 *         self.B1 = B1             # <<<<<<<<<<<<<<
 *         self.C0 = C0
 *         self.C1 = C1
 */
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_B1); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->B1 = __pyx_t_4;
 264:         self.C0 = C0
  /* "_distortion.pyx":264
 *         self.B0 = B0
 *         self.B1 = B1
 *         self.C0 = C0             # <<<<<<<<<<<<<<
 *         self.C1 = C1
 *         self.D0 = D0
 */
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_C0); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->C0 = __pyx_t_4;
 265:         self.C1 = C1
  /* "_distortion.pyx":265
 *         self.B1 = B1
 *         self.C0 = C0
 *         self.C1 = C1             # <<<<<<<<<<<<<<
 *         self.D0 = D0
 *         self.D1 = D1
 */
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_C1); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->C1 = __pyx_t_4;
 266:         self.D0 = D0
  /* "_distortion.pyx":266
 *         self.C0 = C0
 *         self.C1 = C1
 *         self.D0 = D0             # <<<<<<<<<<<<<<
 *         self.D1 = D1
 *         self.offset0 = (<int> floor(min(self.A0, self.B0, self.C0, self.D0)))
 */
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_D0); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->D0 = __pyx_t_4;
 267:         self.D1 = D1
  /* "_distortion.pyx":267
 *         self.C1 = C1
 *         self.D0 = D0
 *         self.D1 = D1             # <<<<<<<<<<<<<<
 *         self.offset0 = (<int> floor(min(self.A0, self.B0, self.C0, self.D0)))
 *         self.offset1 = (<int> floor(min(self.A1, self.B1, self.C1, self.D1)))
 */
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_v_D1); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_v_self->D1 = __pyx_t_4;
 268:         self.offset0 = (<int> floor(min(self.A0, self.B0, self.C0, self.D0)))
  /* "_distortion.pyx":268
 *         self.D0 = D0
 *         self.D1 = D1
 *         self.offset0 = (<int> floor(min(self.A0, self.B0, self.C0, self.D0)))             # <<<<<<<<<<<<<<
 *         self.offset1 = (<int> floor(min(self.A1, self.B1, self.C1, self.D1)))
 *         self.box_size0 = (<int> ceil(max(self.A0, self.B0, self.C0, self.D0))) - self.offset0
 */
  __pyx_t_4 = __pyx_v_self->B0;
  __pyx_t_5 = __pyx_v_self->C0;
  __pyx_t_6 = __pyx_v_self->D0;
  __pyx_t_7 = __pyx_v_self->A0;
  if ((__pyx_t_4 < __pyx_t_7)) {
    __pyx_t_8 = __pyx_t_4;
  } else {
    __pyx_t_8 = __pyx_t_7;
  }
  __pyx_t_7 = __pyx_t_8;
  if ((__pyx_t_5 < __pyx_t_7)) {
    __pyx_t_8 = __pyx_t_5;
  } else {
    __pyx_t_8 = __pyx_t_7;
  }
  __pyx_t_7 = __pyx_t_8;
  if ((__pyx_t_6 < __pyx_t_7)) {
    __pyx_t_8 = __pyx_t_6;
  } else {
    __pyx_t_8 = __pyx_t_7;
  }
  __pyx_v_self->offset0 = ((int)floor(__pyx_t_8));
 269:         self.offset1 = (<int> floor(min(self.A1, self.B1, self.C1, self.D1)))
  /* "_distortion.pyx":269
 *         self.D1 = D1
 *         self.offset0 = (<int> floor(min(self.A0, self.B0, self.C0, self.D0)))
 *         self.offset1 = (<int> floor(min(self.A1, self.B1, self.C1, self.D1)))             # <<<<<<<<<<<<<<
 *         self.box_size0 = (<int> ceil(max(self.A0, self.B0, self.C0, self.D0))) - self.offset0
 *         self.box_size1 = (<int> ceil(max(self.A1, self.B1, self.C1, self.D1))) - self.offset1
 */
  __pyx_t_8 = __pyx_v_self->B1;
  __pyx_t_4 = __pyx_v_self->C1;
  __pyx_t_5 = __pyx_v_self->D1;
  __pyx_t_6 = __pyx_v_self->A1;
  if ((__pyx_t_8 < __pyx_t_6)) {
    __pyx_t_7 = __pyx_t_8;
  } else {
    __pyx_t_7 = __pyx_t_6;
  }
  __pyx_t_6 = __pyx_t_7;
  if ((__pyx_t_4 < __pyx_t_6)) {
    __pyx_t_7 = __pyx_t_4;
  } else {
    __pyx_t_7 = __pyx_t_6;
  }
  __pyx_t_6 = __pyx_t_7;
  if ((__pyx_t_5 < __pyx_t_6)) {
    __pyx_t_7 = __pyx_t_5;
  } else {
    __pyx_t_7 = __pyx_t_6;
  }
  __pyx_v_self->offset1 = ((int)floor(__pyx_t_7));
 270:         self.box_size0 = (<int> ceil(max(self.A0, self.B0, self.C0, self.D0))) - self.offset0
  /* "_distortion.pyx":270
 *         self.offset0 = (<int> floor(min(self.A0, self.B0, self.C0, self.D0)))
 *         self.offset1 = (<int> floor(min(self.A1, self.B1, self.C1, self.D1)))
 *         self.box_size0 = (<int> ceil(max(self.A0, self.B0, self.C0, self.D0))) - self.offset0             # <<<<<<<<<<<<<<
 *         self.box_size1 = (<int> ceil(max(self.A1, self.B1, self.C1, self.D1))) - self.offset1
 *         self.A0 -= self.offset0
 */
  __pyx_t_7 = __pyx_v_self->B0;
  __pyx_t_8 = __pyx_v_self->C0;
  __pyx_t_4 = __pyx_v_self->D0;
  __pyx_t_5 = __pyx_v_self->A0;
  if ((__pyx_t_7 > __pyx_t_5)) {
    __pyx_t_6 = __pyx_t_7;
  } else {
    __pyx_t_6 = __pyx_t_5;
  }
  __pyx_t_5 = __pyx_t_6;
  if ((__pyx_t_8 > __pyx_t_5)) {
    __pyx_t_6 = __pyx_t_8;
  } else {
    __pyx_t_6 = __pyx_t_5;
  }
  __pyx_t_5 = __pyx_t_6;
  if ((__pyx_t_4 > __pyx_t_5)) {
    __pyx_t_6 = __pyx_t_4;
  } else {
    __pyx_t_6 = __pyx_t_5;
  }
  __pyx_v_self->box_size0 = (((int)ceil(__pyx_t_6)) - __pyx_v_self->offset0);
 271:         self.box_size1 = (<int> ceil(max(self.A1, self.B1, self.C1, self.D1))) - self.offset1
  /* "_distortion.pyx":271
 *         self.offset1 = (<int> floor(min(self.A1, self.B1, self.C1, self.D1)))
 *         self.box_size0 = (<int> ceil(max(self.A0, self.B0, self.C0, self.D0))) - self.offset0
 *         self.box_size1 = (<int> ceil(max(self.A1, self.B1, self.C1, self.D1))) - self.offset1             # <<<<<<<<<<<<<<
 *         self.A0 -= self.offset0
 *         self.A1 -= self.offset1
 */
  __pyx_t_6 = __pyx_v_self->B1;
  __pyx_t_7 = __pyx_v_self->C1;
  __pyx_t_8 = __pyx_v_self->D1;
  __pyx_t_4 = __pyx_v_self->A1;
  if ((__pyx_t_6 > __pyx_t_4)) {
    __pyx_t_5 = __pyx_t_6;
  } else {
    __pyx_t_5 = __pyx_t_4;
  }
  __pyx_t_4 = __pyx_t_5;
  if ((__pyx_t_7 > __pyx_t_4)) {
    __pyx_t_5 = __pyx_t_7;
  } else {
    __pyx_t_5 = __pyx_t_4;
  }
  __pyx_t_4 = __pyx_t_5;
  if ((__pyx_t_8 > __pyx_t_4)) {
    __pyx_t_5 = __pyx_t_8;
  } else {
    __pyx_t_5 = __pyx_t_4;
  }
  __pyx_v_self->box_size1 = (((int)ceil(__pyx_t_5)) - __pyx_v_self->offset1);
 272:         self.A0 -= self.offset0
  /* "_distortion.pyx":272
 *         self.box_size0 = (<int> ceil(max(self.A0, self.B0, self.C0, self.D0))) - self.offset0
 *         self.box_size1 = (<int> ceil(max(self.A1, self.B1, self.C1, self.D1))) - self.offset1
 *         self.A0 -= self.offset0             # <<<<<<<<<<<<<<
 *         self.A1 -= self.offset1
 *         self.B0 -= self.offset0
 */
  __pyx_v_self->A0 = (__pyx_v_self->A0 - __pyx_v_self->offset0);
 273:         self.A1 -= self.offset1
  /* "_distortion.pyx":273
 *         self.box_size1 = (<int> ceil(max(self.A1, self.B1, self.C1, self.D1))) - self.offset1
 *         self.A0 -= self.offset0
 *         self.A1 -= self.offset1             # <<<<<<<<<<<<<<
 *         self.B0 -= self.offset0
 *         self.B1 -= self.offset1
 */
  __pyx_v_self->A1 = (__pyx_v_self->A1 - __pyx_v_self->offset1);
 274:         self.B0 -= self.offset0
  /* "_distortion.pyx":274
 *         self.A0 -= self.offset0
 *         self.A1 -= self.offset1
 *         self.B0 -= self.offset0             # <<<<<<<<<<<<<<
 *         self.B1 -= self.offset1
 *         self.C0 -= self.offset0
 */
  __pyx_v_self->B0 = (__pyx_v_self->B0 - __pyx_v_self->offset0);
 275:         self.B1 -= self.offset1
  /* "_distortion.pyx":275
 *         self.A1 -= self.offset1
 *         self.B0 -= self.offset0
 *         self.B1 -= self.offset1             # <<<<<<<<<<<<<<
 *         self.C0 -= self.offset0
 *         self.C1 -= self.offset1
 */
  __pyx_v_self->B1 = (__pyx_v_self->B1 - __pyx_v_self->offset1);
 276:         self.C0 -= self.offset0
  /* "_distortion.pyx":276
 *         self.B0 -= self.offset0
 *         self.B1 -= self.offset1
 *         self.C0 -= self.offset0             # <<<<<<<<<<<<<<
 *         self.C1 -= self.offset1
 *         self.D0 -= self.offset0
 */
  __pyx_v_self->C0 = (__pyx_v_self->C0 - __pyx_v_self->offset0);
 277:         self.C1 -= self.offset1
  /* "_distortion.pyx":277
 *         self.B1 -= self.offset1
 *         self.C0 -= self.offset0
 *         self.C1 -= self.offset1             # <<<<<<<<<<<<<<
 *         self.D0 -= self.offset0
 *         self.D1 -= self.offset1
 */
  __pyx_v_self->C1 = (__pyx_v_self->C1 - __pyx_v_self->offset1);
 278:         self.D0 -= self.offset0
  /* "_distortion.pyx":278
 *         self.C0 -= self.offset0
 *         self.C1 -= self.offset1
 *         self.D0 -= self.offset0             # <<<<<<<<<<<<<<
 *         self.D1 -= self.offset1
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0
 */
  __pyx_v_self->D0 = (__pyx_v_self->D0 - __pyx_v_self->offset0);
 279:         self.D1 -= self.offset1
  /* "_distortion.pyx":279
 *         self.C1 -= self.offset1
 *         self.D0 -= self.offset0
 *         self.D1 -= self.offset1             # <<<<<<<<<<<<<<
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0
 */
  __pyx_v_self->D1 = (__pyx_v_self->D1 - __pyx_v_self->offset1);
 280:         self.pAB = self.pBC = self.pCD = self.pDA = 0
  /* "_distortion.pyx":280
 *         self.D0 -= self.offset0
 *         self.D1 -= self.offset1
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0             # <<<<<<<<<<<<<<
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0
 *         self.area = 0
 */
  __pyx_v_self->pAB = 0;
  __pyx_v_self->pBC = 0;
  __pyx_v_self->pCD = 0;
  __pyx_v_self->pDA = 0;
 281:         self.cAB = self.cBC = self.cCD = self.cDA = 0
  /* "_distortion.pyx":281
 *         self.D1 -= self.offset1
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0             # <<<<<<<<<<<<<<
 *         self.area = 0
 *         self.has_area = 0
 */
  __pyx_v_self->cAB = 0;
  __pyx_v_self->cBC = 0;
  __pyx_v_self->cCD = 0;
  __pyx_v_self->cDA = 0;
 282:         self.area = 0
  /* "_distortion.pyx":282
 *         self.pAB = self.pBC = self.pCD = self.pDA = 0
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0
 *         self.area = 0             # <<<<<<<<<<<<<<
 *         self.has_area = 0
 *         self.has_slope = 0
 */
  __pyx_v_self->area = 0.0;
 283:         self.has_area = 0
  /* "_distortion.pyx":283
 *         self.cAB = self.cBC = self.cCD = self.cDA = 0
 *         self.area = 0
 *         self.has_area = 0             # <<<<<<<<<<<<<<
 *         self.has_slope = 0
 * 
 */
  __pyx_v_self->has_area = 0;
 284:         self.has_slope = 0
  /* "_distortion.pyx":284
 *         self.area = 0
 *         self.has_area = 0
 *         self.has_slope = 0             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
 */
  __pyx_v_self->has_slope = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_AddTraceback("_distortion.Quad.reinit", __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_11_distortion_4Quad_5__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_5__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_4Quad_4__repr__(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 285: 
 286:     def __repr__(self):
/* "_distortion.pyx":286
 *         self.has_slope = 0
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         res = ["offset %i,%i size %i, %i" % (self.offset0, self.offset1, self.box_size0, self.box_size1), "box:"]
 *         for i in range(self.box_size0):
 */

static PyObject *__pyx_pf_11_distortion_4Quad_4__repr__(struct __pyx_obj_11_distortion_Quad *__pyx_v_self) {
  PyObject *__pyx_v_res = NULL;
  int __pyx_v_i;
  PyObject *__pyx_v_line = NULL;
  int __pyx_v_j;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
 287:         res = ["offset %i,%i size %i, %i" % (self.offset0, self.offset1, self.box_size0, self.box_size1), "box:"]
  /* "_distortion.pyx":287
 * 
 *     def __repr__(self):
 *         res = ["offset %i,%i size %i, %i" % (self.offset0, self.offset1, self.box_size0, self.box_size1), "box:"]             # <<<<<<<<<<<<<<
 *         for i in range(self.box_size0):
 *             line=""
 */
  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->offset0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyInt_FromLong(__pyx_v_self->offset1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyInt_FromLong(__pyx_v_self->box_size0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromLong(__pyx_v_self->box_size1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_1), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  PyList_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_4));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_2));
  PyList_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_kp_s_2));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_2));
  __pyx_t_4 = 0;
  __pyx_v_res = __pyx_t_5;
  __pyx_t_5 = 0;
 288:         for i in range(self.box_size0):
  /* "_distortion.pyx":288
 *     def __repr__(self):
 *         res = ["offset %i,%i size %i, %i" % (self.offset0, self.offset1, self.box_size0, self.box_size1), "box:"]
 *         for i in range(self.box_size0):             # <<<<<<<<<<<<<<
 *             line=""
 *             for j in range(self.box_size1):
 */
  __pyx_t_6 = __pyx_v_self->box_size0;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_i = __pyx_t_7;
 289:             line=""
    /* "_distortion.pyx":289
 *         res = ["offset %i,%i size %i, %i" % (self.offset0, self.offset1, self.box_size0, self.box_size1), "box:"]
 *         for i in range(self.box_size0):
 *             line=""             # <<<<<<<<<<<<<<
 *             for j in range(self.box_size1):
 *                 line+="\t%.3f"%self.box[i,j]
 */
    __Pyx_INCREF(((PyObject *)__pyx_kp_s_3));
    __Pyx_XDECREF(__pyx_v_line);
    __pyx_v_line = ((PyObject *)__pyx_kp_s_3);
 290:             for j in range(self.box_size1):
    /* "_distortion.pyx":290
 *         for i in range(self.box_size0):
 *             line=""
 *             for j in range(self.box_size1):             # <<<<<<<<<<<<<<
 *                 line+="\t%.3f"%self.box[i,j]
 *             res.append(line)
 */
    __pyx_t_8 = __pyx_v_self->box_size1;
    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
      __pyx_v_j = __pyx_t_9;
 291:                 line+="\t%.3f"%self.box[i,j]
      /* "_distortion.pyx":291
 *             line=""
 *             for j in range(self.box_size1):
 *                 line+="\t%.3f"%self.box[i,j]             # <<<<<<<<<<<<<<
 *             res.append(line)
 *         return os.linesep.join(res)
 */
      if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
      __pyx_t_10 = __pyx_v_i;
      __pyx_t_11 = __pyx_v_j;
      __pyx_t_12 = -1;
      if (__pyx_t_10 < 0) {
        __pyx_t_10 += __pyx_v_self->box.shape[0];
        if (unlikely(__pyx_t_10 < 0)) __pyx_t_12 = 0;
      } else if (unlikely(__pyx_t_10 >= __pyx_v_self->box.shape[0])) __pyx_t_12 = 0;
      if (__pyx_t_11 < 0) {
        __pyx_t_11 += __pyx_v_self->box.shape[1];
        if (unlikely(__pyx_t_11 < 0)) __pyx_t_12 = 1;
      } else if (unlikely(__pyx_t_11 >= __pyx_v_self->box.shape[1])) __pyx_t_12 = 1;
      if (unlikely(__pyx_t_12 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_12);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_5 = PyFloat_FromDouble((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_10 * __pyx_v_self->box.strides[0]) ) + __pyx_t_11 * __pyx_v_self->box.strides[1]) )))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_4), __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_line, ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_v_line);
      __pyx_v_line = __pyx_t_5;
      __pyx_t_5 = 0;
    }
 292:             res.append(line)
    /* "_distortion.pyx":292
 *             for j in range(self.box_size1):
 *                 line+="\t%.3f"%self.box[i,j]
 *             res.append(line)             # <<<<<<<<<<<<<<
 *         return os.linesep.join(res)
 * 
 */
    __pyx_t_13 = PyList_Append(__pyx_v_res, __pyx_v_line); if (unlikely(__pyx_t_13 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
 293:         return os.linesep.join(res)
  /* "_distortion.pyx":293
 *                 line+="\t%.3f"%self.box[i,j]
 *             res.append(line)
 *         return os.linesep.join(res)             # <<<<<<<<<<<<<<
 * 
 *     cpdef float get_box(self, int i, int j):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__os); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__linesep); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__join); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __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 = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(((PyObject *)__pyx_v_res));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_res));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_res));
  __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("_distortion.Quad.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XDECREF(__pyx_v_line);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 294: 
 295:     cpdef float get_box(self, int i, int j):
/* "_distortion.pyx":295
 *         return os.linesep.join(res)
 * 
 *     cpdef float get_box(self, int i, int j):             # <<<<<<<<<<<<<<
 *         return self.box[i,j]
 *     cpdef int get_offset0(self):
 */

static PyObject *__pyx_pw_11_distortion_4Quad_7get_box(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static float __pyx_f_11_distortion_4Quad_get_box(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, int __pyx_v_i, int __pyx_v_j, int __pyx_skip_dispatch) {
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_box", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_box); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_7get_box)) {
      __pyx_t_2 = PyInt_FromLong(__pyx_v_i); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyInt_FromLong(__pyx_v_j); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_5;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":295
 *         return os.linesep.join(res)
 * 
 *     cpdef float get_box(self, int i, int j):             # <<<<<<<<<<<<<<
 *         return self.box[i,j]
 *     cpdef int get_offset0(self):
 */

static PyObject *__pyx_pf_11_distortion_4Quad_6get_box(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, int __pyx_v_i, int __pyx_v_j) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_box", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->get_box(__pyx_v_self, __pyx_v_i, __pyx_v_j, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __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("_distortion.Quad.get_box", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 296:         return self.box[i,j]
  /* "_distortion.pyx":296
 * 
 *     cpdef float get_box(self, int i, int j):
 *         return self.box[i,j]             # <<<<<<<<<<<<<<
 *     cpdef int get_offset0(self):
 *         return self.offset0
 */
  if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
  __pyx_t_6 = __pyx_v_i;
  __pyx_t_7 = __pyx_v_j;
  __pyx_t_8 = -1;
  if (__pyx_t_6 < 0) {
    __pyx_t_6 += __pyx_v_self->box.shape[0];
    if (unlikely(__pyx_t_6 < 0)) __pyx_t_8 = 0;
  } else if (unlikely(__pyx_t_6 >= __pyx_v_self->box.shape[0])) __pyx_t_8 = 0;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_self->box.shape[1];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_8 = 1;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_self->box.shape[1])) __pyx_t_8 = 1;
  if (unlikely(__pyx_t_8 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_8);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_r = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_6 * __pyx_v_self->box.strides[0]) ) + __pyx_t_7 * __pyx_v_self->box.strides[1]) )));
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("_distortion.Quad.get_box", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_7get_box(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_7get_box(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_i;
  int __pyx_v_j;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_box (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__i,&__pyx_n_s__j,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__i)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__j)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("get_box", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_box") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_i = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_j = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_j == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_box", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Quad.get_box", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_4Quad_6get_box(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self), __pyx_v_i, __pyx_v_j);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 297:     cpdef int get_offset0(self):
/* "_distortion.pyx":297
 *     cpdef float get_box(self, int i, int j):
 *         return self.box[i,j]
 *     cpdef int get_offset0(self):             # <<<<<<<<<<<<<<
 *         return self.offset0
 *     cpdef int  get_offset1(self):
 */

static PyObject *__pyx_pw_11_distortion_4Quad_9get_offset0(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static int __pyx_f_11_distortion_4Quad_get_offset0(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_offset0", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_offset0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_9get_offset0)) {
      __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 = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":297
 *     cpdef float get_box(self, int i, int j):
 *         return self.box[i,j]
 *     cpdef int get_offset0(self):             # <<<<<<<<<<<<<<
 *         return self.offset0
 *     cpdef int  get_offset1(self):
 */

static PyObject *__pyx_pf_11_distortion_4Quad_8get_offset0(struct __pyx_obj_11_distortion_Quad *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_offset0", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromLong(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->get_offset0(__pyx_v_self, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __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("_distortion.Quad.get_offset0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 298:         return self.offset0
  /* "_distortion.pyx":298
 *         return self.box[i,j]
 *     cpdef int get_offset0(self):
 *         return self.offset0             # <<<<<<<<<<<<<<
 *     cpdef int  get_offset1(self):
 *         return self.offset1
 */
  __pyx_r = __pyx_v_self->offset0;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("_distortion.Quad.get_offset0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_9get_offset0(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_9get_offset0(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_offset0 (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_4Quad_8get_offset0(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 299:     cpdef int  get_offset1(self):
/* "_distortion.pyx":299
 *     cpdef int get_offset0(self):
 *         return self.offset0
 *     cpdef int  get_offset1(self):             # <<<<<<<<<<<<<<
 *         return self.offset1
 *     cpdef int  get_box_size0(self):
 */

static PyObject *__pyx_pw_11_distortion_4Quad_11get_offset1(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static int __pyx_f_11_distortion_4Quad_get_offset1(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_offset1", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_offset1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_11get_offset1)) {
      __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 = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":299
 *     cpdef int get_offset0(self):
 *         return self.offset0
 *     cpdef int  get_offset1(self):             # <<<<<<<<<<<<<<
 *         return self.offset1
 *     cpdef int  get_box_size0(self):
 */

static PyObject *__pyx_pf_11_distortion_4Quad_10get_offset1(struct __pyx_obj_11_distortion_Quad *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_offset1", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromLong(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->get_offset1(__pyx_v_self, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __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("_distortion.Quad.get_offset1", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 300:         return self.offset1
  /* "_distortion.pyx":300
 *         return self.offset0
 *     cpdef int  get_offset1(self):
 *         return self.offset1             # <<<<<<<<<<<<<<
 *     cpdef int  get_box_size0(self):
 *         return self.box_size0
 */
  __pyx_r = __pyx_v_self->offset1;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("_distortion.Quad.get_offset1", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_11get_offset1(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_11get_offset1(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_offset1 (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_4Quad_10get_offset1(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 301:     cpdef int  get_box_size0(self):
/* "_distortion.pyx":301
 *     cpdef int  get_offset1(self):
 *         return self.offset1
 *     cpdef int  get_box_size0(self):             # <<<<<<<<<<<<<<
 *         return self.box_size0
 *     cpdef int  get_box_size1(self):
 */

static PyObject *__pyx_pw_11_distortion_4Quad_13get_box_size0(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static int __pyx_f_11_distortion_4Quad_get_box_size0(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_box_size0", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_box_size0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_13get_box_size0)) {
      __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 = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":301
 *     cpdef int  get_offset1(self):
 *         return self.offset1
 *     cpdef int  get_box_size0(self):             # <<<<<<<<<<<<<<
 *         return self.box_size0
 *     cpdef int  get_box_size1(self):
 */

static PyObject *__pyx_pf_11_distortion_4Quad_12get_box_size0(struct __pyx_obj_11_distortion_Quad *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_box_size0", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromLong(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->get_box_size0(__pyx_v_self, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __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("_distortion.Quad.get_box_size0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 302:         return self.box_size0
  /* "_distortion.pyx":302
 *         return self.offset1
 *     cpdef int  get_box_size0(self):
 *         return self.box_size0             # <<<<<<<<<<<<<<
 *     cpdef int  get_box_size1(self):
 *         return self.box_size1
 */
  __pyx_r = __pyx_v_self->box_size0;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("_distortion.Quad.get_box_size0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_13get_box_size0(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_13get_box_size0(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_box_size0 (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_4Quad_12get_box_size0(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 303:     cpdef int  get_box_size1(self):
/* "_distortion.pyx":303
 *     cpdef int  get_box_size0(self):
 *         return self.box_size0
 *     cpdef int  get_box_size1(self):             # <<<<<<<<<<<<<<
 *         return self.box_size1
 * 
 */

static PyObject *__pyx_pw_11_distortion_4Quad_15get_box_size1(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static int __pyx_f_11_distortion_4Quad_get_box_size1(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_box_size1", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_box_size1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_15get_box_size1)) {
      __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 = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":303
 *     cpdef int  get_box_size0(self):
 *         return self.box_size0
 *     cpdef int  get_box_size1(self):             # <<<<<<<<<<<<<<
 *         return self.box_size1
 * 
 */

static PyObject *__pyx_pf_11_distortion_4Quad_14get_box_size1(struct __pyx_obj_11_distortion_Quad *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_box_size1", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromLong(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->get_box_size1(__pyx_v_self, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __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("_distortion.Quad.get_box_size1", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 304:         return self.box_size1
  /* "_distortion.pyx":304
 *         return self.box_size0
 *     cpdef int  get_box_size1(self):
 *         return self.box_size1             # <<<<<<<<<<<<<<
 * 
 *     cpdef init_slope(self):
 */
  __pyx_r = __pyx_v_self->box_size1;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("_distortion.Quad.get_box_size1", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_15get_box_size1(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_15get_box_size1(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_box_size1 (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_4Quad_14get_box_size1(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 305: 
 306:     cpdef init_slope(self):
/* "_distortion.pyx":306
 *         return self.box_size1
 * 
 *     cpdef init_slope(self):             # <<<<<<<<<<<<<<
 *         if not self.has_slope:
 *             if self.B0 != self.A0:
 */

static PyObject *__pyx_pw_11_distortion_4Quad_17init_slope(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_11_distortion_4Quad_init_slope(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init_slope", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__init_slope); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_17init_slope)) {
      __Pyx_XDECREF(__pyx_r);
      __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 = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":306
 *         return self.box_size1
 * 
 *     cpdef init_slope(self):             # <<<<<<<<<<<<<<
 *         if not self.has_slope:
 *             if self.B0 != self.A0:
 */

static PyObject *__pyx_pf_11_distortion_4Quad_16init_slope(struct __pyx_obj_11_distortion_Quad *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init_slope", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->init_slope(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __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("_distortion.Quad.init_slope", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 307:         if not self.has_slope:
  /* "_distortion.pyx":307
 * 
 *     cpdef init_slope(self):
 *         if not self.has_slope:             # <<<<<<<<<<<<<<
 *             if self.B0 != self.A0:
 *                 self.pAB = (self.B1 - self.A1) / (self.B0 - self.A0)
 */
  __pyx_t_3 = (!__pyx_v_self->has_slope);
  if (__pyx_t_3) {
 308:             if self.B0 != self.A0:
    /* "_distortion.pyx":308
 *     cpdef init_slope(self):
 *         if not self.has_slope:
 *             if self.B0 != self.A0:             # <<<<<<<<<<<<<<
 *                 self.pAB = (self.B1 - self.A1) / (self.B0 - self.A0)
 *                 self.cAB = self.A1 - self.pAB * self.A0
 */
    __pyx_t_3 = (__pyx_v_self->B0 != __pyx_v_self->A0);
    if (__pyx_t_3) {
 309:                 self.pAB = (self.B1 - self.A1) / (self.B0 - self.A0)
      /* "_distortion.pyx":309
 *         if not self.has_slope:
 *             if self.B0 != self.A0:
 *                 self.pAB = (self.B1 - self.A1) / (self.B0 - self.A0)             # <<<<<<<<<<<<<<
 *                 self.cAB = self.A1 - self.pAB * self.A0
 *             if self.C0 != self.B0:
 */
      __pyx_t_4 = (__pyx_v_self->B1 - __pyx_v_self->A1);
      __pyx_t_5 = (__pyx_v_self->B0 - __pyx_v_self->A0);
      if (unlikely(__pyx_t_5 == 0)) {
        PyErr_Format(PyExc_ZeroDivisionError, "float division");
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_v_self->pAB = (__pyx_t_4 / __pyx_t_5);
 310:                 self.cAB = self.A1 - self.pAB * self.A0
      /* "_distortion.pyx":310
 *             if self.B0 != self.A0:
 *                 self.pAB = (self.B1 - self.A1) / (self.B0 - self.A0)
 *                 self.cAB = self.A1 - self.pAB * self.A0             # <<<<<<<<<<<<<<
 *             if self.C0 != self.B0:
 *                 self.pBC = (self.C1 - self.B1) / (self.C0 - self.B0)
 */
      __pyx_v_self->cAB = (__pyx_v_self->A1 - (__pyx_v_self->pAB * __pyx_v_self->A0));
      goto __pyx_L4;
    }
    __pyx_L4:;
 311:             if self.C0 != self.B0:
    /* "_distortion.pyx":311
 *                 self.pAB = (self.B1 - self.A1) / (self.B0 - self.A0)
 *                 self.cAB = self.A1 - self.pAB * self.A0
 *             if self.C0 != self.B0:             # <<<<<<<<<<<<<<
 *                 self.pBC = (self.C1 - self.B1) / (self.C0 - self.B0)
 *                 self.cBC = self.B1 - self.pBC * self.B0
 */
    __pyx_t_3 = (__pyx_v_self->C0 != __pyx_v_self->B0);
    if (__pyx_t_3) {
 312:                 self.pBC = (self.C1 - self.B1) / (self.C0 - self.B0)
      /* "_distortion.pyx":312
 *                 self.cAB = self.A1 - self.pAB * self.A0
 *             if self.C0 != self.B0:
 *                 self.pBC = (self.C1 - self.B1) / (self.C0 - self.B0)             # <<<<<<<<<<<<<<
 *                 self.cBC = self.B1 - self.pBC * self.B0
 *             if self.D0 != self.C0:
 */
      __pyx_t_5 = (__pyx_v_self->C1 - __pyx_v_self->B1);
      __pyx_t_4 = (__pyx_v_self->C0 - __pyx_v_self->B0);
      if (unlikely(__pyx_t_4 == 0)) {
        PyErr_Format(PyExc_ZeroDivisionError, "float division");
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_v_self->pBC = (__pyx_t_5 / __pyx_t_4);
 313:                 self.cBC = self.B1 - self.pBC * self.B0
      /* "_distortion.pyx":313
 *             if self.C0 != self.B0:
 *                 self.pBC = (self.C1 - self.B1) / (self.C0 - self.B0)
 *                 self.cBC = self.B1 - self.pBC * self.B0             # <<<<<<<<<<<<<<
 *             if self.D0 != self.C0:
 *                 self.pCD = (self.D1 - self.C1) / (self.D0 - self.C0)
 */
      __pyx_v_self->cBC = (__pyx_v_self->B1 - (__pyx_v_self->pBC * __pyx_v_self->B0));
      goto __pyx_L5;
    }
    __pyx_L5:;
 314:             if self.D0 != self.C0:
    /* "_distortion.pyx":314
 *                 self.pBC = (self.C1 - self.B1) / (self.C0 - self.B0)
 *                 self.cBC = self.B1 - self.pBC * self.B0
 *             if self.D0 != self.C0:             # <<<<<<<<<<<<<<
 *                 self.pCD = (self.D1 - self.C1) / (self.D0 - self.C0)
 *                 self.cCD = self.C1 - self.pCD * self.C0
 */
    __pyx_t_3 = (__pyx_v_self->D0 != __pyx_v_self->C0);
    if (__pyx_t_3) {
 315:                 self.pCD = (self.D1 - self.C1) / (self.D0 - self.C0)
      /* "_distortion.pyx":315
 *                 self.cBC = self.B1 - self.pBC * self.B0
 *             if self.D0 != self.C0:
 *                 self.pCD = (self.D1 - self.C1) / (self.D0 - self.C0)             # <<<<<<<<<<<<<<
 *                 self.cCD = self.C1 - self.pCD * self.C0
 *             if self.A0 != self.D0:
 */
      __pyx_t_4 = (__pyx_v_self->D1 - __pyx_v_self->C1);
      __pyx_t_5 = (__pyx_v_self->D0 - __pyx_v_self->C0);
      if (unlikely(__pyx_t_5 == 0)) {
        PyErr_Format(PyExc_ZeroDivisionError, "float division");
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_v_self->pCD = (__pyx_t_4 / __pyx_t_5);
 316:                 self.cCD = self.C1 - self.pCD * self.C0
      /* "_distortion.pyx":316
 *             if self.D0 != self.C0:
 *                 self.pCD = (self.D1 - self.C1) / (self.D0 - self.C0)
 *                 self.cCD = self.C1 - self.pCD * self.C0             # <<<<<<<<<<<<<<
 *             if self.A0 != self.D0:
 *                 self.pDA = (self.A1 - self.D1) / (self.A0 - self.D0)
 */
      __pyx_v_self->cCD = (__pyx_v_self->C1 - (__pyx_v_self->pCD * __pyx_v_self->C0));
      goto __pyx_L6;
    }
    __pyx_L6:;
 317:             if self.A0 != self.D0:
    /* "_distortion.pyx":317
 *                 self.pCD = (self.D1 - self.C1) / (self.D0 - self.C0)
 *                 self.cCD = self.C1 - self.pCD * self.C0
 *             if self.A0 != self.D0:             # <<<<<<<<<<<<<<
 *                 self.pDA = (self.A1 - self.D1) / (self.A0 - self.D0)
 *                 self.cDA = self.D1 - self.pDA * self.D0
 */
    __pyx_t_3 = (__pyx_v_self->A0 != __pyx_v_self->D0);
    if (__pyx_t_3) {
 318:                 self.pDA = (self.A1 - self.D1) / (self.A0 - self.D0)
      /* "_distortion.pyx":318
 *                 self.cCD = self.C1 - self.pCD * self.C0
 *             if self.A0 != self.D0:
 *                 self.pDA = (self.A1 - self.D1) / (self.A0 - self.D0)             # <<<<<<<<<<<<<<
 *                 self.cDA = self.D1 - self.pDA * self.D0
 *             self.has_slope = 1
 */
      __pyx_t_5 = (__pyx_v_self->A1 - __pyx_v_self->D1);
      __pyx_t_4 = (__pyx_v_self->A0 - __pyx_v_self->D0);
      if (unlikely(__pyx_t_4 == 0)) {
        PyErr_Format(PyExc_ZeroDivisionError, "float division");
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_v_self->pDA = (__pyx_t_5 / __pyx_t_4);
 319:                 self.cDA = self.D1 - self.pDA * self.D0
      /* "_distortion.pyx":319
 *             if self.A0 != self.D0:
 *                 self.pDA = (self.A1 - self.D1) / (self.A0 - self.D0)
 *                 self.cDA = self.D1 - self.pDA * self.D0             # <<<<<<<<<<<<<<
 *             self.has_slope = 1
 * 
 */
      __pyx_v_self->cDA = (__pyx_v_self->D1 - (__pyx_v_self->pDA * __pyx_v_self->D0));
      goto __pyx_L7;
    }
    __pyx_L7:;
 320:             self.has_slope = 1
    /* "_distortion.pyx":320
 *                 self.pDA = (self.A1 - self.D1) / (self.A0 - self.D0)
 *                 self.cDA = self.D1 - self.pDA * self.D0
 *             self.has_slope = 1             # <<<<<<<<<<<<<<
 * 
 *     cpdef float calc_area_AB(self, float I1,float I2):
 */
    __pyx_v_self->has_slope = 1;
    goto __pyx_L3;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("_distortion.Quad.init_slope", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_17init_slope(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_17init_slope(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init_slope (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_4Quad_16init_slope(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 321: 
 322:     cpdef float calc_area_AB(self, float I1,float I2):
/* "_distortion.pyx":322
 *             self.has_slope = 1
 * 
 *     cpdef float calc_area_AB(self, float I1,float I2):             # <<<<<<<<<<<<<<
 *         if self.B0 != self.A0:
 *             return 0.5 * (I2 - I1) * (self.pAB * (I2 + I1) + 2 * self.cAB)
 */

static PyObject *__pyx_pw_11_distortion_4Quad_19calc_area_AB(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static float __pyx_f_11_distortion_4Quad_calc_area_AB(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, float __pyx_v_I1, float __pyx_v_I2, int __pyx_skip_dispatch) {
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_AB", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__calc_area_AB); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_19calc_area_AB)) {
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_I1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_I2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_5;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":322
 *             self.has_slope = 1
 * 
 *     cpdef float calc_area_AB(self, float I1,float I2):             # <<<<<<<<<<<<<<
 *         if self.B0 != self.A0:
 *             return 0.5 * (I2 - I1) * (self.pAB * (I2 + I1) + 2 * self.cAB)
 */

static PyObject *__pyx_pf_11_distortion_4Quad_18calc_area_AB(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, float __pyx_v_I1, float __pyx_v_I2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_AB", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->calc_area_AB(__pyx_v_self, __pyx_v_I1, __pyx_v_I2, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __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("_distortion.Quad.calc_area_AB", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 323:         if self.B0 != self.A0:
  /* "_distortion.pyx":323
 * 
 *     cpdef float calc_area_AB(self, float I1,float I2):
 *         if self.B0 != self.A0:             # <<<<<<<<<<<<<<
 *             return 0.5 * (I2 - I1) * (self.pAB * (I2 + I1) + 2 * self.cAB)
 *         else:
 */
  __pyx_t_6 = (__pyx_v_self->B0 != __pyx_v_self->A0);
  if (__pyx_t_6) {
 324:             return 0.5 * (I2 - I1) * (self.pAB * (I2 + I1) + 2 * self.cAB)
    /* "_distortion.pyx":324
 *     cpdef float calc_area_AB(self, float I1,float I2):
 *         if self.B0 != self.A0:
 *             return 0.5 * (I2 - I1) * (self.pAB * (I2 + I1) + 2 * self.cAB)             # <<<<<<<<<<<<<<
 *         else:
 *             return 0.0
 */
    __pyx_r = ((0.5 * (__pyx_v_I2 - __pyx_v_I1)) * ((__pyx_v_self->pAB * (__pyx_v_I2 + __pyx_v_I1)) + (2.0 * __pyx_v_self->cAB)));
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {
 325:         else:
 326:             return 0.0
    /* "_distortion.pyx":326
 *             return 0.5 * (I2 - I1) * (self.pAB * (I2 + I1) + 2 * self.cAB)
 *         else:
 *             return 0.0             # <<<<<<<<<<<<<<
 * 
 *     cpdef float calc_area_BC(self, float J1, float J2):
 */
    __pyx_r = 0.0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("_distortion.Quad.calc_area_AB", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_19calc_area_AB(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_19calc_area_AB(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_I1;
  float __pyx_v_I2;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_AB (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__I1,&__pyx_n_s__I2,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__I1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__I2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("calc_area_AB", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calc_area_AB") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_I1 = __pyx_PyFloat_AsFloat(values[0]); if (unlikely((__pyx_v_I1 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_I2 = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_I2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("calc_area_AB", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Quad.calc_area_AB", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_4Quad_18calc_area_AB(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self), __pyx_v_I1, __pyx_v_I2);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 327: 
 328:     cpdef float calc_area_BC(self, float J1, float J2):
/* "_distortion.pyx":328
 *             return 0.0
 * 
 *     cpdef float calc_area_BC(self, float J1, float J2):             # <<<<<<<<<<<<<<
 *         if self.B0 != self.C0:
 *             return 0.5 * (J2 - J1) * (self.pBC * (J1 + J2) + 2 * self.cBC)
 */

static PyObject *__pyx_pw_11_distortion_4Quad_21calc_area_BC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static float __pyx_f_11_distortion_4Quad_calc_area_BC(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, float __pyx_v_J1, float __pyx_v_J2, int __pyx_skip_dispatch) {
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_BC", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__calc_area_BC); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_21calc_area_BC)) {
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_J1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_J2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_5;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":328
 *             return 0.0
 * 
 *     cpdef float calc_area_BC(self, float J1, float J2):             # <<<<<<<<<<<<<<
 *         if self.B0 != self.C0:
 *             return 0.5 * (J2 - J1) * (self.pBC * (J1 + J2) + 2 * self.cBC)
 */

static PyObject *__pyx_pf_11_distortion_4Quad_20calc_area_BC(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, float __pyx_v_J1, float __pyx_v_J2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_BC", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->calc_area_BC(__pyx_v_self, __pyx_v_J1, __pyx_v_J2, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __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("_distortion.Quad.calc_area_BC", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 329:         if self.B0 != self.C0:
  /* "_distortion.pyx":329
 * 
 *     cpdef float calc_area_BC(self, float J1, float J2):
 *         if self.B0 != self.C0:             # <<<<<<<<<<<<<<
 *             return 0.5 * (J2 - J1) * (self.pBC * (J1 + J2) + 2 * self.cBC)
 *         else:
 */
  __pyx_t_6 = (__pyx_v_self->B0 != __pyx_v_self->C0);
  if (__pyx_t_6) {
 330:             return 0.5 * (J2 - J1) * (self.pBC * (J1 + J2) + 2 * self.cBC)
    /* "_distortion.pyx":330
 *     cpdef float calc_area_BC(self, float J1, float J2):
 *         if self.B0 != self.C0:
 *             return 0.5 * (J2 - J1) * (self.pBC * (J1 + J2) + 2 * self.cBC)             # <<<<<<<<<<<<<<
 *         else:
 *             return 0.0
 */
    __pyx_r = ((0.5 * (__pyx_v_J2 - __pyx_v_J1)) * ((__pyx_v_self->pBC * (__pyx_v_J1 + __pyx_v_J2)) + (2.0 * __pyx_v_self->cBC)));
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {
 331:         else:
 332:             return 0.0
    /* "_distortion.pyx":332
 *             return 0.5 * (J2 - J1) * (self.pBC * (J1 + J2) + 2 * self.cBC)
 *         else:
 *             return 0.0             # <<<<<<<<<<<<<<
 * 
 *     cpdef float calc_area_CD(self, float K1, float K2):
 */
    __pyx_r = 0.0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("_distortion.Quad.calc_area_BC", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_21calc_area_BC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_21calc_area_BC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_J1;
  float __pyx_v_J2;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_BC (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__J1,&__pyx_n_s__J2,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__J1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__J2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("calc_area_BC", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calc_area_BC") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_J1 = __pyx_PyFloat_AsFloat(values[0]); if (unlikely((__pyx_v_J1 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_J2 = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_J2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("calc_area_BC", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Quad.calc_area_BC", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_4Quad_20calc_area_BC(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self), __pyx_v_J1, __pyx_v_J2);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 333: 
 334:     cpdef float calc_area_CD(self, float K1, float K2):
/* "_distortion.pyx":334
 *             return 0.0
 * 
 *     cpdef float calc_area_CD(self, float K1, float K2):             # <<<<<<<<<<<<<<
 *         if self.C0 != self.D0:
 *             return 0.5 * (K2 - K1) * (self.pCD * (K2 + K1) + 2 * self.cCD)
 */

static PyObject *__pyx_pw_11_distortion_4Quad_23calc_area_CD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static float __pyx_f_11_distortion_4Quad_calc_area_CD(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, float __pyx_v_K1, float __pyx_v_K2, int __pyx_skip_dispatch) {
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_CD", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__calc_area_CD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_23calc_area_CD)) {
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_K1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_K2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_5;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":334
 *             return 0.0
 * 
 *     cpdef float calc_area_CD(self, float K1, float K2):             # <<<<<<<<<<<<<<
 *         if self.C0 != self.D0:
 *             return 0.5 * (K2 - K1) * (self.pCD * (K2 + K1) + 2 * self.cCD)
 */

static PyObject *__pyx_pf_11_distortion_4Quad_22calc_area_CD(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, float __pyx_v_K1, float __pyx_v_K2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_CD", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->calc_area_CD(__pyx_v_self, __pyx_v_K1, __pyx_v_K2, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __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("_distortion.Quad.calc_area_CD", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 335:         if self.C0 != self.D0:
  /* "_distortion.pyx":335
 * 
 *     cpdef float calc_area_CD(self, float K1, float K2):
 *         if self.C0 != self.D0:             # <<<<<<<<<<<<<<
 *             return 0.5 * (K2 - K1) * (self.pCD * (K2 + K1) + 2 * self.cCD)
 *         else:
 */
  __pyx_t_6 = (__pyx_v_self->C0 != __pyx_v_self->D0);
  if (__pyx_t_6) {
 336:             return 0.5 * (K2 - K1) * (self.pCD * (K2 + K1) + 2 * self.cCD)
    /* "_distortion.pyx":336
 *     cpdef float calc_area_CD(self, float K1, float K2):
 *         if self.C0 != self.D0:
 *             return 0.5 * (K2 - K1) * (self.pCD * (K2 + K1) + 2 * self.cCD)             # <<<<<<<<<<<<<<
 *         else:
 *             return 0.0
 */
    __pyx_r = ((0.5 * (__pyx_v_K2 - __pyx_v_K1)) * ((__pyx_v_self->pCD * (__pyx_v_K2 + __pyx_v_K1)) + (2.0 * __pyx_v_self->cCD)));
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {
 337:         else:
 338:             return 0.0
    /* "_distortion.pyx":338
 *             return 0.5 * (K2 - K1) * (self.pCD * (K2 + K1) + 2 * self.cCD)
 *         else:
 *             return 0.0             # <<<<<<<<<<<<<<
 * 
 *     cpdef float calc_area_DA(self,float L1,float L2):
 */
    __pyx_r = 0.0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("_distortion.Quad.calc_area_CD", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_23calc_area_CD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_23calc_area_CD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_K1;
  float __pyx_v_K2;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_CD (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__K1,&__pyx_n_s__K2,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__K1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__K2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("calc_area_CD", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calc_area_CD") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_K1 = __pyx_PyFloat_AsFloat(values[0]); if (unlikely((__pyx_v_K1 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_K2 = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_K2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("calc_area_CD", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Quad.calc_area_CD", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_4Quad_22calc_area_CD(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self), __pyx_v_K1, __pyx_v_K2);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 339: 
 340:     cpdef float calc_area_DA(self,float L1,float L2):
/* "_distortion.pyx":340
 *             return 0.0
 * 
 *     cpdef float calc_area_DA(self,float L1,float L2):             # <<<<<<<<<<<<<<
 *         if self.D0 != self.A0:
 *             return 0.5 * (L2 - L1) * (self.pDA * (L1 + L2) + 2 * self.cDA)
 */

static PyObject *__pyx_pw_11_distortion_4Quad_25calc_area_DA(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static float __pyx_f_11_distortion_4Quad_calc_area_DA(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, float __pyx_v_L1, float __pyx_v_L2, int __pyx_skip_dispatch) {
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_DA", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__calc_area_DA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_25calc_area_DA)) {
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_L1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_L2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_5;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":340
 *             return 0.0
 * 
 *     cpdef float calc_area_DA(self,float L1,float L2):             # <<<<<<<<<<<<<<
 *         if self.D0 != self.A0:
 *             return 0.5 * (L2 - L1) * (self.pDA * (L1 + L2) + 2 * self.cDA)
 */

static PyObject *__pyx_pf_11_distortion_4Quad_24calc_area_DA(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, float __pyx_v_L1, float __pyx_v_L2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_DA", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->calc_area_DA(__pyx_v_self, __pyx_v_L1, __pyx_v_L2, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __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("_distortion.Quad.calc_area_DA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 341:         if self.D0 != self.A0:
  /* "_distortion.pyx":341
 * 
 *     cpdef float calc_area_DA(self,float L1,float L2):
 *         if self.D0 != self.A0:             # <<<<<<<<<<<<<<
 *             return 0.5 * (L2 - L1) * (self.pDA * (L1 + L2) + 2 * self.cDA)
 *         else:
 */
  __pyx_t_6 = (__pyx_v_self->D0 != __pyx_v_self->A0);
  if (__pyx_t_6) {
 342:             return 0.5 * (L2 - L1) * (self.pDA * (L1 + L2) + 2 * self.cDA)
    /* "_distortion.pyx":342
 *     cpdef float calc_area_DA(self,float L1,float L2):
 *         if self.D0 != self.A0:
 *             return 0.5 * (L2 - L1) * (self.pDA * (L1 + L2) + 2 * self.cDA)             # <<<<<<<<<<<<<<
 *         else:
 *             return 0.0
 */
    __pyx_r = ((0.5 * (__pyx_v_L2 - __pyx_v_L1)) * ((__pyx_v_self->pDA * (__pyx_v_L1 + __pyx_v_L2)) + (2.0 * __pyx_v_self->cDA)));
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {
 343:         else:
 344:             return 0.0
    /* "_distortion.pyx":344
 *             return 0.5 * (L2 - L1) * (self.pDA * (L1 + L2) + 2 * self.cDA)
 *         else:
 *             return 0.0             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_r = 0.0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("_distortion.Quad.calc_area_DA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_25calc_area_DA(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_25calc_area_DA(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_L1;
  float __pyx_v_L2;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area_DA (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__L1,&__pyx_n_s__L2,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__L1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__L2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("calc_area_DA", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calc_area_DA") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_L1 = __pyx_PyFloat_AsFloat(values[0]); if (unlikely((__pyx_v_L1 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_L2 = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_L2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("calc_area_DA", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Quad.calc_area_DA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_4Quad_24calc_area_DA(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self), __pyx_v_L1, __pyx_v_L2);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 345: 
 346: 
 347: 
 348:     cpdef float calc_area(self):
/* "_distortion.pyx":348
 * 
 * 
 *     cpdef float calc_area(self):             # <<<<<<<<<<<<<<
 *         if not self.has_area:
 *             self.area = 0.5*((self.C0 - self.A0)*(self.D1 - self.B1)-(self.C1 - self.A1)*(self.D0 - self.B0))
 */

static PyObject *__pyx_pw_11_distortion_4Quad_27calc_area(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static float __pyx_f_11_distortion_4Quad_calc_area(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, int __pyx_skip_dispatch) {
  float __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overriden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__calc_area); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_11_distortion_4Quad_27calc_area)) {
      __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 = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_2); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_3;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

/* "_distortion.pyx":348
 * 
 * 
 *     cpdef float calc_area(self):             # <<<<<<<<<<<<<<
 *         if not self.has_area:
 *             self.area = 0.5*((self.C0 - self.A0)*(self.D1 - self.B1)-(self.C1 - self.A1)*(self.D0 - self.B0))
 */

static PyObject *__pyx_pf_11_distortion_4Quad_26calc_area(struct __pyx_obj_11_distortion_Quad *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->calc_area(__pyx_v_self, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __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("_distortion.Quad.calc_area", __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_11_distortion_4Quad_29populate_box(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_29populate_box(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("populate_box (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_4Quad_28populate_box(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 349:         if not self.has_area:
  /* "_distortion.pyx":349
 * 
 *     cpdef float calc_area(self):
 *         if not self.has_area:             # <<<<<<<<<<<<<<
 *             self.area = 0.5*((self.C0 - self.A0)*(self.D1 - self.B1)-(self.C1 - self.A1)*(self.D0 - self.B0))
 *             self.has_area = 1
 */
  __pyx_t_4 = (!__pyx_v_self->has_area);
  if (__pyx_t_4) {
 350:             self.area = 0.5*((self.C0 - self.A0)*(self.D1 - self.B1)-(self.C1 - self.A1)*(self.D0 - self.B0))
    /* "_distortion.pyx":350
 *     cpdef float calc_area(self):
 *         if not self.has_area:
 *             self.area = 0.5*((self.C0 - self.A0)*(self.D1 - self.B1)-(self.C1 - self.A1)*(self.D0 - self.B0))             # <<<<<<<<<<<<<<
 *             self.has_area = 1
 *         return self.area
 */
    __pyx_v_self->area = (0.5 * (((__pyx_v_self->C0 - __pyx_v_self->A0) * (__pyx_v_self->D1 - __pyx_v_self->B1)) - ((__pyx_v_self->C1 - __pyx_v_self->A1) * (__pyx_v_self->D0 - __pyx_v_self->B0))));
 351:             self.has_area = 1
    /* "_distortion.pyx":351
 *         if not self.has_area:
 *             self.area = 0.5*((self.C0 - self.A0)*(self.D1 - self.B1)-(self.C1 - self.A1)*(self.D0 - self.B0))
 *             self.has_area = 1             # <<<<<<<<<<<<<<
 *         return self.area
 * 
 */
    __pyx_v_self->has_area = 1;
    goto __pyx_L3;
  }
  __pyx_L3:;
 352:         return self.area
  /* "_distortion.pyx":352
 *             self.area = 0.5*((self.C0 - self.A0)*(self.D1 - self.B1)-(self.C1 - self.A1)*(self.D0 - self.B0))
 *             self.has_area = 1
 *         return self.area             # <<<<<<<<<<<<<<
 * 
 *     def populate_box(self):
 */
  __pyx_r = __pyx_v_self->area;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("_distortion.Quad.calc_area", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_4Quad_27calc_area(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_27calc_area(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_area (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_4Quad_26calc_area(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 353: 
 354:     def populate_box(self):
/* "_distortion.pyx":354
 *         return self.area
 * 
 *     def populate_box(self):             # <<<<<<<<<<<<<<
 *         cdef int i0, i1
 *         cdef float area,value
 */

static PyObject *__pyx_pf_11_distortion_4Quad_28populate_box(struct __pyx_obj_11_distortion_Quad *__pyx_v_self) {
  int __pyx_v_i0;
  int __pyx_v_i1;
  float __pyx_v_area;
  float __pyx_v_value;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("populate_box", 0);
 355:         cdef int i0, i1
 356:         cdef float area,value
 357:         if not self.has_slope:
  /* "_distortion.pyx":357
 *         cdef int i0, i1
 *         cdef float area,value
 *         if not self.has_slope:             # <<<<<<<<<<<<<<
 *             self.init_slope()
 *         integrate(self.box, self.B0, self.A0, self.pAB, self.cAB)
 */
  __pyx_t_1 = (!__pyx_v_self->has_slope);
  if (__pyx_t_1) {
 358:             self.init_slope()
    /* "_distortion.pyx":358
 *         cdef float area,value
 *         if not self.has_slope:
 *             self.init_slope()             # <<<<<<<<<<<<<<
 *         integrate(self.box, self.B0, self.A0, self.pAB, self.cAB)
 *         integrate(self.box, self.A0, self.D0, self.pDA, self.cDA)
 */
    __pyx_t_2 = ((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->init_slope(__pyx_v_self, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3;
  }
  __pyx_L3:;
 359:         integrate(self.box, self.B0, self.A0, self.pAB, self.cAB)
  /* "_distortion.pyx":359
 *         if not self.has_slope:
 *             self.init_slope()
 *         integrate(self.box, self.B0, self.A0, self.pAB, self.cAB)             # <<<<<<<<<<<<<<
 *         integrate(self.box, self.A0, self.D0, self.pDA, self.cDA)
 *         integrate(self.box, self.D0, self.C0, self.pCD, self.cCD)
 */
  if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
  __pyx_f_11_distortion_integrate(__pyx_v_self->box, __pyx_v_self->B0, __pyx_v_self->A0, __pyx_v_self->pAB, __pyx_v_self->cAB);
 360:         integrate(self.box, self.A0, self.D0, self.pDA, self.cDA)
  /* "_distortion.pyx":360
 *             self.init_slope()
 *         integrate(self.box, self.B0, self.A0, self.pAB, self.cAB)
 *         integrate(self.box, self.A0, self.D0, self.pDA, self.cDA)             # <<<<<<<<<<<<<<
 *         integrate(self.box, self.D0, self.C0, self.pCD, self.cCD)
 *         integrate(self.box, self.C0, self.B0, self.pBC, self.cBC)
 */
  if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
  __pyx_f_11_distortion_integrate(__pyx_v_self->box, __pyx_v_self->A0, __pyx_v_self->D0, __pyx_v_self->pDA, __pyx_v_self->cDA);
 361:         integrate(self.box, self.D0, self.C0, self.pCD, self.cCD)
  /* "_distortion.pyx":361
 *         integrate(self.box, self.B0, self.A0, self.pAB, self.cAB)
 *         integrate(self.box, self.A0, self.D0, self.pDA, self.cDA)
 *         integrate(self.box, self.D0, self.C0, self.pCD, self.cCD)             # <<<<<<<<<<<<<<
 *         integrate(self.box, self.C0, self.B0, self.pBC, self.cBC)
 *         area = self.calc_area()
 */
  if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
  __pyx_f_11_distortion_integrate(__pyx_v_self->box, __pyx_v_self->D0, __pyx_v_self->C0, __pyx_v_self->pCD, __pyx_v_self->cCD);
 362:         integrate(self.box, self.C0, self.B0, self.pBC, self.cBC)
  /* "_distortion.pyx":362
 *         integrate(self.box, self.A0, self.D0, self.pDA, self.cDA)
 *         integrate(self.box, self.D0, self.C0, self.pCD, self.cCD)
 *         integrate(self.box, self.C0, self.B0, self.pBC, self.cBC)             # <<<<<<<<<<<<<<
 *         area = self.calc_area()
 *         for i0 in range(self.box_size0):
 */
  if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
  __pyx_f_11_distortion_integrate(__pyx_v_self->box, __pyx_v_self->C0, __pyx_v_self->B0, __pyx_v_self->pBC, __pyx_v_self->cBC);
 363:         area = self.calc_area()
  /* "_distortion.pyx":363
 *         integrate(self.box, self.D0, self.C0, self.pCD, self.cCD)
 *         integrate(self.box, self.C0, self.B0, self.pBC, self.cBC)
 *         area = self.calc_area()             # <<<<<<<<<<<<<<
 *         for i0 in range(self.box_size0):
 *             for i1 in range(self.box_size1):
 */
  __pyx_v_area = ((struct __pyx_vtabstruct_11_distortion_Quad *)__pyx_v_self->__pyx_vtab)->calc_area(__pyx_v_self, 0);
 364:         for i0 in range(self.box_size0):
  /* "_distortion.pyx":364
 *         integrate(self.box, self.C0, self.B0, self.pBC, self.cBC)
 *         area = self.calc_area()
 *         for i0 in range(self.box_size0):             # <<<<<<<<<<<<<<
 *             for i1 in range(self.box_size1):
 *                 value = self.box[i0,i1] / area
 */
  __pyx_t_3 = __pyx_v_self->box_size0;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i0 = __pyx_t_4;
 365:             for i1 in range(self.box_size1):
    /* "_distortion.pyx":365
 *         area = self.calc_area()
 *         for i0 in range(self.box_size0):
 *             for i1 in range(self.box_size1):             # <<<<<<<<<<<<<<
 *                 value = self.box[i0,i1] / area
 *                 self.box[i0,i1] = value
 */
    __pyx_t_5 = __pyx_v_self->box_size1;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_i1 = __pyx_t_6;
 366:                 value = self.box[i0,i1] / area
      /* "_distortion.pyx":366
 *         for i0 in range(self.box_size0):
 *             for i1 in range(self.box_size1):
 *                 value = self.box[i0,i1] / area             # <<<<<<<<<<<<<<
 *                 self.box[i0,i1] = value
 *                 if value < 0.0:
 */
      if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
      __pyx_t_7 = __pyx_v_i0;
      __pyx_t_8 = __pyx_v_i1;
      __pyx_t_9 = -1;
      if (__pyx_t_7 < 0) {
        __pyx_t_7 += __pyx_v_self->box.shape[0];
        if (unlikely(__pyx_t_7 < 0)) __pyx_t_9 = 0;
      } else if (unlikely(__pyx_t_7 >= __pyx_v_self->box.shape[0])) __pyx_t_9 = 0;
      if (__pyx_t_8 < 0) {
        __pyx_t_8 += __pyx_v_self->box.shape[1];
        if (unlikely(__pyx_t_8 < 0)) __pyx_t_9 = 1;
      } else if (unlikely(__pyx_t_8 >= __pyx_v_self->box.shape[1])) __pyx_t_9 = 1;
      if (unlikely(__pyx_t_9 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_9);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_t_10 = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_7 * __pyx_v_self->box.strides[0]) ) + __pyx_t_8 * __pyx_v_self->box.strides[1]) )));
      if (unlikely(__pyx_v_area == 0)) {
        PyErr_Format(PyExc_ZeroDivisionError, "float division");
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      __pyx_v_value = (__pyx_t_10 / __pyx_v_area);
 367:                 self.box[i0,i1] = value
      /* "_distortion.pyx":367
 *             for i1 in range(self.box_size1):
 *                 value = self.box[i0,i1] / area
 *                 self.box[i0,i1] = value             # <<<<<<<<<<<<<<
 *                 if value < 0.0:
 *                     print self.box
 */
      if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
      __pyx_t_9 = __pyx_v_i0;
      __pyx_t_11 = __pyx_v_i1;
      __pyx_t_12 = -1;
      if (__pyx_t_9 < 0) {
        __pyx_t_9 += __pyx_v_self->box.shape[0];
        if (unlikely(__pyx_t_9 < 0)) __pyx_t_12 = 0;
      } else if (unlikely(__pyx_t_9 >= __pyx_v_self->box.shape[0])) __pyx_t_12 = 0;
      if (__pyx_t_11 < 0) {
        __pyx_t_11 += __pyx_v_self->box.shape[1];
        if (unlikely(__pyx_t_11 < 0)) __pyx_t_12 = 1;
      } else if (unlikely(__pyx_t_11 >= __pyx_v_self->box.shape[1])) __pyx_t_12 = 1;
      if (unlikely(__pyx_t_12 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_12);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      }
      *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_9 * __pyx_v_self->box.strides[0]) ) + __pyx_t_11 * __pyx_v_self->box.strides[1]) )) = __pyx_v_value;
 368:                 if value < 0.0:
      /* "_distortion.pyx":368
 *                 value = self.box[i0,i1] / area
 *                 self.box[i0,i1] = value
 *                 if value < 0.0:             # <<<<<<<<<<<<<<
 *                     print self.box
 *                     self.box[:, :] = 0
 */
      __pyx_t_1 = (__pyx_v_value < 0.0);
      if (__pyx_t_1) {
 369:                     print self.box
        /* "_distortion.pyx":369
 *                 self.box[i0,i1] = value
 *                 if value < 0.0:
 *                     print self.box             # <<<<<<<<<<<<<<
 *                     self.box[:, :] = 0
 *                     print "AB"
 */
        if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
        __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_self->box, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_2);
        if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 370:                     self.box[:, :] = 0
        /* "_distortion.pyx":370
 *                 if value < 0.0:
 *                     print self.box
 *                     self.box[:, :] = 0             # <<<<<<<<<<<<<<
 *                     print "AB"
 *                     self.integrate(self.B0, self.A0, self.pAB, self.cAB)
 */
        if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
        __pyx_t_13 = __pyx_v_self->box;
        __PYX_INC_MEMVIEW(&__pyx_t_13, 1);
        __pyx_t_12 = -1;
        __pyx_t_14.data = __pyx_t_13.data;
        __pyx_t_14.memview = __pyx_t_13.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_14, 0);
        __pyx_t_14.shape[0] = __pyx_t_13.shape[0];
__pyx_t_14.strides[0] = __pyx_t_13.strides[0];
    __pyx_t_14.suboffsets[0] = -1;

__pyx_t_14.shape[1] = __pyx_t_13.shape[1];
__pyx_t_14.strides[1] = __pyx_t_13.strides[1];
    __pyx_t_14.suboffsets[1] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
        {
            float __pyx_temp_scalar = 0.0;
            {
                Py_ssize_t __pyx_temp_extent_0 = __pyx_t_14.shape[0];
                Py_ssize_t __pyx_temp_stride_0 = __pyx_t_14.strides[0];
                char *__pyx_temp_pointer_0;
                Py_ssize_t __pyx_temp_idx_0;
                Py_ssize_t __pyx_temp_extent_1 = __pyx_t_14.shape[1];
                Py_ssize_t __pyx_temp_stride_1 = __pyx_t_14.strides[1];
                char *__pyx_temp_pointer_1;
                Py_ssize_t __pyx_temp_idx_1;
                __pyx_temp_pointer_0 = __pyx_t_14.data;
                for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {
                  __pyx_temp_pointer_1 = __pyx_temp_pointer_0;
                  for (__pyx_temp_idx_1 = 0; __pyx_temp_idx_1 < __pyx_temp_extent_1; __pyx_temp_idx_1++) {
                    *((float *) __pyx_temp_pointer_1) = __pyx_temp_scalar;
                    __pyx_temp_pointer_1 += __pyx_temp_stride_1;
                  }
                  __pyx_temp_pointer_0 += __pyx_temp_stride_0;
                }
            }
        }
        __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
 371:                     print "AB"
        /* "_distortion.pyx":371
 *                     print self.box
 *                     self.box[:, :] = 0
 *                     print "AB"             # <<<<<<<<<<<<<<
 *                     self.integrate(self.B0, self.A0, self.pAB, self.cAB)
 *                     print self.box
 */
        if (__Pyx_PrintOne(0, ((PyObject *)__pyx_n_s__AB)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 372:                     self.integrate(self.B0, self.A0, self.pAB, self.cAB)
        /* "_distortion.pyx":372
 *                     self.box[:, :] = 0
 *                     print "AB"
 *                     self.integrate(self.B0, self.A0, self.pAB, self.cAB)             # <<<<<<<<<<<<<<
 *                     print self.box
 *                     self.box[:, :] = 0
 */
        __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__integrate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_self->B0); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_16 = PyFloat_FromDouble(__pyx_v_self->A0); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = PyFloat_FromDouble(__pyx_v_self->pAB); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_18 = PyFloat_FromDouble(__pyx_v_self->cAB); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_19 = PyTuple_New(4); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_19);
        PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_t_16);
        __Pyx_GIVEREF(__pyx_t_16);
        PyTuple_SET_ITEM(__pyx_t_19, 2, __pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_19, 3, __pyx_t_18);
        __Pyx_GIVEREF(__pyx_t_18);
        __pyx_t_15 = 0;
        __pyx_t_16 = 0;
        __pyx_t_17 = 0;
        __pyx_t_18 = 0;
        __pyx_t_18 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_19), NULL); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(((PyObject *)__pyx_t_19)); __pyx_t_19 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 373:                     print self.box
        /* "_distortion.pyx":373
 *                     print "AB"
 *                     self.integrate(self.B0, self.A0, self.pAB, self.cAB)
 *                     print self.box             # <<<<<<<<<<<<<<
 *                     self.box[:, :] = 0
 *                     print "DA"
 */
        if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
        __pyx_t_18 = __pyx_memoryview_fromslice(__pyx_v_self->box, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_18);
        if (__Pyx_PrintOne(0, __pyx_t_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 374:                     self.box[:, :] = 0
        /* "_distortion.pyx":374
 *                     self.integrate(self.B0, self.A0, self.pAB, self.cAB)
 *                     print self.box
 *                     self.box[:, :] = 0             # <<<<<<<<<<<<<<
 *                     print "DA"
 *                     self.integrate(self.A0, self.D0, self.pDA, self.cDA)
 */
        if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
        __pyx_t_13 = __pyx_v_self->box;
        __PYX_INC_MEMVIEW(&__pyx_t_13, 1);
        __pyx_t_12 = -1;
        __pyx_t_20.data = __pyx_t_13.data;
        __pyx_t_20.memview = __pyx_t_13.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_20, 0);
        __pyx_t_20.shape[0] = __pyx_t_13.shape[0];
__pyx_t_20.strides[0] = __pyx_t_13.strides[0];
    __pyx_t_20.suboffsets[0] = -1;

__pyx_t_20.shape[1] = __pyx_t_13.shape[1];
__pyx_t_20.strides[1] = __pyx_t_13.strides[1];
    __pyx_t_20.suboffsets[1] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
        {
            float __pyx_temp_scalar = 0.0;
            {
                Py_ssize_t __pyx_temp_extent_0 = __pyx_t_20.shape[0];
                Py_ssize_t __pyx_temp_stride_0 = __pyx_t_20.strides[0];
                char *__pyx_temp_pointer_0;
                Py_ssize_t __pyx_temp_idx_0;
                Py_ssize_t __pyx_temp_extent_1 = __pyx_t_20.shape[1];
                Py_ssize_t __pyx_temp_stride_1 = __pyx_t_20.strides[1];
                char *__pyx_temp_pointer_1;
                Py_ssize_t __pyx_temp_idx_1;
                __pyx_temp_pointer_0 = __pyx_t_20.data;
                for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {
                  __pyx_temp_pointer_1 = __pyx_temp_pointer_0;
                  for (__pyx_temp_idx_1 = 0; __pyx_temp_idx_1 < __pyx_temp_extent_1; __pyx_temp_idx_1++) {
                    *((float *) __pyx_temp_pointer_1) = __pyx_temp_scalar;
                    __pyx_temp_pointer_1 += __pyx_temp_stride_1;
                  }
                  __pyx_temp_pointer_0 += __pyx_temp_stride_0;
                }
            }
        }
        __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
 375:                     print "DA"
        /* "_distortion.pyx":375
 *                     print self.box
 *                     self.box[:, :] = 0
 *                     print "DA"             # <<<<<<<<<<<<<<
 *                     self.integrate(self.A0, self.D0, self.pDA, self.cDA)
 *                     print self.box
 */
        if (__Pyx_PrintOne(0, ((PyObject *)__pyx_n_s__DA)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 376:                     self.integrate(self.A0, self.D0, self.pDA, self.cDA)
        /* "_distortion.pyx":376
 *                     self.box[:, :] = 0
 *                     print "DA"
 *                     self.integrate(self.A0, self.D0, self.pDA, self.cDA)             # <<<<<<<<<<<<<<
 *                     print self.box
 *                     self.box[:, :] = 0
 */
        __pyx_t_18 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__integrate); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_19 = PyFloat_FromDouble(__pyx_v_self->A0); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->D0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_17 = PyFloat_FromDouble(__pyx_v_self->pDA); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_16 = PyFloat_FromDouble(__pyx_v_self->cDA); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_19);
        __Pyx_GIVEREF(__pyx_t_19);
        PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_t_16);
        __Pyx_GIVEREF(__pyx_t_16);
        __pyx_t_19 = 0;
        __pyx_t_2 = 0;
        __pyx_t_17 = 0;
        __pyx_t_16 = 0;
        __pyx_t_16 = PyObject_Call(__pyx_t_18, ((PyObject *)__pyx_t_15), NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(((PyObject *)__pyx_t_15)); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 377:                     print self.box
        /* "_distortion.pyx":377
 *                     print "DA"
 *                     self.integrate(self.A0, self.D0, self.pDA, self.cDA)
 *                     print self.box             # <<<<<<<<<<<<<<
 *                     self.box[:, :] = 0
 *                     print "CD"
 */
        if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
        __pyx_t_16 = __pyx_memoryview_fromslice(__pyx_v_self->box, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_16);
        if (__Pyx_PrintOne(0, __pyx_t_16) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 378:                     self.box[:, :] = 0
        /* "_distortion.pyx":378
 *                     self.integrate(self.A0, self.D0, self.pDA, self.cDA)
 *                     print self.box
 *                     self.box[:, :] = 0             # <<<<<<<<<<<<<<
 *                     print "CD"
 *                     self.integrate(self.D0, self.C0, self.pCD, self.cCD)
 */
        if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
        __pyx_t_13 = __pyx_v_self->box;
        __PYX_INC_MEMVIEW(&__pyx_t_13, 1);
        __pyx_t_12 = -1;
        __pyx_t_21.data = __pyx_t_13.data;
        __pyx_t_21.memview = __pyx_t_13.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_21, 0);
        __pyx_t_21.shape[0] = __pyx_t_13.shape[0];
__pyx_t_21.strides[0] = __pyx_t_13.strides[0];
    __pyx_t_21.suboffsets[0] = -1;

__pyx_t_21.shape[1] = __pyx_t_13.shape[1];
__pyx_t_21.strides[1] = __pyx_t_13.strides[1];
    __pyx_t_21.suboffsets[1] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
        {
            float __pyx_temp_scalar = 0.0;
            {
                Py_ssize_t __pyx_temp_extent_0 = __pyx_t_21.shape[0];
                Py_ssize_t __pyx_temp_stride_0 = __pyx_t_21.strides[0];
                char *__pyx_temp_pointer_0;
                Py_ssize_t __pyx_temp_idx_0;
                Py_ssize_t __pyx_temp_extent_1 = __pyx_t_21.shape[1];
                Py_ssize_t __pyx_temp_stride_1 = __pyx_t_21.strides[1];
                char *__pyx_temp_pointer_1;
                Py_ssize_t __pyx_temp_idx_1;
                __pyx_temp_pointer_0 = __pyx_t_21.data;
                for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {
                  __pyx_temp_pointer_1 = __pyx_temp_pointer_0;
                  for (__pyx_temp_idx_1 = 0; __pyx_temp_idx_1 < __pyx_temp_extent_1; __pyx_temp_idx_1++) {
                    *((float *) __pyx_temp_pointer_1) = __pyx_temp_scalar;
                    __pyx_temp_pointer_1 += __pyx_temp_stride_1;
                  }
                  __pyx_temp_pointer_0 += __pyx_temp_stride_0;
                }
            }
        }
        __PYX_XDEC_MEMVIEW(&__pyx_t_21, 1);
 379:                     print "CD"
        /* "_distortion.pyx":379
 *                     print self.box
 *                     self.box[:, :] = 0
 *                     print "CD"             # <<<<<<<<<<<<<<
 *                     self.integrate(self.D0, self.C0, self.pCD, self.cCD)
 *                     print self.box
 */
        if (__Pyx_PrintOne(0, ((PyObject *)__pyx_n_s__CD)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 380:                     self.integrate(self.D0, self.C0, self.pCD, self.cCD)
        /* "_distortion.pyx":380
 *                     self.box[:, :] = 0
 *                     print "CD"
 *                     self.integrate(self.D0, self.C0, self.pCD, self.cCD)             # <<<<<<<<<<<<<<
 *                     print self.box
 *                     self.box[:, :] = 0
 */
        __pyx_t_16 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__integrate); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_self->D0); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_18 = PyFloat_FromDouble(__pyx_v_self->C0); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_17 = PyFloat_FromDouble(__pyx_v_self->pCD); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->cCD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_19 = PyTuple_New(4); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_19);
        PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_t_18);
        __Pyx_GIVEREF(__pyx_t_18);
        PyTuple_SET_ITEM(__pyx_t_19, 2, __pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_19, 3, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_2);
        __pyx_t_15 = 0;
        __pyx_t_18 = 0;
        __pyx_t_17 = 0;
        __pyx_t_2 = 0;
        __pyx_t_2 = PyObject_Call(__pyx_t_16, ((PyObject *)__pyx_t_19), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(((PyObject *)__pyx_t_19)); __pyx_t_19 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 381:                     print self.box
        /* "_distortion.pyx":381
 *                     print "CD"
 *                     self.integrate(self.D0, self.C0, self.pCD, self.cCD)
 *                     print self.box             # <<<<<<<<<<<<<<
 *                     self.box[:, :] = 0
 *                     print "BC"
 */
        if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
        __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_self->box, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_2);
        if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 382:                     self.box[:, :] = 0
        /* "_distortion.pyx":382
 *                     self.integrate(self.D0, self.C0, self.pCD, self.cCD)
 *                     print self.box
 *                     self.box[:, :] = 0             # <<<<<<<<<<<<<<
 *                     print "BC"
 *                     self.integrate(self.C0, self.B0, self.pBC, self.cBC)
 */
        if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
        __pyx_t_13 = __pyx_v_self->box;
        __PYX_INC_MEMVIEW(&__pyx_t_13, 1);
        __pyx_t_12 = -1;
        __pyx_t_22.data = __pyx_t_13.data;
        __pyx_t_22.memview = __pyx_t_13.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_22, 0);
        __pyx_t_22.shape[0] = __pyx_t_13.shape[0];
__pyx_t_22.strides[0] = __pyx_t_13.strides[0];
    __pyx_t_22.suboffsets[0] = -1;

__pyx_t_22.shape[1] = __pyx_t_13.shape[1];
__pyx_t_22.strides[1] = __pyx_t_13.strides[1];
    __pyx_t_22.suboffsets[1] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
        {
            float __pyx_temp_scalar = 0.0;
            {
                Py_ssize_t __pyx_temp_extent_0 = __pyx_t_22.shape[0];
                Py_ssize_t __pyx_temp_stride_0 = __pyx_t_22.strides[0];
                char *__pyx_temp_pointer_0;
                Py_ssize_t __pyx_temp_idx_0;
                Py_ssize_t __pyx_temp_extent_1 = __pyx_t_22.shape[1];
                Py_ssize_t __pyx_temp_stride_1 = __pyx_t_22.strides[1];
                char *__pyx_temp_pointer_1;
                Py_ssize_t __pyx_temp_idx_1;
                __pyx_temp_pointer_0 = __pyx_t_22.data;
                for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {
                  __pyx_temp_pointer_1 = __pyx_temp_pointer_0;
                  for (__pyx_temp_idx_1 = 0; __pyx_temp_idx_1 < __pyx_temp_extent_1; __pyx_temp_idx_1++) {
                    *((float *) __pyx_temp_pointer_1) = __pyx_temp_scalar;
                    __pyx_temp_pointer_1 += __pyx_temp_stride_1;
                  }
                  __pyx_temp_pointer_0 += __pyx_temp_stride_0;
                }
            }
        }
        __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
 383:                     print "BC"
        /* "_distortion.pyx":383
 *                     print self.box
 *                     self.box[:, :] = 0
 *                     print "BC"             # <<<<<<<<<<<<<<
 *                     self.integrate(self.C0, self.B0, self.pBC, self.cBC)
 *                     print self.box
 */
        if (__Pyx_PrintOne(0, ((PyObject *)__pyx_n_s__BC)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 384:                     self.integrate(self.C0, self.B0, self.pBC, self.cBC)
        /* "_distortion.pyx":384
 *                     self.box[:, :] = 0
 *                     print "BC"
 *                     self.integrate(self.C0, self.B0, self.pBC, self.cBC)             # <<<<<<<<<<<<<<
 *                     print self.box
 *                     print self
 */
        __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__integrate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_19 = PyFloat_FromDouble(__pyx_v_self->C0); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_16 = PyFloat_FromDouble(__pyx_v_self->B0); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = PyFloat_FromDouble(__pyx_v_self->pBC); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_18 = PyFloat_FromDouble(__pyx_v_self->cBC); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_19);
        __Pyx_GIVEREF(__pyx_t_19);
        PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_16);
        __Pyx_GIVEREF(__pyx_t_16);
        PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_t_18);
        __Pyx_GIVEREF(__pyx_t_18);
        __pyx_t_19 = 0;
        __pyx_t_16 = 0;
        __pyx_t_17 = 0;
        __pyx_t_18 = 0;
        __pyx_t_18 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_15), NULL); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(((PyObject *)__pyx_t_15)); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 385:                     print self.box
        /* "_distortion.pyx":385
 *                     print "BC"
 *                     self.integrate(self.C0, self.B0, self.pBC, self.cBC)
 *                     print self.box             # <<<<<<<<<<<<<<
 *                     print self
 *                     raise RuntimeError()
 */
        if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
        __pyx_t_18 = __pyx_memoryview_fromslice(__pyx_v_self->box, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_18);
        if (__Pyx_PrintOne(0, __pyx_t_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 386:                     print self
        /* "_distortion.pyx":386
 *                     self.integrate(self.C0, self.B0, self.pBC, self.cBC)
 *                     print self.box
 *                     print self             # <<<<<<<<<<<<<<
 *                     raise RuntimeError()
 * 
 */
        if (__Pyx_PrintOne(0, ((PyObject *)__pyx_v_self)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 387:                     raise RuntimeError()
        /* "_distortion.pyx":387
 *                     print self.box
 *                     print self
 *                     raise RuntimeError()             # <<<<<<<<<<<<<<
 * 
 *     def integrate(self, float start, float stop, float slope, float intercept):
 */
        __pyx_t_18 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_Raise(__pyx_t_18, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        goto __pyx_L8;
      }
      __pyx_L8:;
    }
  }

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_21, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
  __Pyx_AddTraceback("_distortion.Quad.populate_box", __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_11_distortion_4Quad_31integrate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_11_distortion_4Quad_31integrate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_start;
  float __pyx_v_stop;
  float __pyx_v_slope;
  float __pyx_v_intercept;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("integrate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__stop,&__pyx_n_s__slope,&__pyx_n_s__intercept,0};
    PyObject* values[4] = {0,0,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  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        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__start)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stop)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("integrate", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__slope)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("integrate", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  3:
        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__intercept)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("integrate", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "integrate") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_start = __pyx_PyFloat_AsFloat(values[0]); if (unlikely((__pyx_v_start == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_stop = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_stop == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_slope = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_slope == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_intercept = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_intercept == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("integrate", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Quad.integrate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_4Quad_30integrate(((struct __pyx_obj_11_distortion_Quad *)__pyx_v_self), __pyx_v_start, __pyx_v_stop, __pyx_v_slope, __pyx_v_intercept);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 388: 
 389:     def integrate(self, float start, float stop, float slope, float intercept):
/* "_distortion.pyx":389
 *                     raise RuntimeError()
 * 
 *     def integrate(self, float start, float stop, float slope, float intercept):             # <<<<<<<<<<<<<<
 *         cdef int i, h = 0
 *         cdef float P,dP, A, AA, dA, sign
 */

static PyObject *__pyx_pf_11_distortion_4Quad_30integrate(struct __pyx_obj_11_distortion_Quad *__pyx_v_self, float __pyx_v_start, float __pyx_v_stop, float __pyx_v_slope, float __pyx_v_intercept) {
  int __pyx_v_i;
  int __pyx_v_h;
  float __pyx_v_P;
  float __pyx_v_dP;
  float __pyx_v_A;
  float __pyx_v_AA;
  float __pyx_v_dA;
  float __pyx_v_sign;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("integrate", 0);
 390:         cdef int i, h = 0
  /* "_distortion.pyx":390
 * 
 *     def integrate(self, float start, float stop, float slope, float intercept):
 *         cdef int i, h = 0             # <<<<<<<<<<<<<<
 *         cdef float P,dP, A, AA, dA, sign
 * #        print start, stop, calc_area(start, stop)
 */
  __pyx_v_h = 0;
 391:         cdef float P,dP, A, AA, dA, sign
 392: #        print start, stop, calc_area(start, stop)
 393:         if start < stop:  # positive contribution
  /* "_distortion.pyx":393
 *         cdef float P,dP, A, AA, dA, sign
 * #        print start, stop, calc_area(start, stop)
 *         if start < stop:  # positive contribution             # <<<<<<<<<<<<<<
 *             P = ceil(start)
 *             dP = P - start
 */
  __pyx_t_1 = (__pyx_v_start < __pyx_v_stop);
  if (__pyx_t_1) {
 394:             P = ceil(start)
    /* "_distortion.pyx":394
 * #        print start, stop, calc_area(start, stop)
 *         if start < stop:  # positive contribution
 *             P = ceil(start)             # <<<<<<<<<<<<<<
 *             dP = P - start
 * #            print "Integrate", start, P, stop, calc_area(start, stop)
 */
    __pyx_v_P = ceil(__pyx_v_start);
 395:             dP = P - start
    /* "_distortion.pyx":395
 *         if start < stop:  # positive contribution
 *             P = ceil(start)
 *             dP = P - start             # <<<<<<<<<<<<<<
 * #            print "Integrate", start, P, stop, calc_area(start, stop)
 *             if P > stop:  # start and stop are in the same unit
 */
    __pyx_v_dP = (__pyx_v_P - __pyx_v_start);
 396: #            print "Integrate", start, P, stop, calc_area(start, stop)
 397:             if P > stop:  # start and stop are in the same unit
    /* "_distortion.pyx":397
 *             dP = P - start
 * #            print "Integrate", start, P, stop, calc_area(start, stop)
 *             if P > stop:  # start and stop are in the same unit             # <<<<<<<<<<<<<<
 *                 A = calc_area(start, stop, slope, intercept)
 *                 if A != 0:
 */
    __pyx_t_1 = (__pyx_v_P > __pyx_v_stop);
    if (__pyx_t_1) {
 398:                 A = calc_area(start, stop, slope, intercept)
      /* "_distortion.pyx":398
 * #            print "Integrate", start, P, stop, calc_area(start, stop)
 *             if P > stop:  # start and stop are in the same unit
 *                 A = calc_area(start, stop, slope, intercept)             # <<<<<<<<<<<<<<
 *                 if A != 0:
 *                     AA = fabs(A)
 */
      __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_start, __pyx_v_stop, __pyx_v_slope, __pyx_v_intercept, 0);
 399:                 if A != 0:
      /* "_distortion.pyx":399
 *             if P > stop:  # start and stop are in the same unit
 *                 A = calc_area(start, stop, slope, intercept)
 *                 if A != 0:             # <<<<<<<<<<<<<<
 *                     AA = fabs(A)
 *                     sign = A / AA
 */
      __pyx_t_1 = (__pyx_v_A != 0.0);
      if (__pyx_t_1) {
 400:                     AA = fabs(A)
        /* "_distortion.pyx":400
 *                 A = calc_area(start, stop, slope, intercept)
 *                 if A != 0:
 *                     AA = fabs(A)             # <<<<<<<<<<<<<<
 *                     sign = A / AA
 *                     dA = (stop - start)  # always positive
 */
        __pyx_v_AA = fabs(__pyx_v_A);
 401:                     sign = A / AA
        /* "_distortion.pyx":401
 *                 if A != 0:
 *                     AA = fabs(A)
 *                     sign = A / AA             # <<<<<<<<<<<<<<
 *                     dA = (stop - start)  # always positive
 * #                    print AA, sign, dA
 */
        if (unlikely(__pyx_v_AA == 0)) {
          PyErr_Format(PyExc_ZeroDivisionError, "float division");
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 402:                     dA = (stop - start)  # always positive
        /* "_distortion.pyx":402
 *                     AA = fabs(A)
 *                     sign = A / AA
 *                     dA = (stop - start)  # always positive             # <<<<<<<<<<<<<<
 * #                    print AA, sign, dA
 *                     h = 0
 */
        __pyx_v_dA = (__pyx_v_stop - __pyx_v_start);
 403: #                    print AA, sign, dA
 404:                     h = 0
        /* "_distortion.pyx":404
 *                     dA = (stop - start)  # always positive
 * #                    print AA, sign, dA
 *                     h = 0             # <<<<<<<<<<<<<<
 *                     while AA > 0:
 *                         if dA > AA:
 */
        __pyx_v_h = 0;
 405:                     while AA > 0:
        /* "_distortion.pyx":405
 * #                    print AA, sign, dA
 *                     h = 0
 *                     while AA > 0:             # <<<<<<<<<<<<<<
 *                         if dA > AA:
 *                             dA = AA
 */
        while (1) {
          __pyx_t_1 = (__pyx_v_AA > 0.0);
          if (!__pyx_t_1) break;
 406:                         if dA > AA:
          /* "_distortion.pyx":406
 *                     h = 0
 *                     while AA > 0:
 *                         if dA > AA:             # <<<<<<<<<<<<<<
 *                             dA = AA
 *                             AA = -1
 */
          __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
          if (__pyx_t_1) {
 407:                             dA = AA
            /* "_distortion.pyx":407
 *                     while AA > 0:
 *                         if dA > AA:
 *                             dA = AA             # <<<<<<<<<<<<<<
 *                             AA = -1
 *                         self.box[(<int> floor(start)), h] += sign * dA
 */
            __pyx_v_dA = __pyx_v_AA;
 408:                             AA = -1
            /* "_distortion.pyx":408
 *                         if dA > AA:
 *                             dA = AA
 *                             AA = -1             # <<<<<<<<<<<<<<
 *                         self.box[(<int> floor(start)), h] += sign * dA
 *                         AA -= dA
 */
            __pyx_v_AA = -1.0;
            goto __pyx_L8;
          }
          __pyx_L8:;
 409:                         self.box[(<int> floor(start)), h] += sign * dA
          /* "_distortion.pyx":409
 *                             dA = AA
 *                             AA = -1
 *                         self.box[(<int> floor(start)), h] += sign * dA             # <<<<<<<<<<<<<<
 *                         AA -= dA
 *                         h += 1
 */
          if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
          __pyx_t_2 = ((int)floor(__pyx_v_start));
          __pyx_t_3 = __pyx_v_h;
          __pyx_t_4 = -1;
          if (__pyx_t_2 < 0) {
            __pyx_t_2 += __pyx_v_self->box.shape[0];
            if (unlikely(__pyx_t_2 < 0)) __pyx_t_4 = 0;
          } else if (unlikely(__pyx_t_2 >= __pyx_v_self->box.shape[0])) __pyx_t_4 = 0;
          if (__pyx_t_3 < 0) {
            __pyx_t_3 += __pyx_v_self->box.shape[1];
            if (unlikely(__pyx_t_3 < 0)) __pyx_t_4 = 1;
          } else if (unlikely(__pyx_t_3 >= __pyx_v_self->box.shape[1])) __pyx_t_4 = 1;
          if (unlikely(__pyx_t_4 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_4);
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_2 * __pyx_v_self->box.strides[0]) ) + __pyx_t_3 * __pyx_v_self->box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 410:                         AA -= dA
          /* "_distortion.pyx":410
 *                             AA = -1
 *                         self.box[(<int> floor(start)), h] += sign * dA
 *                         AA -= dA             # <<<<<<<<<<<<<<
 *                         h += 1
 *             else:
 */
          __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 411:                         h += 1
          /* "_distortion.pyx":411
 *                         self.box[(<int> floor(start)), h] += sign * dA
 *                         AA -= dA
 *                         h += 1             # <<<<<<<<<<<<<<
 *             else:
 *                 if dP > 0:
 */
          __pyx_v_h = (__pyx_v_h + 1);
        }
        goto __pyx_L5;
      }
      __pyx_L5:;
      goto __pyx_L4;
    }
    /*else*/ {
 412:             else:
 413:                 if dP > 0:
      /* "_distortion.pyx":413
 *                         h += 1
 *             else:
 *                 if dP > 0:             # <<<<<<<<<<<<<<
 *                     A = calc_area(start, P, slope, intercept)
 *                     if A != 0:
 */
      __pyx_t_1 = (__pyx_v_dP > 0.0);
      if (__pyx_t_1) {
 414:                     A = calc_area(start, P, slope, intercept)
        /* "_distortion.pyx":414
 *             else:
 *                 if dP > 0:
 *                     A = calc_area(start, P, slope, intercept)             # <<<<<<<<<<<<<<
 *                     if A != 0:
 *                         AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_start, __pyx_v_P, __pyx_v_slope, __pyx_v_intercept, 0);
 415:                     if A != 0:
        /* "_distortion.pyx":415
 *                 if dP > 0:
 *                     A = calc_area(start, P, slope, intercept)
 *                     if A != 0:             # <<<<<<<<<<<<<<
 *                         AA = fabs(A)
 *                         sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 416:                         AA = fabs(A)
          /* "_distortion.pyx":416
 *                     A = calc_area(start, P, slope, intercept)
 *                     if A != 0:
 *                         AA = fabs(A)             # <<<<<<<<<<<<<<
 *                         sign = A / AA
 *                         h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 417:                         sign = A / AA
          /* "_distortion.pyx":417
 *                     if A != 0:
 *                         AA = fabs(A)
 *                         sign = A / AA             # <<<<<<<<<<<<<<
 *                         h = 0
 *                         dA = dP
 */
          if (unlikely(__pyx_v_AA == 0)) {
            PyErr_Format(PyExc_ZeroDivisionError, "float division");
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 418:                         h = 0
          /* "_distortion.pyx":418
 *                         AA = fabs(A)
 *                         sign = A / AA
 *                         h = 0             # <<<<<<<<<<<<<<
 *                         dA = dP
 *                         while AA > 0:
 */
          __pyx_v_h = 0;
 419:                         dA = dP
          /* "_distortion.pyx":419
 *                         sign = A / AA
 *                         h = 0
 *                         dA = dP             # <<<<<<<<<<<<<<
 *                         while AA > 0:
 *                             if dA > AA:
 */
          __pyx_v_dA = __pyx_v_dP;
 420:                         while AA > 0:
          /* "_distortion.pyx":420
 *                         h = 0
 *                         dA = dP
 *                         while AA > 0:             # <<<<<<<<<<<<<<
 *                             if dA > AA:
 *                                 dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 421:                             if dA > AA:
            /* "_distortion.pyx":421
 *                         dA = dP
 *                         while AA > 0:
 *                             if dA > AA:             # <<<<<<<<<<<<<<
 *                                 dA = AA
 *                                 AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 422:                                 dA = AA
              /* "_distortion.pyx":422
 *                         while AA > 0:
 *                             if dA > AA:
 *                                 dA = AA             # <<<<<<<<<<<<<<
 *                                 AA = -1
 *                             self.box[(<int> floor(P)) - 1, h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 423:                                 AA = -1
              /* "_distortion.pyx":423
 *                             if dA > AA:
 *                                 dA = AA
 *                                 AA = -1             # <<<<<<<<<<<<<<
 *                             self.box[(<int> floor(P)) - 1, h] += sign * dA
 *                             AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L13;
            }
            __pyx_L13:;
 424:                             self.box[(<int> floor(P)) - 1, h] += sign * dA
            /* "_distortion.pyx":424
 *                                 dA = AA
 *                                 AA = -1
 *                             self.box[(<int> floor(P)) - 1, h] += sign * dA             # <<<<<<<<<<<<<<
 *                             AA -= dA
 *                             h += 1
 */
            if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
            __pyx_t_5 = (((int)floor(__pyx_v_P)) - 1);
            __pyx_t_4 = __pyx_v_h;
            __pyx_t_6 = -1;
            if (__pyx_t_5 < 0) {
              __pyx_t_5 += __pyx_v_self->box.shape[0];
              if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
            } else if (unlikely(__pyx_t_5 >= __pyx_v_self->box.shape[0])) __pyx_t_6 = 0;
            if (__pyx_t_4 < 0) {
              __pyx_t_4 += __pyx_v_self->box.shape[1];
              if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
            } else if (unlikely(__pyx_t_4 >= __pyx_v_self->box.shape[1])) __pyx_t_6 = 1;
            if (unlikely(__pyx_t_6 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_6);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_5 * __pyx_v_self->box.strides[0]) ) + __pyx_t_4 * __pyx_v_self->box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 425:                             AA -= dA
            /* "_distortion.pyx":425
 *                                 AA = -1
 *                             self.box[(<int> floor(P)) - 1, h] += sign * dA
 *                             AA -= dA             # <<<<<<<<<<<<<<
 *                             h += 1
 *                 # subsection P1->Pn
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 426:                             h += 1
            /* "_distortion.pyx":426
 *                             self.box[(<int> floor(P)) - 1, h] += sign * dA
 *                             AA -= dA
 *                             h += 1             # <<<<<<<<<<<<<<
 *                 # subsection P1->Pn
 *                 for i in range((<int> floor(P)), (<int> floor(stop))):
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L10;
        }
        __pyx_L10:;
        goto __pyx_L9;
      }
      __pyx_L9:;
 427:                 # subsection P1->Pn
 428:                 for i in range((<int> floor(P)), (<int> floor(stop))):
      /* "_distortion.pyx":428
 *                             h += 1
 *                 # subsection P1->Pn
 *                 for i in range((<int> floor(P)), (<int> floor(stop))):             # <<<<<<<<<<<<<<
 *                     A = calc_area(i, i + 1, slope, intercept)
 *                     if A != 0:
 */
      __pyx_t_6 = ((int)floor(__pyx_v_stop));
      for (__pyx_t_7 = ((int)floor(__pyx_v_P)); __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_i = __pyx_t_7;
 429:                     A = calc_area(i, i + 1, slope, intercept)
        /* "_distortion.pyx":429
 *                 # subsection P1->Pn
 *                 for i in range((<int> floor(P)), (<int> floor(stop))):
 *                     A = calc_area(i, i + 1, slope, intercept)             # <<<<<<<<<<<<<<
 *                     if A != 0:
 *                         AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_i, (__pyx_v_i + 1), __pyx_v_slope, __pyx_v_intercept, 0);
 430:                     if A != 0:
        /* "_distortion.pyx":430
 *                 for i in range((<int> floor(P)), (<int> floor(stop))):
 *                     A = calc_area(i, i + 1, slope, intercept)
 *                     if A != 0:             # <<<<<<<<<<<<<<
 *                         AA = fabs(A)
 *                         sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 431:                         AA = fabs(A)
          /* "_distortion.pyx":431
 *                     A = calc_area(i, i + 1, slope, intercept)
 *                     if A != 0:
 *                         AA = fabs(A)             # <<<<<<<<<<<<<<
 *                         sign = A / AA
 * 
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 432:                         sign = A / AA
          /* "_distortion.pyx":432
 *                     if A != 0:
 *                         AA = fabs(A)
 *                         sign = A / AA             # <<<<<<<<<<<<<<
 * 
 *                         h = 0
 */
          if (unlikely(__pyx_v_AA == 0)) {
            PyErr_Format(PyExc_ZeroDivisionError, "float division");
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 433: 
 434:                         h = 0
          /* "_distortion.pyx":434
 *                         sign = A / AA
 * 
 *                         h = 0             # <<<<<<<<<<<<<<
 *                         dA = 1.0
 *                         while AA > 0:
 */
          __pyx_v_h = 0;
 435:                         dA = 1.0
          /* "_distortion.pyx":435
 * 
 *                         h = 0
 *                         dA = 1.0             # <<<<<<<<<<<<<<
 *                         while AA > 0:
 *                             if dA > AA:
 */
          __pyx_v_dA = 1.0;
 436:                         while AA > 0:
          /* "_distortion.pyx":436
 *                         h = 0
 *                         dA = 1.0
 *                         while AA > 0:             # <<<<<<<<<<<<<<
 *                             if dA > AA:
 *                                 dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 437:                             if dA > AA:
            /* "_distortion.pyx":437
 *                         dA = 1.0
 *                         while AA > 0:
 *                             if dA > AA:             # <<<<<<<<<<<<<<
 *                                 dA = AA
 *                                 AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 438:                                 dA = AA
              /* "_distortion.pyx":438
 *                         while AA > 0:
 *                             if dA > AA:
 *                                 dA = AA             # <<<<<<<<<<<<<<
 *                                 AA = -1
 *                             self.box[i , h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 439:                                 AA = -1
              /* "_distortion.pyx":439
 *                             if dA > AA:
 *                                 dA = AA
 *                                 AA = -1             # <<<<<<<<<<<<<<
 *                             self.box[i , h] += sign * dA
 *                             AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L19;
            }
            __pyx_L19:;
 440:                             self.box[i , h] += sign * dA
            /* "_distortion.pyx":440
 *                                 dA = AA
 *                                 AA = -1
 *                             self.box[i , h] += sign * dA             # <<<<<<<<<<<<<<
 *                             AA -= dA
 *                             h += 1
 */
            if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
            __pyx_t_8 = __pyx_v_i;
            __pyx_t_9 = __pyx_v_h;
            __pyx_t_10 = -1;
            if (__pyx_t_8 < 0) {
              __pyx_t_8 += __pyx_v_self->box.shape[0];
              if (unlikely(__pyx_t_8 < 0)) __pyx_t_10 = 0;
            } else if (unlikely(__pyx_t_8 >= __pyx_v_self->box.shape[0])) __pyx_t_10 = 0;
            if (__pyx_t_9 < 0) {
              __pyx_t_9 += __pyx_v_self->box.shape[1];
              if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 1;
            } else if (unlikely(__pyx_t_9 >= __pyx_v_self->box.shape[1])) __pyx_t_10 = 1;
            if (unlikely(__pyx_t_10 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_10);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_8 * __pyx_v_self->box.strides[0]) ) + __pyx_t_9 * __pyx_v_self->box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 441:                             AA -= dA
            /* "_distortion.pyx":441
 *                                 AA = -1
 *                             self.box[i , h] += sign * dA
 *                             AA -= dA             # <<<<<<<<<<<<<<
 *                             h += 1
 *                 # Section Pn->B
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 442:                             h += 1
            /* "_distortion.pyx":442
 *                             self.box[i , h] += sign * dA
 *                             AA -= dA
 *                             h += 1             # <<<<<<<<<<<<<<
 *                 # Section Pn->B
 *                 P = floor(stop)
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L16;
        }
        __pyx_L16:;
      }
 443:                 # Section Pn->B
 444:                 P = floor(stop)
      /* "_distortion.pyx":444
 *                             h += 1
 *                 # Section Pn->B
 *                 P = floor(stop)             # <<<<<<<<<<<<<<
 *                 dP = stop - P
 *                 if dP > 0:
 */
      __pyx_v_P = floor(__pyx_v_stop);
 445:                 dP = stop - P
      /* "_distortion.pyx":445
 *                 # Section Pn->B
 *                 P = floor(stop)
 *                 dP = stop - P             # <<<<<<<<<<<<<<
 *                 if dP > 0:
 *                     A = calc_area(P, stop, slope, intercept)
 */
      __pyx_v_dP = (__pyx_v_stop - __pyx_v_P);
 446:                 if dP > 0:
      /* "_distortion.pyx":446
 *                 P = floor(stop)
 *                 dP = stop - P
 *                 if dP > 0:             # <<<<<<<<<<<<<<
 *                     A = calc_area(P, stop, slope, intercept)
 *                     if A != 0:
 */
      __pyx_t_1 = (__pyx_v_dP > 0.0);
      if (__pyx_t_1) {
 447:                     A = calc_area(P, stop, slope, intercept)
        /* "_distortion.pyx":447
 *                 dP = stop - P
 *                 if dP > 0:
 *                     A = calc_area(P, stop, slope, intercept)             # <<<<<<<<<<<<<<
 *                     if A != 0:
 *                         AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_P, __pyx_v_stop, __pyx_v_slope, __pyx_v_intercept, 0);
 448:                     if A != 0:
        /* "_distortion.pyx":448
 *                 if dP > 0:
 *                     A = calc_area(P, stop, slope, intercept)
 *                     if A != 0:             # <<<<<<<<<<<<<<
 *                         AA = fabs(A)
 *                         sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 449:                         AA = fabs(A)
          /* "_distortion.pyx":449
 *                     A = calc_area(P, stop, slope, intercept)
 *                     if A != 0:
 *                         AA = fabs(A)             # <<<<<<<<<<<<<<
 *                         sign = A / AA
 *                         h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 450:                         sign = A / AA
          /* "_distortion.pyx":450
 *                     if A != 0:
 *                         AA = fabs(A)
 *                         sign = A / AA             # <<<<<<<<<<<<<<
 *                         h = 0
 *                         dA = fabs(dP)
 */
          if (unlikely(__pyx_v_AA == 0)) {
            PyErr_Format(PyExc_ZeroDivisionError, "float division");
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 451:                         h = 0
          /* "_distortion.pyx":451
 *                         AA = fabs(A)
 *                         sign = A / AA
 *                         h = 0             # <<<<<<<<<<<<<<
 *                         dA = fabs(dP)
 *                         while AA > 0:
 */
          __pyx_v_h = 0;
 452:                         dA = fabs(dP)
          /* "_distortion.pyx":452
 *                         sign = A / AA
 *                         h = 0
 *                         dA = fabs(dP)             # <<<<<<<<<<<<<<
 *                         while AA > 0:
 *                             if dA > AA:
 */
          __pyx_v_dA = fabs(__pyx_v_dP);
 453:                         while AA > 0:
          /* "_distortion.pyx":453
 *                         h = 0
 *                         dA = fabs(dP)
 *                         while AA > 0:             # <<<<<<<<<<<<<<
 *                             if dA > AA:
 *                                 dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 454:                             if dA > AA:
            /* "_distortion.pyx":454
 *                         dA = fabs(dP)
 *                         while AA > 0:
 *                             if dA > AA:             # <<<<<<<<<<<<<<
 *                                 dA = AA
 *                                 AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 455:                                 dA = AA
              /* "_distortion.pyx":455
 *                         while AA > 0:
 *                             if dA > AA:
 *                                 dA = AA             # <<<<<<<<<<<<<<
 *                                 AA = -1
 *                             self.box[(<int> floor(P)), h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 456:                                 AA = -1
              /* "_distortion.pyx":456
 *                             if dA > AA:
 *                                 dA = AA
 *                                 AA = -1             # <<<<<<<<<<<<<<
 *                             self.box[(<int> floor(P)), h] += sign * dA
 *                             AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L24;
            }
            __pyx_L24:;
 457:                             self.box[(<int> floor(P)), h] += sign * dA
            /* "_distortion.pyx":457
 *                                 dA = AA
 *                                 AA = -1
 *                             self.box[(<int> floor(P)), h] += sign * dA             # <<<<<<<<<<<<<<
 *                             AA -= dA
 *                             h += 1
 */
            if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
            __pyx_t_6 = ((int)floor(__pyx_v_P));
            __pyx_t_7 = __pyx_v_h;
            __pyx_t_10 = -1;
            if (__pyx_t_6 < 0) {
              __pyx_t_6 += __pyx_v_self->box.shape[0];
              if (unlikely(__pyx_t_6 < 0)) __pyx_t_10 = 0;
            } else if (unlikely(__pyx_t_6 >= __pyx_v_self->box.shape[0])) __pyx_t_10 = 0;
            if (__pyx_t_7 < 0) {
              __pyx_t_7 += __pyx_v_self->box.shape[1];
              if (unlikely(__pyx_t_7 < 0)) __pyx_t_10 = 1;
            } else if (unlikely(__pyx_t_7 >= __pyx_v_self->box.shape[1])) __pyx_t_10 = 1;
            if (unlikely(__pyx_t_10 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_10);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_6 * __pyx_v_self->box.strides[0]) ) + __pyx_t_7 * __pyx_v_self->box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 458:                             AA -= dA
            /* "_distortion.pyx":458
 *                                 AA = -1
 *                             self.box[(<int> floor(P)), h] += sign * dA
 *                             AA -= dA             # <<<<<<<<<<<<<<
 *                             h += 1
 *         elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 459:                             h += 1
            /* "_distortion.pyx":459
 *                             self.box[(<int> floor(P)), h] += sign * dA
 *                             AA -= dA
 *                             h += 1             # <<<<<<<<<<<<<<
 *         elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
 *             P = floor(start)
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L21;
        }
        __pyx_L21:;
        goto __pyx_L20;
      }
      __pyx_L20:;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
 460:         elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
  /* "_distortion.pyx":460
 *                             AA -= dA
 *                             h += 1
 *         elif    start > stop:  # negative contribution. Nota is start=stop: no contribution             # <<<<<<<<<<<<<<
 *             P = floor(start)
 *             if stop > P:  # start and stop are in the same unit
 */
  __pyx_t_1 = (__pyx_v_start > __pyx_v_stop);
  if (__pyx_t_1) {
 461:             P = floor(start)
    /* "_distortion.pyx":461
 *                             h += 1
 *         elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
 *             P = floor(start)             # <<<<<<<<<<<<<<
 *             if stop > P:  # start and stop are in the same unit
 *                 A = calc_area(start, stop, slope, intercept)
 */
    __pyx_v_P = floor(__pyx_v_start);
 462:             if stop > P:  # start and stop are in the same unit
    /* "_distortion.pyx":462
 *         elif    start > stop:  # negative contribution. Nota is start=stop: no contribution
 *             P = floor(start)
 *             if stop > P:  # start and stop are in the same unit             # <<<<<<<<<<<<<<
 *                 A = calc_area(start, stop, slope, intercept)
 *                 if A != 0:
 */
    __pyx_t_1 = (__pyx_v_stop > __pyx_v_P);
    if (__pyx_t_1) {
 463:                 A = calc_area(start, stop, slope, intercept)
      /* "_distortion.pyx":463
 *             P = floor(start)
 *             if stop > P:  # start and stop are in the same unit
 *                 A = calc_area(start, stop, slope, intercept)             # <<<<<<<<<<<<<<
 *                 if A != 0:
 *                     AA = fabs(A)
 */
      __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_start, __pyx_v_stop, __pyx_v_slope, __pyx_v_intercept, 0);
 464:                 if A != 0:
      /* "_distortion.pyx":464
 *             if stop > P:  # start and stop are in the same unit
 *                 A = calc_area(start, stop, slope, intercept)
 *                 if A != 0:             # <<<<<<<<<<<<<<
 *                     AA = fabs(A)
 *                     sign = A / AA
 */
      __pyx_t_1 = (__pyx_v_A != 0.0);
      if (__pyx_t_1) {
 465:                     AA = fabs(A)
        /* "_distortion.pyx":465
 *                 A = calc_area(start, stop, slope, intercept)
 *                 if A != 0:
 *                     AA = fabs(A)             # <<<<<<<<<<<<<<
 *                     sign = A / AA
 *                     dA = (start - stop)  # always positive
 */
        __pyx_v_AA = fabs(__pyx_v_A);
 466:                     sign = A / AA
        /* "_distortion.pyx":466
 *                 if A != 0:
 *                     AA = fabs(A)
 *                     sign = A / AA             # <<<<<<<<<<<<<<
 *                     dA = (start - stop)  # always positive
 *                     h = 0
 */
        if (unlikely(__pyx_v_AA == 0)) {
          PyErr_Format(PyExc_ZeroDivisionError, "float division");
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 467:                     dA = (start - stop)  # always positive
        /* "_distortion.pyx":467
 *                     AA = fabs(A)
 *                     sign = A / AA
 *                     dA = (start - stop)  # always positive             # <<<<<<<<<<<<<<
 *                     h = 0
 *                     while AA > 0:
 */
        __pyx_v_dA = (__pyx_v_start - __pyx_v_stop);
 468:                     h = 0
        /* "_distortion.pyx":468
 *                     sign = A / AA
 *                     dA = (start - stop)  # always positive
 *                     h = 0             # <<<<<<<<<<<<<<
 *                     while AA > 0:
 *                         if dA > AA:
 */
        __pyx_v_h = 0;
 469:                     while AA > 0:
        /* "_distortion.pyx":469
 *                     dA = (start - stop)  # always positive
 *                     h = 0
 *                     while AA > 0:             # <<<<<<<<<<<<<<
 *                         if dA > AA:
 *                             dA = AA
 */
        while (1) {
          __pyx_t_1 = (__pyx_v_AA > 0.0);
          if (!__pyx_t_1) break;
 470:                         if dA > AA:
          /* "_distortion.pyx":470
 *                     h = 0
 *                     while AA > 0:
 *                         if dA > AA:             # <<<<<<<<<<<<<<
 *                             dA = AA
 *                             AA = -1
 */
          __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
          if (__pyx_t_1) {
 471:                             dA = AA
            /* "_distortion.pyx":471
 *                     while AA > 0:
 *                         if dA > AA:
 *                             dA = AA             # <<<<<<<<<<<<<<
 *                             AA = -1
 *                         self.box[(<int> floor(start)), h] += sign * dA
 */
            __pyx_v_dA = __pyx_v_AA;
 472:                             AA = -1
            /* "_distortion.pyx":472
 *                         if dA > AA:
 *                             dA = AA
 *                             AA = -1             # <<<<<<<<<<<<<<
 *                         self.box[(<int> floor(start)), h] += sign * dA
 *                         AA -= dA
 */
            __pyx_v_AA = -1.0;
            goto __pyx_L29;
          }
          __pyx_L29:;
 473:                         self.box[(<int> floor(start)), h] += sign * dA
          /* "_distortion.pyx":473
 *                             dA = AA
 *                             AA = -1
 *                         self.box[(<int> floor(start)), h] += sign * dA             # <<<<<<<<<<<<<<
 *                         AA -= dA
 *                         h += 1
 */
          if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
          __pyx_t_10 = ((int)floor(__pyx_v_start));
          __pyx_t_11 = __pyx_v_h;
          __pyx_t_12 = -1;
          if (__pyx_t_10 < 0) {
            __pyx_t_10 += __pyx_v_self->box.shape[0];
            if (unlikely(__pyx_t_10 < 0)) __pyx_t_12 = 0;
          } else if (unlikely(__pyx_t_10 >= __pyx_v_self->box.shape[0])) __pyx_t_12 = 0;
          if (__pyx_t_11 < 0) {
            __pyx_t_11 += __pyx_v_self->box.shape[1];
            if (unlikely(__pyx_t_11 < 0)) __pyx_t_12 = 1;
          } else if (unlikely(__pyx_t_11 >= __pyx_v_self->box.shape[1])) __pyx_t_12 = 1;
          if (unlikely(__pyx_t_12 != -1)) {
            __Pyx_RaiseBufferIndexError(__pyx_t_12);
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_10 * __pyx_v_self->box.strides[0]) ) + __pyx_t_11 * __pyx_v_self->box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 474:                         AA -= dA
          /* "_distortion.pyx":474
 *                             AA = -1
 *                         self.box[(<int> floor(start)), h] += sign * dA
 *                         AA -= dA             # <<<<<<<<<<<<<<
 *                         h += 1
 *             else:
 */
          __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 475:                         h += 1
          /* "_distortion.pyx":475
 *                         self.box[(<int> floor(start)), h] += sign * dA
 *                         AA -= dA
 *                         h += 1             # <<<<<<<<<<<<<<
 *             else:
 *                 dP = P - start
 */
          __pyx_v_h = (__pyx_v_h + 1);
        }
        goto __pyx_L26;
      }
      __pyx_L26:;
      goto __pyx_L25;
    }
    /*else*/ {
 476:             else:
 477:                 dP = P - start
      /* "_distortion.pyx":477
 *                         h += 1
 *             else:
 *                 dP = P - start             # <<<<<<<<<<<<<<
 *                 if dP < 0:
 *                     A = calc_area(start, P, slope, intercept)
 */
      __pyx_v_dP = (__pyx_v_P - __pyx_v_start);
 478:                 if dP < 0:
      /* "_distortion.pyx":478
 *             else:
 *                 dP = P - start
 *                 if dP < 0:             # <<<<<<<<<<<<<<
 *                     A = calc_area(start, P, slope, intercept)
 *                     if A != 0:
 */
      __pyx_t_1 = (__pyx_v_dP < 0.0);
      if (__pyx_t_1) {
 479:                     A = calc_area(start, P, slope, intercept)
        /* "_distortion.pyx":479
 *                 dP = P - start
 *                 if dP < 0:
 *                     A = calc_area(start, P, slope, intercept)             # <<<<<<<<<<<<<<
 *                     if A != 0:
 *                         AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_start, __pyx_v_P, __pyx_v_slope, __pyx_v_intercept, 0);
 480:                     if A != 0:
        /* "_distortion.pyx":480
 *                 if dP < 0:
 *                     A = calc_area(start, P, slope, intercept)
 *                     if A != 0:             # <<<<<<<<<<<<<<
 *                         AA = fabs(A)
 *                         sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 481:                         AA = fabs(A)
          /* "_distortion.pyx":481
 *                     A = calc_area(start, P, slope, intercept)
 *                     if A != 0:
 *                         AA = fabs(A)             # <<<<<<<<<<<<<<
 *                         sign = A / AA
 *                         h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 482:                         sign = A / AA
          /* "_distortion.pyx":482
 *                     if A != 0:
 *                         AA = fabs(A)
 *                         sign = A / AA             # <<<<<<<<<<<<<<
 *                         h = 0
 *                         dA = fabs(dP)
 */
          if (unlikely(__pyx_v_AA == 0)) {
            PyErr_Format(PyExc_ZeroDivisionError, "float division");
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 483:                         h = 0
          /* "_distortion.pyx":483
 *                         AA = fabs(A)
 *                         sign = A / AA
 *                         h = 0             # <<<<<<<<<<<<<<
 *                         dA = fabs(dP)
 *                         while AA > 0:
 */
          __pyx_v_h = 0;
 484:                         dA = fabs(dP)
          /* "_distortion.pyx":484
 *                         sign = A / AA
 *                         h = 0
 *                         dA = fabs(dP)             # <<<<<<<<<<<<<<
 *                         while AA > 0:
 *                             if dA > AA:
 */
          __pyx_v_dA = fabs(__pyx_v_dP);
 485:                         while AA > 0:
          /* "_distortion.pyx":485
 *                         h = 0
 *                         dA = fabs(dP)
 *                         while AA > 0:             # <<<<<<<<<<<<<<
 *                             if dA > AA:
 *                                 dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 486:                             if dA > AA:
            /* "_distortion.pyx":486
 *                         dA = fabs(dP)
 *                         while AA > 0:
 *                             if dA > AA:             # <<<<<<<<<<<<<<
 *                                 dA = AA
 *                                 AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 487:                                 dA = AA
              /* "_distortion.pyx":487
 *                         while AA > 0:
 *                             if dA > AA:
 *                                 dA = AA             # <<<<<<<<<<<<<<
 *                                 AA = -1
 *                             self.box[(<int> floor(P)) , h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 488:                                 AA = -1
              /* "_distortion.pyx":488
 *                             if dA > AA:
 *                                 dA = AA
 *                                 AA = -1             # <<<<<<<<<<<<<<
 *                             self.box[(<int> floor(P)) , h] += sign * dA
 *                             AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L34;
            }
            __pyx_L34:;
 489:                             self.box[(<int> floor(P)) , h] += sign * dA
            /* "_distortion.pyx":489
 *                                 dA = AA
 *                                 AA = -1
 *                             self.box[(<int> floor(P)) , h] += sign * dA             # <<<<<<<<<<<<<<
 *                             AA -= dA
 *                             h += 1
 */
            if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
            __pyx_t_12 = ((int)floor(__pyx_v_P));
            __pyx_t_13 = __pyx_v_h;
            __pyx_t_14 = -1;
            if (__pyx_t_12 < 0) {
              __pyx_t_12 += __pyx_v_self->box.shape[0];
              if (unlikely(__pyx_t_12 < 0)) __pyx_t_14 = 0;
            } else if (unlikely(__pyx_t_12 >= __pyx_v_self->box.shape[0])) __pyx_t_14 = 0;
            if (__pyx_t_13 < 0) {
              __pyx_t_13 += __pyx_v_self->box.shape[1];
              if (unlikely(__pyx_t_13 < 0)) __pyx_t_14 = 1;
            } else if (unlikely(__pyx_t_13 >= __pyx_v_self->box.shape[1])) __pyx_t_14 = 1;
            if (unlikely(__pyx_t_14 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_14);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_12 * __pyx_v_self->box.strides[0]) ) + __pyx_t_13 * __pyx_v_self->box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 490:                             AA -= dA
            /* "_distortion.pyx":490
 *                                 AA = -1
 *                             self.box[(<int> floor(P)) , h] += sign * dA
 *                             AA -= dA             # <<<<<<<<<<<<<<
 *                             h += 1
 *                 # subsection P1->Pn
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 491:                             h += 1
            /* "_distortion.pyx":491
 *                             self.box[(<int> floor(P)) , h] += sign * dA
 *                             AA -= dA
 *                             h += 1             # <<<<<<<<<<<<<<
 *                 # subsection P1->Pn
 *                 for i in range((<int> start), (<int> ceil(stop)), -1):
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L31;
        }
        __pyx_L31:;
        goto __pyx_L30;
      }
      __pyx_L30:;
 492:                 # subsection P1->Pn
 493:                 for i in range((<int> start), (<int> ceil(stop)), -1):
      /* "_distortion.pyx":493
 *                             h += 1
 *                 # subsection P1->Pn
 *                 for i in range((<int> start), (<int> ceil(stop)), -1):             # <<<<<<<<<<<<<<
 *                     A = calc_area(i, i - 1, slope, intercept)
 *                     if A != 0:
 */
      __pyx_t_14 = ((int)ceil(__pyx_v_stop));
      for (__pyx_t_15 = ((int)__pyx_v_start); __pyx_t_15 > __pyx_t_14; __pyx_t_15-=1) {
        __pyx_v_i = __pyx_t_15;
 494:                     A = calc_area(i, i - 1, slope, intercept)
        /* "_distortion.pyx":494
 *                 # subsection P1->Pn
 *                 for i in range((<int> start), (<int> ceil(stop)), -1):
 *                     A = calc_area(i, i - 1, slope, intercept)             # <<<<<<<<<<<<<<
 *                     if A != 0:
 *                         AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_i, (__pyx_v_i - 1), __pyx_v_slope, __pyx_v_intercept, 0);
 495:                     if A != 0:
        /* "_distortion.pyx":495
 *                 for i in range((<int> start), (<int> ceil(stop)), -1):
 *                     A = calc_area(i, i - 1, slope, intercept)
 *                     if A != 0:             # <<<<<<<<<<<<<<
 *                         AA = fabs(A)
 *                         sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 496:                         AA = fabs(A)
          /* "_distortion.pyx":496
 *                     A = calc_area(i, i - 1, slope, intercept)
 *                     if A != 0:
 *                         AA = fabs(A)             # <<<<<<<<<<<<<<
 *                         sign = A / AA
 *                         h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 497:                         sign = A / AA
          /* "_distortion.pyx":497
 *                     if A != 0:
 *                         AA = fabs(A)
 *                         sign = A / AA             # <<<<<<<<<<<<<<
 *                         h = 0
 *                         dA = 1
 */
          if (unlikely(__pyx_v_AA == 0)) {
            PyErr_Format(PyExc_ZeroDivisionError, "float division");
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 498:                         h = 0
          /* "_distortion.pyx":498
 *                         AA = fabs(A)
 *                         sign = A / AA
 *                         h = 0             # <<<<<<<<<<<<<<
 *                         dA = 1
 *                         while AA > 0:
 */
          __pyx_v_h = 0;
 499:                         dA = 1
          /* "_distortion.pyx":499
 *                         sign = A / AA
 *                         h = 0
 *                         dA = 1             # <<<<<<<<<<<<<<
 *                         while AA > 0:
 *                             if dA > AA:
 */
          __pyx_v_dA = 1.0;
 500:                         while AA > 0:
          /* "_distortion.pyx":500
 *                         h = 0
 *                         dA = 1
 *                         while AA > 0:             # <<<<<<<<<<<<<<
 *                             if dA > AA:
 *                                 dA = AA
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 501:                             if dA > AA:
            /* "_distortion.pyx":501
 *                         dA = 1
 *                         while AA > 0:
 *                             if dA > AA:             # <<<<<<<<<<<<<<
 *                                 dA = AA
 *                                 AA = -1
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 502:                                 dA = AA
              /* "_distortion.pyx":502
 *                         while AA > 0:
 *                             if dA > AA:
 *                                 dA = AA             # <<<<<<<<<<<<<<
 *                                 AA = -1
 *                             self.box[i - 1 , h] += sign * dA
 */
              __pyx_v_dA = __pyx_v_AA;
 503:                                 AA = -1
              /* "_distortion.pyx":503
 *                             if dA > AA:
 *                                 dA = AA
 *                                 AA = -1             # <<<<<<<<<<<<<<
 *                             self.box[i - 1 , h] += sign * dA
 *                             AA -= dA
 */
              __pyx_v_AA = -1.0;
              goto __pyx_L40;
            }
            __pyx_L40:;
 504:                             self.box[i - 1 , h] += sign * dA
            /* "_distortion.pyx":504
 *                                 dA = AA
 *                                 AA = -1
 *                             self.box[i - 1 , h] += sign * dA             # <<<<<<<<<<<<<<
 *                             AA -= dA
 *                             h += 1
 */
            if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
            __pyx_t_16 = (__pyx_v_i - 1);
            __pyx_t_17 = __pyx_v_h;
            __pyx_t_18 = -1;
            if (__pyx_t_16 < 0) {
              __pyx_t_16 += __pyx_v_self->box.shape[0];
              if (unlikely(__pyx_t_16 < 0)) __pyx_t_18 = 0;
            } else if (unlikely(__pyx_t_16 >= __pyx_v_self->box.shape[0])) __pyx_t_18 = 0;
            if (__pyx_t_17 < 0) {
              __pyx_t_17 += __pyx_v_self->box.shape[1];
              if (unlikely(__pyx_t_17 < 0)) __pyx_t_18 = 1;
            } else if (unlikely(__pyx_t_17 >= __pyx_v_self->box.shape[1])) __pyx_t_18 = 1;
            if (unlikely(__pyx_t_18 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_18);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_16 * __pyx_v_self->box.strides[0]) ) + __pyx_t_17 * __pyx_v_self->box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 505:                             AA -= dA
            /* "_distortion.pyx":505
 *                                 AA = -1
 *                             self.box[i - 1 , h] += sign * dA
 *                             AA -= dA             # <<<<<<<<<<<<<<
 *                             h += 1
 *                 # Section Pn->B
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 506:                             h += 1
            /* "_distortion.pyx":506
 *                             self.box[i - 1 , h] += sign * dA
 *                             AA -= dA
 *                             h += 1             # <<<<<<<<<<<<<<
 *                 # Section Pn->B
 *                 P = ceil(stop)
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L37;
        }
        __pyx_L37:;
      }
 507:                 # Section Pn->B
 508:                 P = ceil(stop)
      /* "_distortion.pyx":508
 *                             h += 1
 *                 # Section Pn->B
 *                 P = ceil(stop)             # <<<<<<<<<<<<<<
 *                 dP = stop - P
 *                 if dP < 0:
 */
      __pyx_v_P = ceil(__pyx_v_stop);
 509:                 dP = stop - P
      /* "_distortion.pyx":509
 *                 # Section Pn->B
 *                 P = ceil(stop)
 *                 dP = stop - P             # <<<<<<<<<<<<<<
 *                 if dP < 0:
 *                     A = calc_area(P, stop, slope, intercept)
 */
      __pyx_v_dP = (__pyx_v_stop - __pyx_v_P);
 510:                 if dP < 0:
      /* "_distortion.pyx":510
 *                 P = ceil(stop)
 *                 dP = stop - P
 *                 if dP < 0:             # <<<<<<<<<<<<<<
 *                     A = calc_area(P, stop, slope, intercept)
 *                     if A != 0:
 */
      __pyx_t_1 = (__pyx_v_dP < 0.0);
      if (__pyx_t_1) {
 511:                     A = calc_area(P, stop, slope, intercept)
        /* "_distortion.pyx":511
 *                 dP = stop - P
 *                 if dP < 0:
 *                     A = calc_area(P, stop, slope, intercept)             # <<<<<<<<<<<<<<
 *                     if A != 0:
 *                         AA = fabs(A)
 */
        __pyx_v_A = __pyx_f_11_distortion_calc_area(__pyx_v_P, __pyx_v_stop, __pyx_v_slope, __pyx_v_intercept, 0);
 512:                     if A != 0:
        /* "_distortion.pyx":512
 *                 if dP < 0:
 *                     A = calc_area(P, stop, slope, intercept)
 *                     if A != 0:             # <<<<<<<<<<<<<<
 *                         AA = fabs(A)
 *                         sign = A / AA
 */
        __pyx_t_1 = (__pyx_v_A != 0.0);
        if (__pyx_t_1) {
 513:                         AA = fabs(A)
          /* "_distortion.pyx":513
 *                     A = calc_area(P, stop, slope, intercept)
 *                     if A != 0:
 *                         AA = fabs(A)             # <<<<<<<<<<<<<<
 *                         sign = A / AA
 *                         h = 0
 */
          __pyx_v_AA = fabs(__pyx_v_A);
 514:                         sign = A / AA
          /* "_distortion.pyx":514
 *                     if A != 0:
 *                         AA = fabs(A)
 *                         sign = A / AA             # <<<<<<<<<<<<<<
 *                         h = 0
 *                         dA = fabs(dP)
 */
          if (unlikely(__pyx_v_AA == 0)) {
            PyErr_Format(PyExc_ZeroDivisionError, "float division");
            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          }
          __pyx_v_sign = (__pyx_v_A / __pyx_v_AA);
 515:                         h = 0
          /* "_distortion.pyx":515
 *                         AA = fabs(A)
 *                         sign = A / AA
 *                         h = 0             # <<<<<<<<<<<<<<
 *                         dA = fabs(dP)
 *                         while AA > 0:
 */
          __pyx_v_h = 0;
 516:                         dA = fabs(dP)
          /* "_distortion.pyx":516
 *                         sign = A / AA
 *                         h = 0
 *                         dA = fabs(dP)             # <<<<<<<<<<<<<<
 *                         while AA > 0:
 *                             if dA > AA:
 */
          __pyx_v_dA = fabs(__pyx_v_dP);
 517:                         while AA > 0:
          /* "_distortion.pyx":517
 *                         h = 0
 *                         dA = fabs(dP)
 *                         while AA > 0:             # <<<<<<<<<<<<<<
 *                             if dA > AA:
 *                                 dA = AA; AA = -1
 */
          while (1) {
            __pyx_t_1 = (__pyx_v_AA > 0.0);
            if (!__pyx_t_1) break;
 518:                             if dA > AA:
            /* "_distortion.pyx":518
 *                         dA = fabs(dP)
 *                         while AA > 0:
 *                             if dA > AA:             # <<<<<<<<<<<<<<
 *                                 dA = AA; AA = -1
 *                             self.box[(<int> floor(stop)), h] += sign * dA
 */
            __pyx_t_1 = (__pyx_v_dA > __pyx_v_AA);
            if (__pyx_t_1) {
 519:                                 dA = AA; AA = -1
              /* "_distortion.pyx":519
 *                         while AA > 0:
 *                             if dA > AA:
 *                                 dA = AA; AA = -1             # <<<<<<<<<<<<<<
 *                             self.box[(<int> floor(stop)), h] += sign * dA
 *                             AA -= dA
 */
              __pyx_v_dA = __pyx_v_AA;
              __pyx_v_AA = -1.0;
              goto __pyx_L45;
            }
            __pyx_L45:;
 520:                             self.box[(<int> floor(stop)), h] += sign * dA
            /* "_distortion.pyx":520
 *                             if dA > AA:
 *                                 dA = AA; AA = -1
 *                             self.box[(<int> floor(stop)), h] += sign * dA             # <<<<<<<<<<<<<<
 *                             AA -= dA
 *                             h += 1
 */
            if (unlikely(!__pyx_v_self->box.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");{__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}}
            __pyx_t_14 = ((int)floor(__pyx_v_stop));
            __pyx_t_15 = __pyx_v_h;
            __pyx_t_18 = -1;
            if (__pyx_t_14 < 0) {
              __pyx_t_14 += __pyx_v_self->box.shape[0];
              if (unlikely(__pyx_t_14 < 0)) __pyx_t_18 = 0;
            } else if (unlikely(__pyx_t_14 >= __pyx_v_self->box.shape[0])) __pyx_t_18 = 0;
            if (__pyx_t_15 < 0) {
              __pyx_t_15 += __pyx_v_self->box.shape[1];
              if (unlikely(__pyx_t_15 < 0)) __pyx_t_18 = 1;
            } else if (unlikely(__pyx_t_15 >= __pyx_v_self->box.shape[1])) __pyx_t_18 = 1;
            if (unlikely(__pyx_t_18 != -1)) {
              __Pyx_RaiseBufferIndexError(__pyx_t_18);
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
            }
            *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_self->box.data + __pyx_t_14 * __pyx_v_self->box.strides[0]) ) + __pyx_t_15 * __pyx_v_self->box.strides[1]) )) += (__pyx_v_sign * __pyx_v_dA);
 521:                             AA -= dA
            /* "_distortion.pyx":521
 *                                 dA = AA; AA = -1
 *                             self.box[(<int> floor(stop)), h] += sign * dA
 *                             AA -= dA             # <<<<<<<<<<<<<<
 *                             h += 1
 * 
 */
            __pyx_v_AA = (__pyx_v_AA - __pyx_v_dA);
 522:                             h += 1
            /* "_distortion.pyx":522
 *                             self.box[(<int> floor(stop)), h] += sign * dA
 *                             AA -= dA
 *                             h += 1             # <<<<<<<<<<<<<<
 * 
 * class Distortion(object):
 */
            __pyx_v_h = (__pyx_v_h + 1);
          }
          goto __pyx_L42;
        }
        __pyx_L42:;
        goto __pyx_L41;
      }
      __pyx_L41:;
    }
    __pyx_L25:;
    goto __pyx_L3;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("_distortion.Quad.integrate", __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_11_distortion_10Distortion_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11_distortion_10Distortion___init__[] = "\n        @param detector: detector instance or detector name\n        ";
static PyMethodDef __pyx_mdef_11_distortion_10Distortion_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_11_distortion_10Distortion_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_11_distortion_10Distortion___init__)};
static PyObject *__pyx_pw_11_distortion_10Distortion_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_detector = 0;
  PyObject *__pyx_v_shape = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__detector,&__pyx_n_s__shape,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject*)__pyx_n_s__detector));
 523: 
 524: class Distortion(object):
  /* "_distortion.pyx":524
 *                             h += 1
 * 
 * class Distortion(object):             # <<<<<<<<<<<<<<
 *     """
 * 
 */
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));

  /* "_distortion.pyx":524
 *                             h += 1
 * 
 * class Distortion(object):             # <<<<<<<<<<<<<<
 *     """
 * 
 */
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_builtin_object);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
  __Pyx_GIVEREF(__pyx_builtin_object);
  if (PyDict_SetItemString(((PyObject *)__pyx_t_1), "__doc__", ((PyObject *)__pyx_kp_s_146)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_4 = __Pyx_CreateClass(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1), __pyx_n_s__Distortion, __pyx_n_s___distortion); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Distortion, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
 525:     """
 526: 
 527:     This class applies a distortion correction on an image.
 528: 
 529:     It is also able to apply an inversion of the correction.
 530: 
 531:     """
 532:     def __init__(self, detector="detector", shape=None):
    /* "_distortion.pyx":532
 * 
 *     """
 *     def __init__(self, detector="detector", shape=None):             # <<<<<<<<<<<<<<
 *         """
 *         @param detector: detector instance or detector name
 */
    values[2] = ((PyObject *)((PyObject *)Py_None));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        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__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__detector);
          if (value) { values[1] = value; kw_args--; }
        }
        case  2:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      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 = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        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_self = values[0];
    __pyx_v_detector = values[1];
    __pyx_v_shape = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Distortion.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_10Distortion___init__(__pyx_self, __pyx_v_self, __pyx_v_detector, __pyx_v_shape);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11_distortion_10Distortion___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_detector, PyObject *__pyx_v_shape) {
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "_distortion.pyx":532
 * 
 *     """
 *     def __init__(self, detector="detector", shape=None):             # <<<<<<<<<<<<<<
 *         """
 *         @param detector: detector instance or detector name
 */
  __pyx_k_tuple_130 = PyTuple_New(4); if (unlikely(!__pyx_k_tuple_130)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_130);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__self));
  PyTuple_SET_ITEM(__pyx_k_tuple_130, 0, ((PyObject *)__pyx_n_s__self));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__self));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__detector));
  PyTuple_SET_ITEM(__pyx_k_tuple_130, 1, ((PyObject *)__pyx_n_s__detector));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__detector));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__shape));
  PyTuple_SET_ITEM(__pyx_k_tuple_130, 2, ((PyObject *)__pyx_n_s__shape));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__shape));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__i));
  PyTuple_SET_ITEM(__pyx_k_tuple_130, 3, ((PyObject *)__pyx_n_s__i));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__i));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_130));
  __pyx_k_codeobj_131 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_130, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_132, __pyx_n_s____init__, 532, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_131)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  /* "_distortion.pyx":532
 * 
 *     """
 *     def __init__(self, detector="detector", shape=None):             # <<<<<<<<<<<<<<
 *         """
 *         @param detector: detector instance or detector name
 */
  __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11_distortion_10Distortion_1__init__, 0, NULL, __pyx_n_s___distortion, ((PyObject *)__pyx_k_codeobj_131)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, ((PyObject *)__pyx_k_tuple_133));
  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____init__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_k_tuple_133 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_133)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_133);
  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_n_s__detector)));
  PyTuple_SET_ITEM(__pyx_k_tuple_133, 0, ((PyObject *)((PyObject*)__pyx_n_s__detector)));
  __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_n_s__detector)));
  __Pyx_INCREF(((PyObject *)Py_None));
  PyTuple_SET_ITEM(__pyx_k_tuple_133, 1, ((PyObject *)Py_None));
  __Pyx_GIVEREF(((PyObject *)Py_None));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_133));
 533:         """
 534:         @param detector: detector instance or detector name
 535:         """
 536:         if type(detector) in types.StringTypes:
  /* "_distortion.pyx":536
 *         @param detector: detector instance or detector name
 *         """
 *         if type(detector) in types.StringTypes:             # <<<<<<<<<<<<<<
 *             self.detector = detector_factory(detector)
 *         else:  # we assume it is a Detector instance
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__types); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__StringTypes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __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_PySequence_Contains(((PyObject *)Py_TYPE(__pyx_v_detector)), __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
 537:             self.detector = detector_factory(detector)
    /* "_distortion.pyx":537
 *         """
 *         if type(detector) in types.StringTypes:
 *             self.detector = detector_factory(detector)             # <<<<<<<<<<<<<<
 *         else:  # we assume it is a Detector instance
 *             self.detector = detector
 */
    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__detector_factory); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_detector);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_detector);
    __Pyx_GIVEREF(__pyx_v_detector);
    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__detector, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3;
  }
  /*else*/ {
 538:         else:  # we assume it is a Detector instance
 539:             self.detector = detector
    /* "_distortion.pyx":539
 *             self.detector = detector_factory(detector)
 *         else:  # we assume it is a Detector instance
 *             self.detector = detector             # <<<<<<<<<<<<<<
 *         if "max_shape" in dir(self.detector):
 *             self.shape = self.detector.max_shape
 */
    if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__detector, __pyx_v_detector) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L3:;
 540:         if "max_shape" in dir(self.detector):
  /* "_distortion.pyx":540
 *         else:  # we assume it is a Detector instance
 *             self.detector = detector
 *         if "max_shape" in dir(self.detector):             # <<<<<<<<<<<<<<
 *             self.shape = self.detector.max_shape
 *         else:
 */
  __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__detector); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PyObject_Dir(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_n_s__max_shape), __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
 541:             self.shape = self.detector.max_shape
    /* "_distortion.pyx":541
 *             self.detector = detector
 *         if "max_shape" in dir(self.detector):
 *             self.shape = self.detector.max_shape             # <<<<<<<<<<<<<<
 *         else:
 *             self.shape = shape
 */
    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__detector); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__max_shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__shape, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4;
  }
  /*else*/ {
 542:         else:
 543:             self.shape = shape
    /* "_distortion.pyx":543
 *             self.shape = self.detector.max_shape
 *         else:
 *             self.shape = shape             # <<<<<<<<<<<<<<
 *         self.shape = tuple([int(i) for i in self.shape])
 *         self._sem = threading.Semaphore()
 */
    if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__shape, __pyx_v_shape) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L4:;
 544:         self.shape = tuple([int(i) for i in self.shape])
  /* "_distortion.pyx":544
 *         else:
 *             self.shape = shape
 *         self.shape = tuple([int(i) for i in self.shape])             # <<<<<<<<<<<<<<
 *         self._sem = threading.Semaphore()
 *         self.lut_size = None
 */
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = Py_TYPE(__pyx_t_2)->tp_iternext;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_2)) {
      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_2)) {
      if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_1 = __pyx_t_6(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        if (PyErr_Occurred()) {
          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF(__pyx_v_i);
    __pyx_v_i = __pyx_t_1;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    if (unlikely(__Pyx_PyList_Append(__pyx_t_4, (PyObject*)__pyx_t_7))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = ((PyObject *)PyList_AsTuple(__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__shape, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
 545:         self._sem = threading.Semaphore()
  /* "_distortion.pyx":545
 *             self.shape = shape
 *         self.shape = tuple([int(i) for i in self.shape])
 *         self._sem = threading.Semaphore()             # <<<<<<<<<<<<<<
 *         self.lut_size = None
 *         self.pos = None
 */
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__threading); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Semaphore); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s___sem, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 546:         self.lut_size = None
  /* "_distortion.pyx":546
 *         self.shape = tuple([int(i) for i in self.shape])
 *         self._sem = threading.Semaphore()
 *         self.lut_size = None             # <<<<<<<<<<<<<<
 *         self.pos = None
 *         self.LUT = None
 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__lut_size, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 547:         self.pos = None
  /* "_distortion.pyx":547
 *         self._sem = threading.Semaphore()
 *         self.lut_size = None
 *         self.pos = None             # <<<<<<<<<<<<<<
 *         self.LUT = None
 *         self.delta0 = self.delta1 = None  # max size of an pixel on a regular grid ...
 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__pos, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 548:         self.LUT = None
  /* "_distortion.pyx":548
 *         self.lut_size = None
 *         self.pos = None
 *         self.LUT = None             # <<<<<<<<<<<<<<
 *         self.delta0 = self.delta1 = None  # max size of an pixel on a regular grid ...
 * 
 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__LUT, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 549:         self.delta0 = self.delta1 = None  # max size of an pixel on a regular grid ...
  /* "_distortion.pyx":549
 *         self.pos = None
 *         self.LUT = None
 *         self.delta0 = self.delta1 = None  # max size of an pixel on a regular grid ...             # <<<<<<<<<<<<<<
 * 
 * 
 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__delta0, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__delta1, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("_distortion.Distortion.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_10Distortion_3__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11_distortion_10Distortion_3__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_11_distortion_10Distortion_3__repr__, METH_O, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_11_distortion_10Distortion_3__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_10Distortion_2__repr__(__pyx_self, ((PyObject *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 550: 
 551: 
 552:     def __repr__(self):
/* "_distortion.pyx":552
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return os.linesep.join(["Distortion correction for detector:",
 *                                 self.detector.__repr__()])
 */

static PyObject *__pyx_pf_11_distortion_10Distortion_2__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "_distortion.pyx":552
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return os.linesep.join(["Distortion correction for detector:",
 *                                 self.detector.__repr__()])
 */
  __pyx_k_tuple_134 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_134)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_134);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__self));
  PyTuple_SET_ITEM(__pyx_k_tuple_134, 0, ((PyObject *)__pyx_n_s__self));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__self));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_134));

  /* "_distortion.pyx":552
 * 
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return os.linesep.join(["Distortion correction for detector:",
 *                                 self.detector.__repr__()])
 */
  __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11_distortion_10Distortion_3__repr__, 0, NULL, __pyx_n_s___distortion, ((PyObject *)__pyx_k_codeobj_135)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____repr__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_k_codeobj_135 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_134, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_132, __pyx_n_s____repr__, 552, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_135)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 553:         return os.linesep.join(["Distortion correction for detector:",
  /* "_distortion.pyx":553
 * 
 *     def __repr__(self):
 *         return os.linesep.join(["Distortion correction for detector:",             # <<<<<<<<<<<<<<
 *                                 self.detector.__repr__()])
 *     def calc_pos(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__os); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__linesep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__join); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 554:                                 self.detector.__repr__()])
  /* "_distortion.pyx":554
 *     def __repr__(self):
 *         return os.linesep.join(["Distortion correction for detector:",
 *                                 self.detector.__repr__()])             # <<<<<<<<<<<<<<
 *     def calc_pos(self):
 *         if self.pos is None:
 */
  __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__detector); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____repr__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_5));
  PyList_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_s_5));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5));
  PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __Pyx_GIVEREF(__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 = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
  __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("_distortion.Distortion.__repr__", __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_11_distortion_10Distortion_5calc_pos(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11_distortion_10Distortion_5calc_pos = {__Pyx_NAMESTR("calc_pos"), (PyCFunction)__pyx_pw_11_distortion_10Distortion_5calc_pos, METH_O, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_11_distortion_10Distortion_5calc_pos(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_pos (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_10Distortion_4calc_pos(__pyx_self, ((PyObject *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 555:     def calc_pos(self):
/* "_distortion.pyx":555
 *         return os.linesep.join(["Distortion correction for detector:",
 *                                 self.detector.__repr__()])
 *     def calc_pos(self):             # <<<<<<<<<<<<<<
 *         if self.pos is None:
 *             with self._sem:
 */

static PyObject *__pyx_pf_11_distortion_10Distortion_4calc_pos(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_v_pos_corners = NULL;
  PyObject *__pyx_v_d1 = NULL;
  PyObject *__pyx_v_d2 = NULL;
  PyObject *__pyx_v_pos = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_pos", 0);

  /* "_distortion.pyx":555
 *         return os.linesep.join(["Distortion correction for detector:",
 *                                 self.detector.__repr__()])
 *     def calc_pos(self):             # <<<<<<<<<<<<<<
 *         if self.pos is None:
 *             with self._sem:
 */
  __pyx_k_tuple_136 = PyTuple_New(5); if (unlikely(!__pyx_k_tuple_136)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_136);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__self));
  PyTuple_SET_ITEM(__pyx_k_tuple_136, 0, ((PyObject *)__pyx_n_s__self));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__self));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pos_corners));
  PyTuple_SET_ITEM(__pyx_k_tuple_136, 1, ((PyObject *)__pyx_n_s__pos_corners));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pos_corners));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__d1));
  PyTuple_SET_ITEM(__pyx_k_tuple_136, 2, ((PyObject *)__pyx_n_s__d1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__d1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__d2));
  PyTuple_SET_ITEM(__pyx_k_tuple_136, 3, ((PyObject *)__pyx_n_s__d2));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__d2));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pos));
  PyTuple_SET_ITEM(__pyx_k_tuple_136, 4, ((PyObject *)__pyx_n_s__pos));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pos));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_136));

  /* "_distortion.pyx":555
 *         return os.linesep.join(["Distortion correction for detector:",
 *                                 self.detector.__repr__()])
 *     def calc_pos(self):             # <<<<<<<<<<<<<<
 *         if self.pos is None:
 *             with self._sem:
 */
  __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11_distortion_10Distortion_5calc_pos, 0, NULL, __pyx_n_s___distortion, ((PyObject *)__pyx_k_codeobj_137)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__calc_pos, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_k_codeobj_137 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_136, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_132, __pyx_n_s__calc_pos, 555, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_137)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 556:         if self.pos is None:
  /* "_distortion.pyx":556
 *                                 self.detector.__repr__()])
 *     def calc_pos(self):
 *         if self.pos is None:             # <<<<<<<<<<<<<<
 *             with self._sem:
 *                 if self.pos is None:
 */
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__pos); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
 557:             with self._sem:
    /* "_distortion.pyx":557
 *     def calc_pos(self):
 *         if self.pos is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.pos is None:
 *                     pos_corners = numpy.empty((self.shape[0] + 1, self.shape[1] + 1, 2), dtype=numpy.float64)
 */
    /*with:*/ {
      __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___sem); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____exit__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      /*try:*/ {
        {
          __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_6);
          __Pyx_XGOTREF(__pyx_t_7);
          __Pyx_XGOTREF(__pyx_t_8);
          /*try:*/ {

          /* "_distortion.pyx":557
 *     def calc_pos(self):
 *         if self.pos is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.pos is None:
 *                     pos_corners = numpy.empty((self.shape[0] + 1, self.shape[1] + 1, 2), dtype=numpy.float64)
 */
          /*except:*/ {
            __Pyx_AddTraceback("_distortion.Distortion.calc_pos", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_12, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_10);
            PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_10);
            __Pyx_GIVEREF(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_12);
            PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_12);
            __Pyx_GIVEREF(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_15 = PyObject_Call(__pyx_t_3, __pyx_t_5, NULL);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
            __Pyx_GOTREF(__pyx_t_15);
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
            __pyx_t_16 = (!__pyx_t_2);
            if (__pyx_t_16) {
              __Pyx_GIVEREF(__pyx_t_10);
              __Pyx_GIVEREF(__pyx_t_12);
              __Pyx_GIVEREF(__pyx_t_1);
              __Pyx_ErrRestore(__pyx_t_10, __pyx_t_12, __pyx_t_1);
              __pyx_t_10 = 0; __pyx_t_12 = 0; __pyx_t_1 = 0; 
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
              goto __pyx_L21;
            }
            __pyx_L21:;
            __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            goto __pyx_L9_exception_handled;
          }
          __pyx_L10_except_error:;
          __Pyx_XGIVEREF(__pyx_t_6);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
          goto __pyx_L1_error;
          __pyx_L9_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_6);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
          __pyx_L15_try_end:;
        }
      }
      /*finally:*/ {
        if (__pyx_t_3) {
          __pyx_t_8 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_59, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
      }
      goto __pyx_L22;
      __pyx_L4_error:;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L1_error;
      __pyx_L22:;
    }
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "_distortion.pyx":557
 *     def calc_pos(self):
 *         if self.pos is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.pos is None:
 *                     pos_corners = numpy.empty((self.shape[0] + 1, self.shape[1] + 1, 2), dtype=numpy.float64)
 */
  __pyx_k_tuple_59 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_59);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_59, 0, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_59, 1, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_59, 2, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_59));
 558:                 if self.pos is None:
            /* "_distortion.pyx":558
 *         if self.pos is None:
 *             with self._sem:
 *                 if self.pos is None:             # <<<<<<<<<<<<<<
 *                     pos_corners = numpy.empty((self.shape[0] + 1, self.shape[1] + 1, 2), dtype=numpy.float64)
 *                     d1 = numpy.outer(numpy.arange(self.shape[0] + 1, dtype=numpy.float64), numpy.ones(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 */
            __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__pos); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_2 = (__pyx_t_1 == Py_None);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (__pyx_t_2) {
 559:                     pos_corners = numpy.empty((self.shape[0] + 1, self.shape[1] + 1, 2), dtype=numpy.float64)
              /* "_distortion.pyx":559
 *             with self._sem:
 *                 if self.pos is None:
 *                     pos_corners = numpy.empty((self.shape[0] + 1, self.shape[1] + 1, 2), dtype=numpy.float64)             # <<<<<<<<<<<<<<
 *                     d1 = numpy.outer(numpy.arange(self.shape[0] + 1, dtype=numpy.float64), numpy.ones(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 *                     d2 = numpy.outer(numpy.ones(self.shape[0] + 1, dtype=numpy.float64), numpy.arange(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 */
              __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_4, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_t_4 = PyNumber_Add(__pyx_t_9, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_4);
              __Pyx_GIVEREF(__pyx_t_4);
              __Pyx_INCREF(__pyx_int_2);
              PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_int_2);
              __Pyx_GIVEREF(__pyx_int_2);
              __pyx_t_1 = 0;
              __pyx_t_4 = 0;
              __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_4);
              PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_9));
              __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
              __pyx_t_9 = 0;
              __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_9));
              __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_10 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float64); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
              __pyx_v_pos_corners = __pyx_t_10;
              __pyx_t_10 = 0;
 560:                     d1 = numpy.outer(numpy.arange(self.shape[0] + 1, dtype=numpy.float64), numpy.ones(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
              /* "_distortion.pyx":560
 *                 if self.pos is None:
 *                     pos_corners = numpy.empty((self.shape[0] + 1, self.shape[1] + 1, 2), dtype=numpy.float64)
 *                     d1 = numpy.outer(numpy.arange(self.shape[0] + 1, dtype=numpy.float64), numpy.ones(self.shape[1] + 1, dtype=numpy.float64)) - 0.5             # <<<<<<<<<<<<<<
 *                     d2 = numpy.outer(numpy.ones(self.shape[0] + 1, dtype=numpy.float64), numpy.arange(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 *                     pos_corners[:, :, 0], pos_corners[:, :, 1] = self.detector.calc_cartesian_positions(d1, d2)
 */
              __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_9 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__outer); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_4 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__arange); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_10, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyNumber_Add(__pyx_t_5, __pyx_int_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_10);
              __Pyx_GIVEREF(__pyx_t_10);
              __pyx_t_10 = 0;
              __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_10));
              __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_11 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float64); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_11 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
              __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_5 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__ones); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_10, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyNumber_Add(__pyx_t_4, __pyx_int_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __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 = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_4);
              PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_10);
              __Pyx_GIVEREF(__pyx_t_10);
              __pyx_t_10 = 0;
              __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_10));
              __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_12 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float64); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __pyx_t_12 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
              __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11);
              __Pyx_GIVEREF(__pyx_t_11);
              PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_12);
              __Pyx_GIVEREF(__pyx_t_12);
              __pyx_t_11 = 0;
              __pyx_t_12 = 0;
              __pyx_t_12 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
              __pyx_t_10 = PyFloat_FromDouble(0.5); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_9 = PyNumber_Subtract(__pyx_t_12, __pyx_t_10); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_v_d1 = __pyx_t_9;
              __pyx_t_9 = 0;
 561:                     d2 = numpy.outer(numpy.ones(self.shape[0] + 1, dtype=numpy.float64), numpy.arange(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
              /* "_distortion.pyx":561
 *                     pos_corners = numpy.empty((self.shape[0] + 1, self.shape[1] + 1, 2), dtype=numpy.float64)
 *                     d1 = numpy.outer(numpy.arange(self.shape[0] + 1, dtype=numpy.float64), numpy.ones(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 *                     d2 = numpy.outer(numpy.ones(self.shape[0] + 1, dtype=numpy.float64), numpy.arange(self.shape[1] + 1, dtype=numpy.float64)) - 0.5             # <<<<<<<<<<<<<<
 *                     pos_corners[:, :, 0], pos_corners[:, :, 1] = self.detector.calc_cartesian_positions(d1, d2)
 *                     pos_corners[:, :, 0] /= self.detector.pixel1
 */
              __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_10 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__outer); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_12 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__ones); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_9, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_11) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = PyNumber_Add(__pyx_t_11, __pyx_int_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_11);
              PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
              __Pyx_GIVEREF(__pyx_t_9);
              __pyx_t_9 = 0;
              __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_9));
              __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__float64); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
              __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_11 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__arange); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_9, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = PyNumber_Add(__pyx_t_12, __pyx_int_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_9);
              __Pyx_GIVEREF(__pyx_t_9);
              __pyx_t_9 = 0;
              __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_9));
              __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__float64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_12), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
              __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_5 = 0;
              __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
              __pyx_t_9 = PyFloat_FromDouble(0.5); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_10 = PyNumber_Subtract(__pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_v_d2 = __pyx_t_10;
              __pyx_t_10 = 0;
 562:                     pos_corners[:, :, 0], pos_corners[:, :, 1] = self.detector.calc_cartesian_positions(d1, d2)
              /* "_distortion.pyx":562
 *                     d1 = numpy.outer(numpy.arange(self.shape[0] + 1, dtype=numpy.float64), numpy.ones(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 *                     d2 = numpy.outer(numpy.ones(self.shape[0] + 1, dtype=numpy.float64), numpy.arange(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 *                     pos_corners[:, :, 0], pos_corners[:, :, 1] = self.detector.calc_cartesian_positions(d1, d2)             # <<<<<<<<<<<<<<
 *                     pos_corners[:, :, 0] /= self.detector.pixel1
 *                     pos_corners[:, :, 1] /= self.detector.pixel2
 */
              __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__detector); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_9 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s_6); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_INCREF(__pyx_v_d1);
              PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_d1);
              __Pyx_GIVEREF(__pyx_v_d1);
              __Pyx_INCREF(__pyx_v_d2);
              PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_d2);
              __Pyx_GIVEREF(__pyx_v_d2);
              __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
              if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
                PyObject* sequence = __pyx_t_1;
                #if CYTHON_COMPILING_IN_CPYTHON
                Py_ssize_t size = Py_SIZE(sequence);
                #else
                Py_ssize_t size = PySequence_Size(sequence);
                #endif
                if (unlikely(size != 2)) {
                  if (size > 2) __Pyx_RaiseTooManyValuesError(2);
                  else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
                }
                #if CYTHON_COMPILING_IN_CPYTHON
                if (likely(PyTuple_CheckExact(sequence))) {
                  __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); 
                  __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
                } else {
                  __pyx_t_10 = PyList_GET_ITEM(sequence, 0); 
                  __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
                }
                __Pyx_INCREF(__pyx_t_10);
                __Pyx_INCREF(__pyx_t_9);
                #else
                __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
                __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
                #endif
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              } else
              {
                Py_ssize_t index = -1;
                __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
                __Pyx_GOTREF(__pyx_t_5);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __pyx_t_13 = Py_TYPE(__pyx_t_5)->tp_iternext;
                index = 0; __pyx_t_10 = __pyx_t_13(__pyx_t_5); if (unlikely(!__pyx_t_10)) goto __pyx_L17_unpacking_failed;
                __Pyx_GOTREF(__pyx_t_10);
                index = 1; __pyx_t_9 = __pyx_t_13(__pyx_t_5); if (unlikely(!__pyx_t_9)) goto __pyx_L17_unpacking_failed;
                __Pyx_GOTREF(__pyx_t_9);
                if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
                __pyx_t_13 = NULL;
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                goto __pyx_L18_unpacking_done;
                __pyx_L17_unpacking_failed:;
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __pyx_t_13 = NULL;
                if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
                __pyx_L18_unpacking_done:;
              }

  /* "_distortion.pyx":562
 *                     d1 = numpy.outer(numpy.arange(self.shape[0] + 1, dtype=numpy.float64), numpy.ones(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 *                     d2 = numpy.outer(numpy.ones(self.shape[0] + 1, dtype=numpy.float64), numpy.arange(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 *                     pos_corners[:, :, 0], pos_corners[:, :, 1] = self.detector.calc_cartesian_positions(d1, d2)             # <<<<<<<<<<<<<<
 *                     pos_corners[:, :, 0] /= self.detector.pixel1
 *                     pos_corners[:, :, 1] /= self.detector.pixel2
 */
  __pyx_k_slice_7 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_7);
  __Pyx_GIVEREF(__pyx_k_slice_7);
  __pyx_k_slice_8 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_8);
  __Pyx_GIVEREF(__pyx_k_slice_8);
              if (PyObject_SetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_9), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_k_tuple_9 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_9);
  __Pyx_INCREF(__pyx_k_slice_7);
  PyTuple_SET_ITEM(__pyx_k_tuple_9, 0, __pyx_k_slice_7);
  __Pyx_GIVEREF(__pyx_k_slice_7);
  __Pyx_INCREF(__pyx_k_slice_8);
  PyTuple_SET_ITEM(__pyx_k_tuple_9, 1, __pyx_k_slice_8);
  __Pyx_GIVEREF(__pyx_k_slice_8);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_k_tuple_9, 2, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_9));
  __pyx_k_slice_10 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_10);
  __Pyx_GIVEREF(__pyx_k_slice_10);
  __pyx_k_slice_11 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_11);
  __Pyx_GIVEREF(__pyx_k_slice_11);
              if (PyObject_SetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_12), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_k_tuple_12 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_12);
  __Pyx_INCREF(__pyx_k_slice_10);
  PyTuple_SET_ITEM(__pyx_k_tuple_12, 0, __pyx_k_slice_10);
  __Pyx_GIVEREF(__pyx_k_slice_10);
  __Pyx_INCREF(__pyx_k_slice_11);
  PyTuple_SET_ITEM(__pyx_k_tuple_12, 1, __pyx_k_slice_11);
  __Pyx_GIVEREF(__pyx_k_slice_11);
  __Pyx_INCREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_k_tuple_12, 2, __pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_12));
 563:                     pos_corners[:, :, 0] /= self.detector.pixel1
  /* "_distortion.pyx":563
 *                     d2 = numpy.outer(numpy.ones(self.shape[0] + 1, dtype=numpy.float64), numpy.arange(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 *                     pos_corners[:, :, 0], pos_corners[:, :, 1] = self.detector.calc_cartesian_positions(d1, d2)
 *                     pos_corners[:, :, 0] /= self.detector.pixel1             # <<<<<<<<<<<<<<
 *                     pos_corners[:, :, 1] /= self.detector.pixel2
 *                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)
 */
  __pyx_k_slice_13 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_13);
  __Pyx_GIVEREF(__pyx_k_slice_13);
  __pyx_k_slice_14 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_14);
  __Pyx_GIVEREF(__pyx_k_slice_14);

              /* "_distortion.pyx":563
 *                     d2 = numpy.outer(numpy.ones(self.shape[0] + 1, dtype=numpy.float64), numpy.arange(self.shape[1] + 1, dtype=numpy.float64)) - 0.5
 *                     pos_corners[:, :, 0], pos_corners[:, :, 1] = self.detector.calc_cartesian_positions(d1, d2)
 *                     pos_corners[:, :, 0] /= self.detector.pixel1             # <<<<<<<<<<<<<<
 *                     pos_corners[:, :, 1] /= self.detector.pixel2
 *                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)
 */
              __Pyx_INCREF(((PyObject *)__pyx_k_tuple_15));
              __pyx_t_14 = __pyx_k_tuple_15;
              __pyx_t_1 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_t_14)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_9 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__detector); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_10 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__pixel1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = __Pyx_PyNumber_InPlaceDivide(__pyx_t_1, __pyx_t_10); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              if (PyObject_SetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_t_14), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0;
  __pyx_k_tuple_15 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_15);
  __Pyx_INCREF(__pyx_k_slice_13);
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 0, __pyx_k_slice_13);
  __Pyx_GIVEREF(__pyx_k_slice_13);
  __Pyx_INCREF(__pyx_k_slice_14);
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 1, __pyx_k_slice_14);
  __Pyx_GIVEREF(__pyx_k_slice_14);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 2, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_15));
 564:                     pos_corners[:, :, 1] /= self.detector.pixel2
  /* "_distortion.pyx":564
 *                     pos_corners[:, :, 0], pos_corners[:, :, 1] = self.detector.calc_cartesian_positions(d1, d2)
 *                     pos_corners[:, :, 0] /= self.detector.pixel1
 *                     pos_corners[:, :, 1] /= self.detector.pixel2             # <<<<<<<<<<<<<<
 *                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)
 *                     pos[:, :, 0, :] = pos_corners[:-1, :-1]
 */
  __pyx_k_slice_16 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_16);
  __Pyx_GIVEREF(__pyx_k_slice_16);
  __pyx_k_slice_17 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_17);
  __Pyx_GIVEREF(__pyx_k_slice_17);

              /* "_distortion.pyx":564
 *                     pos_corners[:, :, 0], pos_corners[:, :, 1] = self.detector.calc_cartesian_positions(d1, d2)
 *                     pos_corners[:, :, 0] /= self.detector.pixel1
 *                     pos_corners[:, :, 1] /= self.detector.pixel2             # <<<<<<<<<<<<<<
 *                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)
 *                     pos[:, :, 0, :] = pos_corners[:-1, :-1]
 */
              __Pyx_INCREF(((PyObject *)__pyx_k_tuple_18));
              __pyx_t_14 = __pyx_k_tuple_18;
              __pyx_t_9 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_t_14)); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__detector); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__pixel2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = __Pyx_PyNumber_InPlaceDivide(__pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (PyObject_SetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_t_14), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0;
  __pyx_k_tuple_18 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_18);
  __Pyx_INCREF(__pyx_k_slice_16);
  PyTuple_SET_ITEM(__pyx_k_tuple_18, 0, __pyx_k_slice_16);
  __Pyx_GIVEREF(__pyx_k_slice_16);
  __Pyx_INCREF(__pyx_k_slice_17);
  PyTuple_SET_ITEM(__pyx_k_tuple_18, 1, __pyx_k_slice_17);
  __Pyx_GIVEREF(__pyx_k_slice_17);
  __Pyx_INCREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_k_tuple_18, 2, __pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_18));
 565:                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)
              /* "_distortion.pyx":565
 *                     pos_corners[:, :, 0] /= self.detector.pixel1
 *                     pos_corners[:, :, 1] /= self.detector.pixel2
 *                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)             # <<<<<<<<<<<<<<
 *                     pos[:, :, 0, :] = pos_corners[:-1, :-1]
 *                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]
 */
              __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_10, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_10, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9);
              __Pyx_GIVEREF(__pyx_t_9);
              PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_5);
              __Pyx_INCREF(__pyx_int_4);
              PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_int_4);
              __Pyx_GIVEREF(__pyx_int_4);
              __Pyx_INCREF(__pyx_int_2);
              PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_int_2);
              __Pyx_GIVEREF(__pyx_int_2);
              __pyx_t_9 = 0;
              __pyx_t_5 = 0;
              __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_10));
              __Pyx_GIVEREF(((PyObject *)__pyx_t_10));
              __pyx_t_10 = 0;
              __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_10));
              __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_12 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__float32); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __pyx_t_12 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
              __pyx_v_pos = __pyx_t_12;
              __pyx_t_12 = 0;
 566:                     pos[:, :, 0, :] = pos_corners[:-1, :-1]
  /* "_distortion.pyx":566
 *                     pos_corners[:, :, 1] /= self.detector.pixel2
 *                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)
 *                     pos[:, :, 0, :] = pos_corners[:-1, :-1]             # <<<<<<<<<<<<<<
 *                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]
 *                     pos[:, :, 2, :] = pos_corners[1: , 1: ]
 */
  __pyx_k_slice_19 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_k_slice_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_19);
  __Pyx_GIVEREF(__pyx_k_slice_19);
  __pyx_k_slice_20 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_k_slice_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_20);
  __Pyx_GIVEREF(__pyx_k_slice_20);

              /* "_distortion.pyx":566
 *                     pos_corners[:, :, 1] /= self.detector.pixel2
 *                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)
 *                     pos[:, :, 0, :] = pos_corners[:-1, :-1]             # <<<<<<<<<<<<<<
 *                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]
 *                     pos[:, :, 2, :] = pos_corners[1: , 1: ]
 */
              __pyx_t_12 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_21)); if (!__pyx_t_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
  __pyx_k_tuple_21 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_21);
  __Pyx_INCREF(__pyx_k_slice_19);
  PyTuple_SET_ITEM(__pyx_k_tuple_21, 0, __pyx_k_slice_19);
  __Pyx_GIVEREF(__pyx_k_slice_19);
  __Pyx_INCREF(__pyx_k_slice_20);
  PyTuple_SET_ITEM(__pyx_k_tuple_21, 1, __pyx_k_slice_20);
  __Pyx_GIVEREF(__pyx_k_slice_20);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_21));
  __pyx_k_slice_22 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_22);
  __Pyx_GIVEREF(__pyx_k_slice_22);
  __pyx_k_slice_23 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_23);
  __Pyx_GIVEREF(__pyx_k_slice_23);
  __pyx_k_slice_24 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_24);
  __Pyx_GIVEREF(__pyx_k_slice_24);
              if (PyObject_SetItem(__pyx_v_pos, ((PyObject *)__pyx_k_tuple_25), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_k_tuple_25 = PyTuple_New(4); if (unlikely(!__pyx_k_tuple_25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_25);
  __Pyx_INCREF(__pyx_k_slice_22);
  PyTuple_SET_ITEM(__pyx_k_tuple_25, 0, __pyx_k_slice_22);
  __Pyx_GIVEREF(__pyx_k_slice_22);
  __Pyx_INCREF(__pyx_k_slice_23);
  PyTuple_SET_ITEM(__pyx_k_tuple_25, 1, __pyx_k_slice_23);
  __Pyx_GIVEREF(__pyx_k_slice_23);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_k_tuple_25, 2, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __Pyx_INCREF(__pyx_k_slice_24);
  PyTuple_SET_ITEM(__pyx_k_tuple_25, 3, __pyx_k_slice_24);
  __Pyx_GIVEREF(__pyx_k_slice_24);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
 567:                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]
  /* "_distortion.pyx":567
 *                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)
 *                     pos[:, :, 0, :] = pos_corners[:-1, :-1]
 *                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]             # <<<<<<<<<<<<<<
 *                     pos[:, :, 2, :] = pos_corners[1: , 1: ]
 *                     pos[:, :, 3, :] = pos_corners[1: , :-1]
 */
  __pyx_k_slice_26 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_k_slice_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_26);
  __Pyx_GIVEREF(__pyx_k_slice_26);
  __pyx_k_slice_27 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_k_slice_27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_27);
  __Pyx_GIVEREF(__pyx_k_slice_27);

              /* "_distortion.pyx":567
 *                     pos = numpy.empty((self.shape[0], self.shape[1], 4, 2), dtype=numpy.float32)
 *                     pos[:, :, 0, :] = pos_corners[:-1, :-1]
 *                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]             # <<<<<<<<<<<<<<
 *                     pos[:, :, 2, :] = pos_corners[1: , 1: ]
 *                     pos[:, :, 3, :] = pos_corners[1: , :-1]
 */
              __pyx_t_12 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_28)); if (!__pyx_t_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
  __pyx_k_tuple_28 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_28);
  __Pyx_INCREF(__pyx_k_slice_26);
  PyTuple_SET_ITEM(__pyx_k_tuple_28, 0, __pyx_k_slice_26);
  __Pyx_GIVEREF(__pyx_k_slice_26);
  __Pyx_INCREF(__pyx_k_slice_27);
  PyTuple_SET_ITEM(__pyx_k_tuple_28, 1, __pyx_k_slice_27);
  __Pyx_GIVEREF(__pyx_k_slice_27);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_28));
  __pyx_k_slice_29 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_29);
  __Pyx_GIVEREF(__pyx_k_slice_29);
  __pyx_k_slice_30 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_30);
  __Pyx_GIVEREF(__pyx_k_slice_30);
  __pyx_k_slice_31 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_31);
  __Pyx_GIVEREF(__pyx_k_slice_31);
              if (PyObject_SetItem(__pyx_v_pos, ((PyObject *)__pyx_k_tuple_32), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_k_tuple_32 = PyTuple_New(4); if (unlikely(!__pyx_k_tuple_32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_32);
  __Pyx_INCREF(__pyx_k_slice_29);
  PyTuple_SET_ITEM(__pyx_k_tuple_32, 0, __pyx_k_slice_29);
  __Pyx_GIVEREF(__pyx_k_slice_29);
  __Pyx_INCREF(__pyx_k_slice_30);
  PyTuple_SET_ITEM(__pyx_k_tuple_32, 1, __pyx_k_slice_30);
  __Pyx_GIVEREF(__pyx_k_slice_30);
  __Pyx_INCREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_k_tuple_32, 2, __pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  __Pyx_INCREF(__pyx_k_slice_31);
  PyTuple_SET_ITEM(__pyx_k_tuple_32, 3, __pyx_k_slice_31);
  __Pyx_GIVEREF(__pyx_k_slice_31);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_32));
 568:                     pos[:, :, 2, :] = pos_corners[1: , 1: ]
  /* "_distortion.pyx":568
 *                     pos[:, :, 0, :] = pos_corners[:-1, :-1]
 *                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]
 *                     pos[:, :, 2, :] = pos_corners[1: , 1: ]             # <<<<<<<<<<<<<<
 *                     pos[:, :, 3, :] = pos_corners[1: , :-1]
 *                     self.pos = pos
 */
  __pyx_k_slice_33 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_k_slice_33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_33);
  __Pyx_GIVEREF(__pyx_k_slice_33);
  __pyx_k_slice_34 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_k_slice_34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_34);
  __Pyx_GIVEREF(__pyx_k_slice_34);

              /* "_distortion.pyx":568
 *                     pos[:, :, 0, :] = pos_corners[:-1, :-1]
 *                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]
 *                     pos[:, :, 2, :] = pos_corners[1: , 1: ]             # <<<<<<<<<<<<<<
 *                     pos[:, :, 3, :] = pos_corners[1: , :-1]
 *                     self.pos = pos
 */
              __pyx_t_12 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_35)); if (!__pyx_t_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
  __pyx_k_tuple_35 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_35);
  __Pyx_INCREF(__pyx_k_slice_33);
  PyTuple_SET_ITEM(__pyx_k_tuple_35, 0, __pyx_k_slice_33);
  __Pyx_GIVEREF(__pyx_k_slice_33);
  __Pyx_INCREF(__pyx_k_slice_34);
  PyTuple_SET_ITEM(__pyx_k_tuple_35, 1, __pyx_k_slice_34);
  __Pyx_GIVEREF(__pyx_k_slice_34);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_35));
  __pyx_k_slice_36 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_36);
  __Pyx_GIVEREF(__pyx_k_slice_36);
  __pyx_k_slice_37 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_37);
  __Pyx_GIVEREF(__pyx_k_slice_37);
  __pyx_k_slice_38 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_38);
  __Pyx_GIVEREF(__pyx_k_slice_38);
              if (PyObject_SetItem(__pyx_v_pos, ((PyObject *)__pyx_k_tuple_39), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_k_tuple_39 = PyTuple_New(4); if (unlikely(!__pyx_k_tuple_39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_39);
  __Pyx_INCREF(__pyx_k_slice_36);
  PyTuple_SET_ITEM(__pyx_k_tuple_39, 0, __pyx_k_slice_36);
  __Pyx_GIVEREF(__pyx_k_slice_36);
  __Pyx_INCREF(__pyx_k_slice_37);
  PyTuple_SET_ITEM(__pyx_k_tuple_39, 1, __pyx_k_slice_37);
  __Pyx_GIVEREF(__pyx_k_slice_37);
  __Pyx_INCREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_k_tuple_39, 2, __pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  __Pyx_INCREF(__pyx_k_slice_38);
  PyTuple_SET_ITEM(__pyx_k_tuple_39, 3, __pyx_k_slice_38);
  __Pyx_GIVEREF(__pyx_k_slice_38);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_39));
 569:                     pos[:, :, 3, :] = pos_corners[1: , :-1]
  /* "_distortion.pyx":569
 *                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]
 *                     pos[:, :, 2, :] = pos_corners[1: , 1: ]
 *                     pos[:, :, 3, :] = pos_corners[1: , :-1]             # <<<<<<<<<<<<<<
 *                     self.pos = pos
 *                     self.delta0 = int((numpy.ceil(pos_corners[1:, :, 0]) - numpy.floor(pos_corners[:-1, :, 0])).max())
 */
  __pyx_k_slice_40 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_k_slice_40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_40);
  __Pyx_GIVEREF(__pyx_k_slice_40);
  __pyx_k_slice_41 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_k_slice_41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_41);
  __Pyx_GIVEREF(__pyx_k_slice_41);

              /* "_distortion.pyx":569
 *                     pos[:, :, 1, :] = pos_corners[:-1, 1: ]
 *                     pos[:, :, 2, :] = pos_corners[1: , 1: ]
 *                     pos[:, :, 3, :] = pos_corners[1: , :-1]             # <<<<<<<<<<<<<<
 *                     self.pos = pos
 *                     self.delta0 = int((numpy.ceil(pos_corners[1:, :, 0]) - numpy.floor(pos_corners[:-1, :, 0])).max())
 */
              __pyx_t_12 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_42)); if (!__pyx_t_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
  __pyx_k_tuple_42 = PyTuple_New(2); if (unlikely(!__pyx_k_tuple_42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_42);
  __Pyx_INCREF(__pyx_k_slice_40);
  PyTuple_SET_ITEM(__pyx_k_tuple_42, 0, __pyx_k_slice_40);
  __Pyx_GIVEREF(__pyx_k_slice_40);
  __Pyx_INCREF(__pyx_k_slice_41);
  PyTuple_SET_ITEM(__pyx_k_tuple_42, 1, __pyx_k_slice_41);
  __Pyx_GIVEREF(__pyx_k_slice_41);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_42));
  __pyx_k_slice_43 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_43);
  __Pyx_GIVEREF(__pyx_k_slice_43);
  __pyx_k_slice_44 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_44);
  __Pyx_GIVEREF(__pyx_k_slice_44);
  __pyx_k_slice_45 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_45);
  __Pyx_GIVEREF(__pyx_k_slice_45);
              if (PyObject_SetItem(__pyx_v_pos, ((PyObject *)__pyx_k_tuple_46), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_k_tuple_46 = PyTuple_New(4); if (unlikely(!__pyx_k_tuple_46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_46);
  __Pyx_INCREF(__pyx_k_slice_43);
  PyTuple_SET_ITEM(__pyx_k_tuple_46, 0, __pyx_k_slice_43);
  __Pyx_GIVEREF(__pyx_k_slice_43);
  __Pyx_INCREF(__pyx_k_slice_44);
  PyTuple_SET_ITEM(__pyx_k_tuple_46, 1, __pyx_k_slice_44);
  __Pyx_GIVEREF(__pyx_k_slice_44);
  __Pyx_INCREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_k_tuple_46, 2, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  __Pyx_INCREF(__pyx_k_slice_45);
  PyTuple_SET_ITEM(__pyx_k_tuple_46, 3, __pyx_k_slice_45);
  __Pyx_GIVEREF(__pyx_k_slice_45);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_46));
 570:                     self.pos = pos
              /* "_distortion.pyx":570
 *                     pos[:, :, 2, :] = pos_corners[1: , 1: ]
 *                     pos[:, :, 3, :] = pos_corners[1: , :-1]
 *                     self.pos = pos             # <<<<<<<<<<<<<<
 *                     self.delta0 = int((numpy.ceil(pos_corners[1:, :, 0]) - numpy.floor(pos_corners[:-1, :, 0])).max())
 *                     self.delta1 = int((numpy.ceil(pos_corners[:, 1:, 1]) - numpy.floor(pos_corners[:, :-1, 1])).max())
 */
              if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__pos, __pyx_v_pos) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
 571:                     self.delta0 = int((numpy.ceil(pos_corners[1:, :, 0]) - numpy.floor(pos_corners[:-1, :, 0])).max())
              /* "_distortion.pyx":571
 *                     pos[:, :, 3, :] = pos_corners[1: , :-1]
 *                     self.pos = pos
 *                     self.delta0 = int((numpy.ceil(pos_corners[1:, :, 0]) - numpy.floor(pos_corners[:-1, :, 0])).max())             # <<<<<<<<<<<<<<
 *                     self.delta1 = int((numpy.ceil(pos_corners[:, 1:, 1]) - numpy.floor(pos_corners[:, :-1, 1])).max())
 *         return self.pos
 */
              __pyx_t_12 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __pyx_t_10 = PyObject_GetAttr(__pyx_t_12, __pyx_n_s__ceil); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;

  /* "_distortion.pyx":571
 *                     pos[:, :, 3, :] = pos_corners[1: , :-1]
 *                     self.pos = pos
 *                     self.delta0 = int((numpy.ceil(pos_corners[1:, :, 0]) - numpy.floor(pos_corners[:-1, :, 0])).max())             # <<<<<<<<<<<<<<
 *                     self.delta1 = int((numpy.ceil(pos_corners[:, 1:, 1]) - numpy.floor(pos_corners[:, :-1, 1])).max())
 *         return self.pos
 */
  __pyx_k_slice_47 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_k_slice_47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_47);
  __Pyx_GIVEREF(__pyx_k_slice_47);
  __pyx_k_slice_48 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_48);
  __Pyx_GIVEREF(__pyx_k_slice_48);
              __pyx_t_12 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_49)); if (!__pyx_t_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_12);
              __Pyx_GIVEREF(__pyx_t_12);
              __pyx_t_12 = 0;
              __pyx_t_12 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
              __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_10 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__floor); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_k_tuple_49 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_49);
  __Pyx_INCREF(__pyx_k_slice_47);
  PyTuple_SET_ITEM(__pyx_k_tuple_49, 0, __pyx_k_slice_47);
  __Pyx_GIVEREF(__pyx_k_slice_47);
  __Pyx_INCREF(__pyx_k_slice_48);
  PyTuple_SET_ITEM(__pyx_k_tuple_49, 1, __pyx_k_slice_48);
  __Pyx_GIVEREF(__pyx_k_slice_48);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_k_tuple_49, 2, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_49));
  __pyx_k_slice_50 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_k_slice_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_50);
  __Pyx_GIVEREF(__pyx_k_slice_50);
  __pyx_k_slice_51 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_51);
  __Pyx_GIVEREF(__pyx_k_slice_51);
              __pyx_t_5 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_52)); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_5);
              __pyx_t_5 = 0;
              __pyx_t_5 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
              __pyx_t_1 = PyNumber_Subtract(__pyx_t_12, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__max); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
              if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__delta0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k_tuple_52 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_52);
  __Pyx_INCREF(__pyx_k_slice_50);
  PyTuple_SET_ITEM(__pyx_k_tuple_52, 0, __pyx_k_slice_50);
  __Pyx_GIVEREF(__pyx_k_slice_50);
  __Pyx_INCREF(__pyx_k_slice_51);
  PyTuple_SET_ITEM(__pyx_k_tuple_52, 1, __pyx_k_slice_51);
  __Pyx_GIVEREF(__pyx_k_slice_51);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_k_tuple_52, 2, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_52));
 572:                     self.delta1 = int((numpy.ceil(pos_corners[:, 1:, 1]) - numpy.floor(pos_corners[:, :-1, 1])).max())
              /* "_distortion.pyx":572
 *                     self.pos = pos
 *                     self.delta0 = int((numpy.ceil(pos_corners[1:, :, 0]) - numpy.floor(pos_corners[:-1, :, 0])).max())
 *                     self.delta1 = int((numpy.ceil(pos_corners[:, 1:, 1]) - numpy.floor(pos_corners[:, :-1, 1])).max())             # <<<<<<<<<<<<<<
 *         return self.pos
 * 
 */
              __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__ceil); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "_distortion.pyx":572
 *                     self.pos = pos
 *                     self.delta0 = int((numpy.ceil(pos_corners[1:, :, 0]) - numpy.floor(pos_corners[:-1, :, 0])).max())
 *                     self.delta1 = int((numpy.ceil(pos_corners[:, 1:, 1]) - numpy.floor(pos_corners[:, :-1, 1])).max())             # <<<<<<<<<<<<<<
 *         return self.pos
 * 
 */
  __pyx_k_slice_53 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_53);
  __Pyx_GIVEREF(__pyx_k_slice_53);
  __pyx_k_slice_54 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_k_slice_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_54);
  __Pyx_GIVEREF(__pyx_k_slice_54);
              __pyx_t_1 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_55)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
              __pyx_t_12 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __pyx_t_5 = PyObject_GetAttr(__pyx_t_12, __pyx_n_s__floor); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_k_tuple_55 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_55);
  __Pyx_INCREF(__pyx_k_slice_53);
  PyTuple_SET_ITEM(__pyx_k_tuple_55, 0, __pyx_k_slice_53);
  __Pyx_GIVEREF(__pyx_k_slice_53);
  __Pyx_INCREF(__pyx_k_slice_54);
  PyTuple_SET_ITEM(__pyx_k_tuple_55, 1, __pyx_k_slice_54);
  __Pyx_GIVEREF(__pyx_k_slice_54);
  __Pyx_INCREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_k_tuple_55, 2, __pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_55));
  __pyx_k_slice_56 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_56);
  __Pyx_GIVEREF(__pyx_k_slice_56);
  __pyx_k_slice_57 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_k_slice_57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_57);
  __Pyx_GIVEREF(__pyx_k_slice_57);
              __pyx_t_12 = PyObject_GetItem(__pyx_v_pos_corners, ((PyObject *)__pyx_k_tuple_58)); if (!__pyx_t_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12);
              __Pyx_GIVEREF(__pyx_t_12);
              __pyx_t_12 = 0;
              __pyx_t_12 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
              __pyx_t_10 = PyNumber_Subtract(__pyx_t_1, __pyx_t_12); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __pyx_t_12 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__max); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __pyx_t_10 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_12);
              PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
              __Pyx_GIVEREF(__pyx_t_10);
              __pyx_t_10 = 0;
              __pyx_t_10 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
              if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__delta1, __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              goto __pyx_L16;
            }
            __pyx_L16:;
          }
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          goto __pyx_L15_try_end;
          __pyx_L8_error:;
          __Pyx_XDECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_k_tuple_58 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_58);
  __Pyx_INCREF(__pyx_k_slice_56);
  PyTuple_SET_ITEM(__pyx_k_tuple_58, 0, __pyx_k_slice_56);
  __Pyx_GIVEREF(__pyx_k_slice_56);
  __Pyx_INCREF(__pyx_k_slice_57);
  PyTuple_SET_ITEM(__pyx_k_tuple_58, 1, __pyx_k_slice_57);
  __Pyx_GIVEREF(__pyx_k_slice_57);
  __Pyx_INCREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_k_tuple_58, 2, __pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_58));
 573:         return self.pos
  /* "_distortion.pyx":573
 *                     self.delta0 = int((numpy.ceil(pos_corners[1:, :, 0]) - numpy.floor(pos_corners[:-1, :, 0])).max())
 *                     self.delta1 = int((numpy.ceil(pos_corners[:, 1:, 1]) - numpy.floor(pos_corners[:, :-1, 1])).max())
 *         return self.pos             # <<<<<<<<<<<<<<
 * 
 *     @cython.wraparound(False)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__pos); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __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_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(((PyObject *)__pyx_t_14));
  __Pyx_AddTraceback("_distortion.Distortion.calc_pos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pos_corners);
  __Pyx_XDECREF(__pyx_v_d1);
  __Pyx_XDECREF(__pyx_v_d2);
  __Pyx_XDECREF(__pyx_v_pos);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_10Distortion_7calc_LUT_size(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_11_distortion_10Distortion_6calc_LUT_size[] = "\n        Considering the \"half-CCD\" spline from ID11 which describes a (1025,2048) detector,\n        the physical location of pixels should go from:\n        [-17.48634 : 1027.0543, -22.768829 : 2028.3689]\n        We chose to discard pixels falling outside the [0:1025,0:2048] range with a lose of intensity\n\n        We keep self.pos: pos_corners will not be compatible with systems showing non adjacent pixels (like some xpads)\n\n        ";
static PyMethodDef __pyx_mdef_11_distortion_10Distortion_7calc_LUT_size = {__Pyx_NAMESTR("calc_LUT_size"), (PyCFunction)__pyx_pw_11_distortion_10Distortion_7calc_LUT_size, METH_O, __Pyx_DOCSTR(__pyx_doc_11_distortion_10Distortion_6calc_LUT_size)};
static PyObject *__pyx_pw_11_distortion_10Distortion_7calc_LUT_size(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_LUT_size (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_10Distortion_6calc_LUT_size(__pyx_self, ((PyObject *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 574: 
 575:     @cython.wraparound(False)
 576:     @cython.boundscheck(False)
 577:     def calc_LUT_size(self):
/* "_distortion.pyx":577
 *     @cython.wraparound(False)
 *     @cython.boundscheck(False)
 *     def calc_LUT_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Considering the "half-CCD" spline from ID11 which describes a (1025,2048) detector,
 */

static PyObject *__pyx_pf_11_distortion_10Distortion_6calc_LUT_size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_k;
  int __pyx_v_l;
  int __pyx_v_shape0;
  int __pyx_v_shape1;
  PyArrayObject *__pyx_v_pos = 0;
  __Pyx_memviewslice __pyx_v_pos0min = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_pos1min = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_pos0max = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_pos1max = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_lut_size = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_lut_size;
  __Pyx_Buffer __pyx_pybuffer_lut_size;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_pos;
  __Pyx_Buffer __pyx_pybuffer_pos;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_LUT_size", 0);
  __pyx_pybuffer_pos.pybuffer.buf = NULL;
  __pyx_pybuffer_pos.refcount = 0;
  __pyx_pybuffernd_pos.data = NULL;
  __pyx_pybuffernd_pos.rcbuffer = &__pyx_pybuffer_pos;
  __pyx_pybuffer_lut_size.pybuffer.buf = NULL;
  __pyx_pybuffer_lut_size.refcount = 0;
  __pyx_pybuffernd_lut_size.data = NULL;
  __pyx_pybuffernd_lut_size.rcbuffer = &__pyx_pybuffer_lut_size;

  /* "_distortion.pyx":577
 *     @cython.wraparound(False)
 *     @cython.boundscheck(False)
 *     def calc_LUT_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Considering the "half-CCD" spline from ID11 which describes a (1025,2048) detector,
 */
  __pyx_k_tuple_138 = PyTuple_New(13); if (unlikely(!__pyx_k_tuple_138)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_138);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__self));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 0, ((PyObject *)__pyx_n_s__self));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__self));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__i));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 1, ((PyObject *)__pyx_n_s__i));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__i));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__j));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 2, ((PyObject *)__pyx_n_s__j));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__j));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__k));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 3, ((PyObject *)__pyx_n_s__k));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__k));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__l));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 4, ((PyObject *)__pyx_n_s__l));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__l));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__shape0));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 5, ((PyObject *)__pyx_n_s__shape0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__shape0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__shape1));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 6, ((PyObject *)__pyx_n_s__shape1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__shape1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pos));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 7, ((PyObject *)__pyx_n_s__pos));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pos));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pos0min));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 8, ((PyObject *)__pyx_n_s__pos0min));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pos0min));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pos1min));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 9, ((PyObject *)__pyx_n_s__pos1min));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pos1min));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pos0max));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 10, ((PyObject *)__pyx_n_s__pos0max));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pos0max));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pos1max));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 11, ((PyObject *)__pyx_n_s__pos1max));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pos1max));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__lut_size));
  PyTuple_SET_ITEM(__pyx_k_tuple_138, 12, ((PyObject *)__pyx_n_s__lut_size));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__lut_size));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_138));

  /* "_distortion.pyx":577
 *     @cython.wraparound(False)
 *     @cython.boundscheck(False)
 *     def calc_LUT_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Considering the "half-CCD" spline from ID11 which describes a (1025,2048) detector,
 */
  __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11_distortion_10Distortion_7calc_LUT_size, 0, NULL, __pyx_n_s___distortion, ((PyObject *)__pyx_k_codeobj_139)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__calc_LUT_size, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_k_codeobj_139 = (PyObject*)__Pyx_PyCode_New(1, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_138, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_132, __pyx_n_s__calc_LUT_size, 577, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_139)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 578:         """
 579:         Considering the "half-CCD" spline from ID11 which describes a (1025,2048) detector,
 580:         the physical location of pixels should go from:
 581:         [-17.48634 : 1027.0543, -22.768829 : 2028.3689]
 582:         We chose to discard pixels falling outside the [0:1025,0:2048] range with a lose of intensity
 583: 
 584:         We keep self.pos: pos_corners will not be compatible with systems showing non adjacent pixels (like some xpads)
 585: 
 586:         """
 587:         cdef int i, j, k, l, shape0, shape1
 588:         cdef numpy.ndarray[numpy.float32_t, ndim = 4] pos
 589:         cdef int[:,:] pos0min, pos1min, pos0max, pos1max
 590:         cdef numpy.ndarray[numpy.int32_t, ndim = 2] lut_size
 591:         if self.pos is None:
  /* "_distortion.pyx":591
 *         cdef int[:,:] pos0min, pos1min, pos0max, pos1max
 *         cdef numpy.ndarray[numpy.int32_t, ndim = 2] lut_size
 *         if self.pos is None:             # <<<<<<<<<<<<<<
 *             pos = self.calc_pos()
 *         else:
 */
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__pos); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
 592:             pos = self.calc_pos()
    /* "_distortion.pyx":592
 *         cdef numpy.ndarray[numpy.int32_t, ndim = 2] lut_size
 *         if self.pos is None:
 *             pos = self.calc_pos()             # <<<<<<<<<<<<<<
 *         else:
 *             pos = self.pos
 */
    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__calc_pos); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_4 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pos.rcbuffer->pybuffer);
      __pyx_t_5 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pos.rcbuffer->pybuffer, (PyObject*)__pyx_t_4, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack);
      if (unlikely(__pyx_t_5 < 0)) {
        PyErr_Fetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pos.rcbuffer->pybuffer, (PyObject*)__pyx_v_pos, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        }
      }
      __pyx_pybuffernd_pos.diminfo[0].strides = __pyx_pybuffernd_pos.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pos.diminfo[0].shape = __pyx_pybuffernd_pos.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pos.diminfo[1].strides = __pyx_pybuffernd_pos.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pos.diminfo[1].shape = __pyx_pybuffernd_pos.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_pos.diminfo[2].strides = __pyx_pybuffernd_pos.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_pos.diminfo[2].shape = __pyx_pybuffernd_pos.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_pos.diminfo[3].strides = __pyx_pybuffernd_pos.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_pos.diminfo[3].shape = __pyx_pybuffernd_pos.rcbuffer->pybuffer.shape[3];
      if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_4 = 0;
    __pyx_v_pos = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L3;
  }
  /*else*/ {
 593:         else:
 594:             pos = self.pos
    /* "_distortion.pyx":594
 *             pos = self.calc_pos()
 *         else:
 *             pos = self.pos             # <<<<<<<<<<<<<<
 *         if self.lut_size is None:
 *             with self._sem:
 */
    __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__pos); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_4 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pos.rcbuffer->pybuffer);
      __pyx_t_5 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pos.rcbuffer->pybuffer, (PyObject*)__pyx_t_4, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack);
      if (unlikely(__pyx_t_5 < 0)) {
        PyErr_Fetch(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pos.rcbuffer->pybuffer, (PyObject*)__pyx_v_pos, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_8, __pyx_t_7, __pyx_t_6);
        }
      }
      __pyx_pybuffernd_pos.diminfo[0].strides = __pyx_pybuffernd_pos.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pos.diminfo[0].shape = __pyx_pybuffernd_pos.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pos.diminfo[1].strides = __pyx_pybuffernd_pos.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pos.diminfo[1].shape = __pyx_pybuffernd_pos.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_pos.diminfo[2].strides = __pyx_pybuffernd_pos.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_pos.diminfo[2].shape = __pyx_pybuffernd_pos.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_pos.diminfo[3].strides = __pyx_pybuffernd_pos.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_pos.diminfo[3].shape = __pyx_pybuffernd_pos.rcbuffer->pybuffer.shape[3];
      if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_4 = 0;
    __pyx_v_pos = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L3:;
 595:         if self.lut_size is None:
  /* "_distortion.pyx":595
 *         else:
 *             pos = self.pos
 *         if self.lut_size is None:             # <<<<<<<<<<<<<<
 *             with self._sem:
 *                 if self.lut_size is None:
 */
  __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__lut_size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = (__pyx_t_3 == Py_None);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_2) {
 596:             with self._sem:
    /* "_distortion.pyx":596
 *             pos = self.pos
 *         if self.lut_size is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.lut_size is None:
 *                     shape0, shape1 = self.shape
 */
    /*with:*/ {
      __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___sem); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s____exit__); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s____enter__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      /*try:*/ {
        {
          __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_7);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_10);
          /*try:*/ {

          /* "_distortion.pyx":596
 *             pos = self.pos
 *         if self.lut_size is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.lut_size is None:
 *                     shape0, shape1 = self.shape
 */
          /*except:*/ {
            __Pyx_AddTraceback("_distortion.Distortion.calc_LUT_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_15, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_3);
            PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_15);
            PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_15);
            __Pyx_GIVEREF(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_11);
            PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_11);
            __Pyx_GIVEREF(__pyx_t_11);
            __pyx_t_19 = PyObject_Call(__pyx_t_6, __pyx_t_9, NULL);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
            __Pyx_GOTREF(__pyx_t_19);
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
            __pyx_t_36 = (!__pyx_t_2);
            if (__pyx_t_36) {
              __Pyx_GIVEREF(__pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_15);
              __Pyx_GIVEREF(__pyx_t_11);
              __Pyx_ErrRestore(__pyx_t_3, __pyx_t_15, __pyx_t_11);
              __pyx_t_3 = 0; __pyx_t_15 = 0; __pyx_t_11 = 0; 
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
              goto __pyx_L35;
            }
            __pyx_L35:;
            __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            goto __pyx_L10_exception_handled;
          }
          __pyx_L11_except_error:;
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_10);
          goto __pyx_L1_error;
          __pyx_L10_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_10);
          __pyx_L16_try_end:;
        }
      }
      /*finally:*/ {
        int __pyx_why;
        __pyx_why = 0; goto __pyx_L8;
        __pyx_L6: __pyx_why = 3; goto __pyx_L8;
        __pyx_L8:;
        if (__pyx_t_6) {
          __pyx_t_10 = PyObject_Call(__pyx_t_6, __pyx_k_tuple_76, NULL);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_36 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(__pyx_t_36 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        switch (__pyx_why) {
          case 3: goto __pyx_L0;
        }
      }
      goto __pyx_L36;
      __pyx_L5_error:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L1_error;
      __pyx_L36:;
    }
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
  __Pyx_XDECREF(__pyx_t_15);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lut_size.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pos.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("_distortion.Distortion.calc_LUT_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lut_size.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pos.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pos);
  __PYX_XDEC_MEMVIEW(&__pyx_v_pos0min, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_pos1min, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_pos0max, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_pos1max, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_lut_size);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_10Distortion_9calc_LUT(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_11_distortion_10Distortion_9calc_LUT = {__Pyx_NAMESTR("calc_LUT"), (PyCFunction)__pyx_pw_11_distortion_10Distortion_9calc_LUT, METH_O, __Pyx_DOCSTR(0)};
static PyObject *__pyx_pw_11_distortion_10Distortion_9calc_LUT(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_LUT (wrapper)", 0);
  __pyx_r = __pyx_pf_11_distortion_10Distortion_8calc_LUT(__pyx_self, ((PyObject *)__pyx_v_self));
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

  /* "_distortion.pyx":596
 *             pos = self.pos
 *         if self.lut_size is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.lut_size is None:
 *                     shape0, shape1 = self.shape
 */
  __pyx_k_tuple_76 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_76);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_76, 0, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_76, 1, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_76, 2, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_76));
 597:                 if self.lut_size is None:
            /* "_distortion.pyx":597
 *         if self.lut_size is None:
 *             with self._sem:
 *                 if self.lut_size is None:             # <<<<<<<<<<<<<<
 *                     shape0, shape1 = self.shape
 *                     pos0min = numpy.floor(pos[:, :, :, 0].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[0])
 */
            __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__lut_size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_2 = (__pyx_t_3 == Py_None);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (__pyx_t_2) {
 598:                     shape0, shape1 = self.shape
              /* "_distortion.pyx":598
 *             with self._sem:
 *                 if self.lut_size is None:
 *                     shape0, shape1 = self.shape             # <<<<<<<<<<<<<<
 *                     pos0min = numpy.floor(pos[:, :, :, 0].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[0])
 *                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])
 */
              __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
                PyObject* sequence = __pyx_t_3;
                #if CYTHON_COMPILING_IN_CPYTHON
                Py_ssize_t size = Py_SIZE(sequence);
                #else
                Py_ssize_t size = PySequence_Size(sequence);
                #endif
                if (unlikely(size != 2)) {
                  if (size > 2) __Pyx_RaiseTooManyValuesError(2);
                  else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                }
                #if CYTHON_COMPILING_IN_CPYTHON
                if (likely(PyTuple_CheckExact(sequence))) {
                  __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
                  __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
                } else {
                  __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
                  __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
                }
                __Pyx_INCREF(__pyx_t_9);
                __Pyx_INCREF(__pyx_t_1);
                #else
                __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                #endif
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              } else
              {
                Py_ssize_t index = -1;
                __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                __Pyx_GOTREF(__pyx_t_11);
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
                index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L18_unpacking_failed;
                __Pyx_GOTREF(__pyx_t_9);
                index = 1; __pyx_t_1 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_1)) goto __pyx_L18_unpacking_failed;
                __Pyx_GOTREF(__pyx_t_1);
                if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                __pyx_t_12 = NULL;
                __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                goto __pyx_L19_unpacking_done;
                __pyx_L18_unpacking_failed:;
                __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                __pyx_t_12 = NULL;
                if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
                {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
                __pyx_L19_unpacking_done:;
              }
              __pyx_t_5 = __Pyx_PyInt_AsInt(__pyx_t_9); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_13 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_v_shape0 = __pyx_t_5;
              __pyx_v_shape1 = __pyx_t_13;
 599:                     pos0min = numpy.floor(pos[:, :, :, 0].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[0])
              /* "_distortion.pyx":599
 *                 if self.lut_size is None:
 *                     shape0, shape1 = self.shape
 *                     pos0min = numpy.floor(pos[:, :, :, 0].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[0])             # <<<<<<<<<<<<<<
 *                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])
 *                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])
 */
              __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__floor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "_distortion.pyx":599
 *                 if self.lut_size is None:
 *                     shape0, shape1 = self.shape
 *                     pos0min = numpy.floor(pos[:, :, :, 0].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[0])             # <<<<<<<<<<<<<<
 *                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])
 *                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])
 */
  __pyx_k_slice_60 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_60);
  __Pyx_GIVEREF(__pyx_k_slice_60);
  __pyx_k_slice_61 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_61);
  __Pyx_GIVEREF(__pyx_k_slice_61);
  __pyx_k_slice_62 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_62);
  __Pyx_GIVEREF(__pyx_k_slice_62);
              __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_pos), ((PyObject *)__pyx_k_tuple_63)); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_9 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__min); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_3));
              if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__axis), __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __pyx_t_11 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_11);
              __Pyx_GIVEREF(__pyx_t_11);
              __pyx_t_11 = 0;
              __pyx_t_11 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_GetAttr(__pyx_t_11, __pyx_n_s__astype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_11 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_11, __pyx_n_s__int32); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
              __pyx_t_11 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__clip); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __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 = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_INCREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_0);
              __Pyx_GIVEREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
              __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(__pyx_t_3);
              if (unlikely(!__pyx_t_14.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_v_pos0min = __pyx_t_14;
              __pyx_t_14.memview = NULL;
              __pyx_t_14.data = NULL;
  __pyx_k_tuple_63 = PyTuple_New(4); if (unlikely(!__pyx_k_tuple_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_63);
  __Pyx_INCREF(__pyx_k_slice_60);
  PyTuple_SET_ITEM(__pyx_k_tuple_63, 0, __pyx_k_slice_60);
  __Pyx_GIVEREF(__pyx_k_slice_60);
  __Pyx_INCREF(__pyx_k_slice_61);
  PyTuple_SET_ITEM(__pyx_k_tuple_63, 1, __pyx_k_slice_61);
  __Pyx_GIVEREF(__pyx_k_slice_61);
  __Pyx_INCREF(__pyx_k_slice_62);
  PyTuple_SET_ITEM(__pyx_k_tuple_63, 2, __pyx_k_slice_62);
  __Pyx_GIVEREF(__pyx_k_slice_62);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_k_tuple_63, 3, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_63));
 600:                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])
              /* "_distortion.pyx":600
 *                     shape0, shape1 = self.shape
 *                     pos0min = numpy.floor(pos[:, :, :, 0].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[0])
 *                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])             # <<<<<<<<<<<<<<
 *                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])
 *                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])
 */
              __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__floor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "_distortion.pyx":600
 *                     shape0, shape1 = self.shape
 *                     pos0min = numpy.floor(pos[:, :, :, 0].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[0])
 *                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])             # <<<<<<<<<<<<<<
 *                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])
 *                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])
 */
  __pyx_k_slice_64 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_64);
  __Pyx_GIVEREF(__pyx_k_slice_64);
  __pyx_k_slice_65 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_65);
  __Pyx_GIVEREF(__pyx_k_slice_65);
  __pyx_k_slice_66 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_66);
  __Pyx_GIVEREF(__pyx_k_slice_66);
              __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_pos), ((PyObject *)__pyx_k_tuple_67)); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_11 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__min); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_3));
              if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__axis), __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __pyx_t_9 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
              __Pyx_GIVEREF(__pyx_t_9);
              __pyx_t_9 = 0;
              __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__astype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__int32); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
              __pyx_t_9 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__clip); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __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 = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_INCREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_0);
              __Pyx_GIVEREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
              __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(__pyx_t_3);
              if (unlikely(!__pyx_t_14.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_v_pos1min = __pyx_t_14;
              __pyx_t_14.memview = NULL;
              __pyx_t_14.data = NULL;
  __pyx_k_tuple_67 = PyTuple_New(4); if (unlikely(!__pyx_k_tuple_67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_67);
  __Pyx_INCREF(__pyx_k_slice_64);
  PyTuple_SET_ITEM(__pyx_k_tuple_67, 0, __pyx_k_slice_64);
  __Pyx_GIVEREF(__pyx_k_slice_64);
  __Pyx_INCREF(__pyx_k_slice_65);
  PyTuple_SET_ITEM(__pyx_k_tuple_67, 1, __pyx_k_slice_65);
  __Pyx_GIVEREF(__pyx_k_slice_65);
  __Pyx_INCREF(__pyx_k_slice_66);
  PyTuple_SET_ITEM(__pyx_k_tuple_67, 2, __pyx_k_slice_66);
  __Pyx_GIVEREF(__pyx_k_slice_66);
  __Pyx_INCREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_k_tuple_67, 3, __pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_67));
 601:                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])
              /* "_distortion.pyx":601
 *                     pos0min = numpy.floor(pos[:, :, :, 0].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[0])
 *                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])
 *                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])             # <<<<<<<<<<<<<<
 *                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])
 *                     lut_size = numpy.zeros(self.shape, dtype=numpy.int32)
 */
              __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__ceil); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "_distortion.pyx":601
 *                     pos0min = numpy.floor(pos[:, :, :, 0].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[0])
 *                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])
 *                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])             # <<<<<<<<<<<<<<
 *                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])
 *                     lut_size = numpy.zeros(self.shape, dtype=numpy.int32)
 */
  __pyx_k_slice_68 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_68);
  __Pyx_GIVEREF(__pyx_k_slice_68);
  __pyx_k_slice_69 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_69);
  __Pyx_GIVEREF(__pyx_k_slice_69);
  __pyx_k_slice_70 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_70);
  __Pyx_GIVEREF(__pyx_k_slice_70);
              __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_pos), ((PyObject *)__pyx_k_tuple_71)); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_9 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__max); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_3));
              if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__axis), __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __pyx_t_11 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_11);
              __Pyx_GIVEREF(__pyx_t_11);
              __pyx_t_11 = 0;
              __pyx_t_11 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_GetAttr(__pyx_t_11, __pyx_n_s__astype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_11 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_11, __pyx_n_s__int32); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
              __pyx_t_11 = PyNumber_Add(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_11, __pyx_n_s__clip); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_11 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_11, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_INCREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_int_0);
              __Pyx_GIVEREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
              __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(__pyx_t_3);
              if (unlikely(!__pyx_t_14.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_v_pos0max = __pyx_t_14;
              __pyx_t_14.memview = NULL;
              __pyx_t_14.data = NULL;
  __pyx_k_tuple_71 = PyTuple_New(4); if (unlikely(!__pyx_k_tuple_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_71);
  __Pyx_INCREF(__pyx_k_slice_68);
  PyTuple_SET_ITEM(__pyx_k_tuple_71, 0, __pyx_k_slice_68);
  __Pyx_GIVEREF(__pyx_k_slice_68);
  __Pyx_INCREF(__pyx_k_slice_69);
  PyTuple_SET_ITEM(__pyx_k_tuple_71, 1, __pyx_k_slice_69);
  __Pyx_GIVEREF(__pyx_k_slice_69);
  __Pyx_INCREF(__pyx_k_slice_70);
  PyTuple_SET_ITEM(__pyx_k_tuple_71, 2, __pyx_k_slice_70);
  __Pyx_GIVEREF(__pyx_k_slice_70);
  __Pyx_INCREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_k_tuple_71, 3, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_71));
 602:                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])
              /* "_distortion.pyx":602
 *                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])
 *                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])
 *                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])             # <<<<<<<<<<<<<<
 *                     lut_size = numpy.zeros(self.shape, dtype=numpy.int32)
 *                     with nogil:
 */
              __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_11 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__ceil); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "_distortion.pyx":602
 *                     pos1min = numpy.floor(pos[:, :, :, 1].min(axis= -1)).astype(numpy.int32).clip(0, self.shape[1])
 *                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])
 *                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])             # <<<<<<<<<<<<<<
 *                     lut_size = numpy.zeros(self.shape, dtype=numpy.int32)
 *                     with nogil:
 */
  __pyx_k_slice_72 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_72);
  __Pyx_GIVEREF(__pyx_k_slice_72);
  __pyx_k_slice_73 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_73);
  __Pyx_GIVEREF(__pyx_k_slice_73);
  __pyx_k_slice_74 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_slice_74);
  __Pyx_GIVEREF(__pyx_k_slice_74);
              __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_pos), ((PyObject *)__pyx_k_tuple_75)); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__max); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_3));
              if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__axis), __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
              __Pyx_GIVEREF(__pyx_t_9);
              __pyx_t_9 = 0;
              __pyx_t_9 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__astype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_11 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__int32); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11);
              __Pyx_GIVEREF(__pyx_t_11);
              __pyx_t_11 = 0;
              __pyx_t_11 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
              __pyx_t_9 = PyNumber_Add(__pyx_t_11, __pyx_int_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_11 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__clip); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_9, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_INCREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_int_0);
              __Pyx_GIVEREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
              __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(__pyx_t_3);
              if (unlikely(!__pyx_t_14.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_v_pos1max = __pyx_t_14;
              __pyx_t_14.memview = NULL;
              __pyx_t_14.data = NULL;
  __pyx_k_tuple_75 = PyTuple_New(4); if (unlikely(!__pyx_k_tuple_75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_75);
  __Pyx_INCREF(__pyx_k_slice_72);
  PyTuple_SET_ITEM(__pyx_k_tuple_75, 0, __pyx_k_slice_72);
  __Pyx_GIVEREF(__pyx_k_slice_72);
  __Pyx_INCREF(__pyx_k_slice_73);
  PyTuple_SET_ITEM(__pyx_k_tuple_75, 1, __pyx_k_slice_73);
  __Pyx_GIVEREF(__pyx_k_slice_73);
  __Pyx_INCREF(__pyx_k_slice_74);
  PyTuple_SET_ITEM(__pyx_k_tuple_75, 2, __pyx_k_slice_74);
  __Pyx_GIVEREF(__pyx_k_slice_74);
  __Pyx_INCREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_k_tuple_75, 3, __pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_75));
 603:                     lut_size = numpy.zeros(self.shape, dtype=numpy.int32)
              /* "_distortion.pyx":603
 *                     pos0max = (numpy.ceil(pos[:, :, :, 0].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[0])
 *                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])
 *                     lut_size = numpy.zeros(self.shape, dtype=numpy.int32)             # <<<<<<<<<<<<<<
 *                     with nogil:
 *                         for i in range(shape0):
 */
              __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_9 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__zeros); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_11);
              PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              __pyx_t_3 = 0;
              __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_3));
              __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_15 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__int32); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_15);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_15) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              __pyx_t_15 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_15);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              if (!(likely(((__pyx_t_15) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_15, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __pyx_t_16 = ((PyArrayObject *)__pyx_t_15);
              {
                __Pyx_BufFmt_StackElem __pyx_stack[1];
                __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lut_size.rcbuffer->pybuffer);
                __pyx_t_13 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lut_size.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
                if (unlikely(__pyx_t_13 < 0)) {
                  PyErr_Fetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
                  if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lut_size.rcbuffer->pybuffer, (PyObject*)__pyx_v_lut_size, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                    Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19);
                    __Pyx_RaiseBufferFallbackError();
                  } else {
                    PyErr_Restore(__pyx_t_17, __pyx_t_18, __pyx_t_19);
                  }
                }
                __pyx_pybuffernd_lut_size.diminfo[0].strides = __pyx_pybuffernd_lut_size.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lut_size.diminfo[0].shape = __pyx_pybuffernd_lut_size.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_lut_size.diminfo[1].strides = __pyx_pybuffernd_lut_size.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_lut_size.diminfo[1].shape = __pyx_pybuffernd_lut_size.rcbuffer->pybuffer.shape[1];
                if (unlikely(__pyx_t_13 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              }
              __pyx_t_16 = 0;
              __pyx_v_lut_size = ((PyArrayObject *)__pyx_t_15);
              __pyx_t_15 = 0;
 604:                     with nogil:
              /* "_distortion.pyx":604
 *                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])
 *                     lut_size = numpy.zeros(self.shape, dtype=numpy.int32)
 *                     with nogil:             # <<<<<<<<<<<<<<
 *                         for i in range(shape0):
 *                             for j in range(shape1):
 */
              {
                  #ifdef WITH_THREAD
                  PyThreadState *_save = NULL;
                  #endif
                  Py_UNBLOCK_THREADS
                  /*try:*/ {

                  /* "_distortion.pyx":604
 *                     pos1max = (numpy.ceil(pos[:, :, :, 1].max(axis= -1)).astype(numpy.int32) + 1).clip(0, self.shape[1])
 *                     lut_size = numpy.zeros(self.shape, dtype=numpy.int32)
 *                     with nogil:             # <<<<<<<<<<<<<<
 *                         for i in range(shape0):
 *                             for j in range(shape1):
 */
                  /*finally:*/ {
                    Py_BLOCK_THREADS
                  }
              }
 605:                         for i in range(shape0):
                    /* "_distortion.pyx":605
 *                     lut_size = numpy.zeros(self.shape, dtype=numpy.int32)
 *                     with nogil:
 *                         for i in range(shape0):             # <<<<<<<<<<<<<<
 *                             for j in range(shape1):
 *                                 for k in range(pos0min[i, j],pos0max[i, j]):
 */
                    __pyx_t_13 = __pyx_v_shape0;
                    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_13; __pyx_t_5+=1) {
                      __pyx_v_i = __pyx_t_5;
 606:                             for j in range(shape1):
                      /* "_distortion.pyx":606
 *                     with nogil:
 *                         for i in range(shape0):
 *                             for j in range(shape1):             # <<<<<<<<<<<<<<
 *                                 for k in range(pos0min[i, j],pos0max[i, j]):
 *                                     for l in range(pos1min[i, j],pos1max[i, j]):
 */
                      __pyx_t_20 = __pyx_v_shape1;
                      for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
                        __pyx_v_j = __pyx_t_21;
 607:                                 for k in range(pos0min[i, j],pos0max[i, j]):
                        /* "_distortion.pyx":607
 *                         for i in range(shape0):
 *                             for j in range(shape1):
 *                                 for k in range(pos0min[i, j],pos0max[i, j]):             # <<<<<<<<<<<<<<
 *                                     for l in range(pos1min[i, j],pos1max[i, j]):
 *                                         lut_size[k,l] += 1
 */
                        __pyx_t_22 = __pyx_v_i;
                        __pyx_t_23 = __pyx_v_j;
                        __pyx_t_24 = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos0max.data + __pyx_t_22 * __pyx_v_pos0max.strides[0]) ) + __pyx_t_23 * __pyx_v_pos0max.strides[1]) )));
                        __pyx_t_25 = __pyx_v_i;
                        __pyx_t_26 = __pyx_v_j;
                        for (__pyx_t_27 = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos0min.data + __pyx_t_25 * __pyx_v_pos0min.strides[0]) ) + __pyx_t_26 * __pyx_v_pos0min.strides[1]) ))); __pyx_t_27 < __pyx_t_24; __pyx_t_27+=1) {
                          __pyx_v_k = __pyx_t_27;
 608:                                     for l in range(pos1min[i, j],pos1max[i, j]):
                          /* "_distortion.pyx":608
 *                             for j in range(shape1):
 *                                 for k in range(pos0min[i, j],pos0max[i, j]):
 *                                     for l in range(pos1min[i, j],pos1max[i, j]):             # <<<<<<<<<<<<<<
 *                                         lut_size[k,l] += 1
 *                     self.lut_size = lut_size.max()
 */
                          __pyx_t_28 = __pyx_v_i;
                          __pyx_t_29 = __pyx_v_j;
                          __pyx_t_30 = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos1max.data + __pyx_t_28 * __pyx_v_pos1max.strides[0]) ) + __pyx_t_29 * __pyx_v_pos1max.strides[1]) )));
                          __pyx_t_31 = __pyx_v_i;
                          __pyx_t_32 = __pyx_v_j;
                          for (__pyx_t_33 = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos1min.data + __pyx_t_31 * __pyx_v_pos1min.strides[0]) ) + __pyx_t_32 * __pyx_v_pos1min.strides[1]) ))); __pyx_t_33 < __pyx_t_30; __pyx_t_33+=1) {
                            __pyx_v_l = __pyx_t_33;
 609:                                         lut_size[k,l] += 1
                            /* "_distortion.pyx":609
 *                                 for k in range(pos0min[i, j],pos0max[i, j]):
 *                                     for l in range(pos1min[i, j],pos1max[i, j]):
 *                                         lut_size[k,l] += 1             # <<<<<<<<<<<<<<
 *                     self.lut_size = lut_size.max()
 *                     return lut_size
 */
                            __pyx_t_34 = __pyx_v_k;
                            __pyx_t_35 = __pyx_v_l;
                            *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_lut_size.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_lut_size.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_lut_size.diminfo[1].strides) += 1;
                          }
                        }
                      }
                    }
                  }
 610:                     self.lut_size = lut_size.max()
              /* "_distortion.pyx":610
 *                                     for l in range(pos1min[i, j],pos1max[i, j]):
 *                                         lut_size[k,l] += 1
 *                     self.lut_size = lut_size.max()             # <<<<<<<<<<<<<<
 *                     return lut_size
 * 
 */
              __pyx_t_15 = PyObject_GetAttr(((PyObject *)__pyx_v_lut_size), __pyx_n_s__max); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_15);
              __pyx_t_3 = PyObject_Call(__pyx_t_15, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__lut_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 611:                     return lut_size
              /* "_distortion.pyx":611
 *                                         lut_size[k,l] += 1
 *                     self.lut_size = lut_size.max()
 *                     return lut_size             # <<<<<<<<<<<<<<
 * 
 *     @cython.wraparound(False)
 */
              __Pyx_XDECREF(__pyx_r);
              __Pyx_INCREF(((PyObject *)__pyx_v_lut_size));
              __pyx_r = ((PyObject *)__pyx_v_lut_size);
              goto __pyx_L13_try_return;
              goto __pyx_L17;
            }
            __pyx_L17:;
          }
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          goto __pyx_L16_try_end;
          __pyx_L13_try_return:;
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_10);
          goto __pyx_L6;
          __pyx_L9_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __PYX_XDEC_MEMVIEW(&__pyx_t_14, 1);
 612: 
 613:     @cython.wraparound(False)
 614:     @cython.boundscheck(False)
 615:     @cython.cdivision(True)
 616:     def calc_LUT(self):
/* "_distortion.pyx":616
 *     @cython.boundscheck(False)
 *     @cython.cdivision(True)
 *     def calc_LUT(self):             # <<<<<<<<<<<<<<
 *         cdef int i, j, ms, ml, ns, nl, shape0, shape1, delta0, delta1, buffer_size, i0, i1, size
 *         cdef int offset0, offset1, box_size0, box_size1
 */

static PyObject *__pyx_pf_11_distortion_10Distortion_8calc_LUT(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  int __pyx_v_i;
  int __pyx_v_j;
  int __pyx_v_ms;
  int __pyx_v_ml;
  int __pyx_v_ns;
  int __pyx_v_nl;
  int __pyx_v_shape0;
  int __pyx_v_shape1;
  int __pyx_v_buffer_size;
  int __pyx_v_size;
  int __pyx_v_offset0;
  int __pyx_v_offset1;
  int __pyx_v_box_size0;
  int __pyx_v_box_size1;
  __pyx_t_5numpy_int32_t __pyx_v_k;
  __pyx_t_5numpy_int32_t __pyx_v_idx;
  float __pyx_v_A0;
  float __pyx_v_A1;
  float __pyx_v_B0;
  float __pyx_v_B1;
  float __pyx_v_C0;
  float __pyx_v_C1;
  float __pyx_v_D0;
  float __pyx_v_D1;
  float __pyx_v_pAB;
  float __pyx_v_pBC;
  float __pyx_v_pCD;
  float __pyx_v_pDA;
  float __pyx_v_cAB;
  float __pyx_v_cBC;
  float __pyx_v_cCD;
  float __pyx_v_cDA;
  float __pyx_v_area;
  float __pyx_v_value;
  __Pyx_memviewslice __pyx_v_pos = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_lut = 0;
  PyArrayObject *__pyx_v_outMax = 0;
  __Pyx_memviewslice __pyx_v_buffer = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_LocalBuf_ND __pyx_pybuffernd_lut;
  __Pyx_Buffer __pyx_pybuffer_lut;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_outMax;
  __Pyx_Buffer __pyx_pybuffer_outMax;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calc_LUT", 0);
  __pyx_pybuffer_lut.pybuffer.buf = NULL;
  __pyx_pybuffer_lut.refcount = 0;
  __pyx_pybuffernd_lut.data = NULL;
  __pyx_pybuffernd_lut.rcbuffer = &__pyx_pybuffer_lut;
  __pyx_pybuffer_outMax.pybuffer.buf = NULL;
  __pyx_pybuffer_outMax.refcount = 0;
  __pyx_pybuffernd_outMax.data = NULL;
  __pyx_pybuffernd_outMax.rcbuffer = &__pyx_pybuffer_outMax;

  /* "_distortion.pyx":616
 *     @cython.boundscheck(False)
 *     @cython.cdivision(True)
 *     def calc_LUT(self):             # <<<<<<<<<<<<<<
 *         cdef int i, j, ms, ml, ns, nl, shape0, shape1, delta0, delta1, buffer_size, i0, i1, size
 *         cdef int offset0, offset1, box_size0, box_size1
 */
  __pyx_k_tuple_140 = PyTuple_New(43); if (unlikely(!__pyx_k_tuple_140)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_140);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__self));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 0, ((PyObject *)__pyx_n_s__self));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__self));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__i));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 1, ((PyObject *)__pyx_n_s__i));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__i));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__j));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 2, ((PyObject *)__pyx_n_s__j));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__j));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__ms));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 3, ((PyObject *)__pyx_n_s__ms));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ms));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__ml));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 4, ((PyObject *)__pyx_n_s__ml));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ml));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__ns));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 5, ((PyObject *)__pyx_n_s__ns));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ns));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__nl));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 6, ((PyObject *)__pyx_n_s__nl));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__nl));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__shape0));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 7, ((PyObject *)__pyx_n_s__shape0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__shape0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__shape1));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 8, ((PyObject *)__pyx_n_s__shape1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__shape1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__delta0));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 9, ((PyObject *)__pyx_n_s__delta0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__delta0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__delta1));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 10, ((PyObject *)__pyx_n_s__delta1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__delta1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__buffer_size));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 11, ((PyObject *)__pyx_n_s__buffer_size));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__buffer_size));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__i0));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 12, ((PyObject *)__pyx_n_s__i0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__i0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__i1));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 13, ((PyObject *)__pyx_n_s__i1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__i1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__size));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 14, ((PyObject *)__pyx_n_s__size));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__size));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__offset0));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 15, ((PyObject *)__pyx_n_s__offset0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__offset0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__offset1));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 16, ((PyObject *)__pyx_n_s__offset1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__offset1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__box_size0));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 17, ((PyObject *)__pyx_n_s__box_size0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__box_size0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__box_size1));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 18, ((PyObject *)__pyx_n_s__box_size1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__box_size1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__k));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 19, ((PyObject *)__pyx_n_s__k));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__k));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__idx));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 20, ((PyObject *)__pyx_n_s__idx));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__idx));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__A0));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 21, ((PyObject *)__pyx_n_s__A0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__A0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__A1));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 22, ((PyObject *)__pyx_n_s__A1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__A1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__B0));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 23, ((PyObject *)__pyx_n_s__B0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__B0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__B1));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 24, ((PyObject *)__pyx_n_s__B1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__B1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__C0));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 25, ((PyObject *)__pyx_n_s__C0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__C0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__C1));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 26, ((PyObject *)__pyx_n_s__C1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__C1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__D0));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 27, ((PyObject *)__pyx_n_s__D0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__D0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__D1));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 28, ((PyObject *)__pyx_n_s__D1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__D1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pAB));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 29, ((PyObject *)__pyx_n_s__pAB));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pAB));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pBC));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 30, ((PyObject *)__pyx_n_s__pBC));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pBC));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pCD));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 31, ((PyObject *)__pyx_n_s__pCD));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pCD));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pDA));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 32, ((PyObject *)__pyx_n_s__pDA));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pDA));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__cAB));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 33, ((PyObject *)__pyx_n_s__cAB));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__cAB));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__cBC));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 34, ((PyObject *)__pyx_n_s__cBC));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__cBC));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__cCD));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 35, ((PyObject *)__pyx_n_s__cCD));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__cCD));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__cDA));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 36, ((PyObject *)__pyx_n_s__cDA));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__cDA));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__area));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 37, ((PyObject *)__pyx_n_s__area));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__area));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__value));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 38, ((PyObject *)__pyx_n_s__value));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__value));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__pos));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 39, ((PyObject *)__pyx_n_s__pos));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__pos));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__lut));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 40, ((PyObject *)__pyx_n_s__lut));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__lut));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__outMax));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 41, ((PyObject *)__pyx_n_s__outMax));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__outMax));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__buffer));
  PyTuple_SET_ITEM(__pyx_k_tuple_140, 42, ((PyObject *)__pyx_n_s__buffer));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__buffer));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_140));

  /* "_distortion.pyx":616
 *     @cython.boundscheck(False)
 *     @cython.cdivision(True)
 *     def calc_LUT(self):             # <<<<<<<<<<<<<<
 *         cdef int i, j, ms, ml, ns, nl, shape0, shape1, delta0, delta1, buffer_size, i0, i1, size
 *         cdef int offset0, offset1, box_size0, box_size1
 */
  __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11_distortion_10Distortion_9calc_LUT, 0, NULL, __pyx_n_s___distortion, ((PyObject *)__pyx_k_codeobj_141)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__calc_LUT, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_k_codeobj_141 = (PyObject*)__Pyx_PyCode_New(1, 0, 43, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_140, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_132, __pyx_n_s__calc_LUT, 616, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_141)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 617:         cdef int i, j, ms, ml, ns, nl, shape0, shape1, delta0, delta1, buffer_size, i0, i1, size
 618:         cdef int offset0, offset1, box_size0, box_size1
 619:         cdef numpy.int32_t k, idx=0
  /* "_distortion.pyx":619
 *         cdef int i, j, ms, ml, ns, nl, shape0, shape1, delta0, delta1, buffer_size, i0, i1, size
 *         cdef int offset0, offset1, box_size0, box_size1
 *         cdef numpy.int32_t k, idx=0             # <<<<<<<<<<<<<<
 *         cdef float A0, A1, B0, B1, C0, C1, D0, D1, pAB, pBC, pCD, pDA, cAB, cBC, cCD, cDA, area, value
 * #        cdef numpy.ndarray[numpy.float32_t, ndim = 3]  pos
 */
  __pyx_v_idx = 0;
 620:         cdef float A0, A1, B0, B1, C0, C1, D0, D1, pAB, pBC, pCD, pDA, cAB, cBC, cCD, cDA, area, value
 621: #        cdef numpy.ndarray[numpy.float32_t, ndim = 3]  pos
 622:         cdef float[:,:,:,:] pos
 623:         cdef numpy.ndarray[lut_point, ndim = 3] lut
 624:         cdef numpy.ndarray[numpy.int32_t, ndim = 2] outMax = numpy.zeros(self.shape, dtype=numpy.int32)
  /* "_distortion.pyx":624
 *         cdef float[:,:,:,:] pos
 *         cdef numpy.ndarray[lut_point, ndim = 3] lut
 *         cdef numpy.ndarray[numpy.int32_t, ndim = 2] outMax = numpy.zeros(self.shape, dtype=numpy.int32)             # <<<<<<<<<<<<<<
 *         cdef  float[:,:] buffer
 *         #cdef float[:,:,:] pos
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__int32); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_outMax.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_outMax = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_outMax.rcbuffer->pybuffer.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_pybuffernd_outMax.diminfo[0].strides = __pyx_pybuffernd_outMax.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_outMax.diminfo[0].shape = __pyx_pybuffernd_outMax.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_outMax.diminfo[1].strides = __pyx_pybuffernd_outMax.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_outMax.diminfo[1].shape = __pyx_pybuffernd_outMax.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_outMax = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
 625:         cdef  float[:,:] buffer
 626:         #cdef float[:,:,:] pos
 627:         shape0, shape1 = self.shape
  /* "_distortion.pyx":627
 *         cdef  float[:,:] buffer
 *         #cdef float[:,:,:] pos
 *         shape0, shape1 = self.shape             # <<<<<<<<<<<<<<
 * 
 *         if self.lut_size is None:
 */
  __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    #if CYTHON_COMPILING_IN_CPYTHON
    Py_ssize_t size = Py_SIZE(sequence);
    #else
    Py_ssize_t size = PySequence_Size(sequence);
    #endif
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    #if CYTHON_COMPILING_IN_CPYTHON
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  {
    Py_ssize_t index = -1;
    __pyx_t_2 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_shape0 = __pyx_t_8;
  __pyx_v_shape1 = __pyx_t_9;
 628: 
 629:         if self.lut_size is None:
  /* "_distortion.pyx":629
 *         shape0, shape1 = self.shape
 * 
 *         if self.lut_size is None:             # <<<<<<<<<<<<<<
 *             self.calc_LUT_size()
 *         if self.LUT is None:
 */
  __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__lut_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = (__pyx_t_5 == Py_None);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_10) {
 630:             self.calc_LUT_size()
    /* "_distortion.pyx":630
 * 
 *         if self.lut_size is None:
 *             self.calc_LUT_size()             # <<<<<<<<<<<<<<
 *         if self.LUT is None:
 *             with self._sem:
 */
    __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__calc_LUT_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L5;
  }
  __pyx_L5:;
 631:         if self.LUT is None:
  /* "_distortion.pyx":631
 *         if self.lut_size is None:
 *             self.calc_LUT_size()
 *         if self.LUT is None:             # <<<<<<<<<<<<<<
 *             with self._sem:
 *                 if self.LUT is None:
 */
  __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_10 = (__pyx_t_3 == Py_None);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_10) {
 632:             with self._sem:
    /* "_distortion.pyx":632
 *             self.calc_LUT_size()
 *         if self.LUT is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.LUT is None:
 *                     pos = self.pos#.reshape(shape0,shape1,4*sizeof(float))
 */
    /*with:*/ {
      __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___sem); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s____exit__); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s____enter__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      /*try:*/ {
        {
          __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_13);
          __Pyx_XGOTREF(__pyx_t_14);
          /*try:*/ {

          /* "_distortion.pyx":632
 *             self.calc_LUT_size()
 *         if self.LUT is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.LUT is None:
 *                     pos = self.pos#.reshape(shape0,shape1,4*sizeof(float))
 */
          /*except:*/ {
            __Pyx_AddTraceback("_distortion.Distortion.calc_LUT", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_16 = PyTuple_New(3); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_INCREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_5);
            PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_5);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_2);
            __pyx_t_20 = PyObject_Call(__pyx_t_11, __pyx_t_16, NULL);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (unlikely(!__pyx_t_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
            __Pyx_GOTREF(__pyx_t_20);
            __pyx_t_63 = __Pyx_PyObject_IsTrue(__pyx_t_20);
            __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
            if (unlikely(__pyx_t_63 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
            __pyx_t_64 = (!__pyx_t_63);
            if (__pyx_t_64) {
              __Pyx_GIVEREF(__pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_2);
              __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_2);
              __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_2 = 0; 
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
              goto __pyx_L42;
            }
            __pyx_L42:;
            __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            goto __pyx_L12_exception_handled;
          }
          __pyx_L13_except_error:;
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          goto __pyx_L1_error;
          __pyx_L12_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          __pyx_L18_try_end:;
        }
      }
      /*finally:*/ {
        if (__pyx_t_11) {
          __pyx_t_14 = PyObject_Call(__pyx_t_11, __pyx_k_tuple_79, NULL);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_64 = __Pyx_PyObject_IsTrue(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(__pyx_t_64 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
      }
      goto __pyx_L43;
      __pyx_L7_error:;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L1_error;
      __pyx_L43:;
    }
    goto __pyx_L6;
  }
  __pyx_L6:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
  __Pyx_XDECREF(__pyx_t_16);
  __PYX_XDEC_MEMVIEW(&__pyx_t_24, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lut.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_outMax.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("_distortion.Distortion.calc_LUT", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lut.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_outMax.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_pos, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_lut);
  __Pyx_XDECREF((PyObject *)__pyx_v_outMax);
  __PYX_XDEC_MEMVIEW(&__pyx_v_buffer, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_10Distortion_11correct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11_distortion_10Distortion_10correct[] = "\n        Correct an image based on the look-up table calculated ...\n\n        @param image: 2D-array with the image\n        @return: corrected 2D image\n        ";
static PyMethodDef __pyx_mdef_11_distortion_10Distortion_11correct = {__Pyx_NAMESTR("correct"), (PyCFunction)__pyx_pw_11_distortion_10Distortion_11correct, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_11_distortion_10Distortion_10correct)};
static PyObject *__pyx_pw_11_distortion_10Distortion_11correct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_image = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("correct (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__image,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__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__image)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("correct", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "correct") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_image = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("correct", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Distortion.correct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_10Distortion_10correct(__pyx_self, __pyx_v_self, __pyx_v_image);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

  /* "_distortion.pyx":632
 *             self.calc_LUT_size()
 *         if self.LUT is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.LUT is None:
 *                     pos = self.pos#.reshape(shape0,shape1,4*sizeof(float))
 */
  __pyx_k_tuple_79 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_79);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_79, 0, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_79, 1, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_79, 2, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_79));
 633:                 if self.LUT is None:
            /* "_distortion.pyx":633
 *         if self.LUT is None:
 *             with self._sem:
 *                 if self.LUT is None:             # <<<<<<<<<<<<<<
 *                     pos = self.pos#.reshape(shape0,shape1,4*sizeof(float))
 *                     lut = numpy.recarray(shape=(self.shape[0] , self.shape[1], self.lut_size), dtype=[("idx", numpy.int32), ("coef", numpy.float32)])
 */
            __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_10 = (__pyx_t_3 == Py_None);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (__pyx_t_10) {
 634:                     pos = self.pos#.reshape(shape0,shape1,4*sizeof(float))
              /* "_distortion.pyx":634
 *             with self._sem:
 *                 if self.LUT is None:
 *                     pos = self.pos#.reshape(shape0,shape1,4*sizeof(float))             # <<<<<<<<<<<<<<
 *                     lut = numpy.recarray(shape=(self.shape[0] , self.shape[1], self.lut_size), dtype=[("idx", numpy.int32), ("coef", numpy.float32)])
 *                     size = self.shape[0]*self.shape[1]*self.lut_size*sizeof(lut_point)
 */
              __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__pos); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_float(__pyx_t_3);
              if (unlikely(!__pyx_t_15.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_v_pos = __pyx_t_15;
              __pyx_t_15.memview = NULL;
              __pyx_t_15.data = NULL;
 635:                     lut = numpy.recarray(shape=(self.shape[0] , self.shape[1], self.lut_size), dtype=[("idx", numpy.int32), ("coef", numpy.float32)])
              /* "_distortion.pyx":635
 *                 if self.LUT is None:
 *                     pos = self.pos#.reshape(shape0,shape1,4*sizeof(float))
 *                     lut = numpy.recarray(shape=(self.shape[0] , self.shape[1], self.lut_size), dtype=[("idx", numpy.int32), ("coef", numpy.float32)])             # <<<<<<<<<<<<<<
 *                     size = self.shape[0]*self.shape[1]*self.lut_size*sizeof(lut_point)
 *                     memset(&lut[0,0,0], 0, size)
 */
              __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__recarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_3));
              __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_5, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_5, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__lut_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_16 = PyTuple_New(3); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_2);
              __Pyx_GIVEREF(__pyx_t_2);
              PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_4);
              __Pyx_GIVEREF(__pyx_t_4);
              PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_5);
              __pyx_t_2 = 0;
              __pyx_t_4 = 0;
              __pyx_t_5 = 0;
              if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_t_16)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0;
              __pyx_t_16 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_5 = PyObject_GetAttr(__pyx_t_16, __pyx_n_s__int32); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_INCREF(((PyObject *)__pyx_n_s__idx));
              PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_n_s__idx));
              __Pyx_GIVEREF(((PyObject *)__pyx_n_s__idx));
              PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_5);
              __pyx_t_5 = 0;
              __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_4 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__float32); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_INCREF(((PyObject *)__pyx_n_s__coef));
              PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_n_s__coef));
              __Pyx_GIVEREF(((PyObject *)__pyx_n_s__coef));
              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
              __Pyx_GIVEREF(__pyx_t_4);
              __pyx_t_4 = 0;
              __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              PyList_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_16));
              __Pyx_GIVEREF(((PyObject *)__pyx_t_16));
              PyList_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_t_5));
              __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
              __pyx_t_16 = 0;
              __pyx_t_5 = 0;
              if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_t_4)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
              __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
              if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __pyx_t_17 = ((PyArrayObject *)__pyx_t_4);
              {
                __Pyx_BufFmt_StackElem __pyx_stack[2];
                __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lut.rcbuffer->pybuffer);
                __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lut.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn_struct___pyx_t_11_distortion_lut_point, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack);
                if (unlikely(__pyx_t_9 < 0)) {
                  PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
                  if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lut.rcbuffer->pybuffer, (PyObject*)__pyx_v_lut, &__Pyx_TypeInfo_nn_struct___pyx_t_11_distortion_lut_point, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
                    Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
                    __Pyx_RaiseBufferFallbackError();
                  } else {
                    PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
                  }
                }
                __pyx_pybuffernd_lut.diminfo[0].strides = __pyx_pybuffernd_lut.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lut.diminfo[0].shape = __pyx_pybuffernd_lut.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_lut.diminfo[1].strides = __pyx_pybuffernd_lut.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_lut.diminfo[1].shape = __pyx_pybuffernd_lut.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_lut.diminfo[2].strides = __pyx_pybuffernd_lut.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_lut.diminfo[2].shape = __pyx_pybuffernd_lut.rcbuffer->pybuffer.shape[2];
                if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              }
              __pyx_t_17 = 0;
              __pyx_v_lut = ((PyArrayObject *)__pyx_t_4);
              __pyx_t_4 = 0;
 636:                     size = self.shape[0]*self.shape[1]*self.lut_size*sizeof(lut_point)
              /* "_distortion.pyx":636
 *                     pos = self.pos#.reshape(shape0,shape1,4*sizeof(float))
 *                     lut = numpy.recarray(shape=(self.shape[0] , self.shape[1], self.lut_size), dtype=[("idx", numpy.int32), ("coef", numpy.float32)])
 *                     size = self.shape[0]*self.shape[1]*self.lut_size*sizeof(lut_point)             # <<<<<<<<<<<<<<
 *                     memset(&lut[0,0,0], 0, size)
 *                     logger.info("LUT shape: (%i,%i,%i) %.3f MByte"%(lut.shape[0], lut.shape[1],lut.shape[2],size/1.0e6))
 */
              __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_4, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_4, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_t_4 = PyNumber_Multiply(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__lut_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(struct __pyx_t_11_distortion_lut_point))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_4 = PyNumber_Multiply(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_9 = __Pyx_PyInt_AsInt(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_v_size = __pyx_t_9;
 637:                     memset(&lut[0,0,0], 0, size)
              /* "_distortion.pyx":637
 *                     lut = numpy.recarray(shape=(self.shape[0] , self.shape[1], self.lut_size), dtype=[("idx", numpy.int32), ("coef", numpy.float32)])
 *                     size = self.shape[0]*self.shape[1]*self.lut_size*sizeof(lut_point)
 *                     memset(&lut[0,0,0], 0, size)             # <<<<<<<<<<<<<<
 *                     logger.info("LUT shape: (%i,%i,%i) %.3f MByte"%(lut.shape[0], lut.shape[1],lut.shape[2],size/1.0e6))
 *                     buffer = numpy.empty((self.delta0, self.delta1),dtype=numpy.float32)
 */
              __pyx_t_21 = 0;
              __pyx_t_22 = 0;
              __pyx_t_23 = 0;
              memset((&(*__Pyx_BufPtrStrided3d(struct __pyx_t_11_distortion_lut_point *, __pyx_pybuffernd_lut.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_lut.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_lut.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_lut.diminfo[2].strides))), 0, __pyx_v_size);
 638:                     logger.info("LUT shape: (%i,%i,%i) %.3f MByte"%(lut.shape[0], lut.shape[1],lut.shape[2],size/1.0e6))
              /* "_distortion.pyx":638
 *                     size = self.shape[0]*self.shape[1]*self.lut_size*sizeof(lut_point)
 *                     memset(&lut[0,0,0], 0, size)
 *                     logger.info("LUT shape: (%i,%i,%i) %.3f MByte"%(lut.shape[0], lut.shape[1],lut.shape[2],size/1.0e6))             # <<<<<<<<<<<<<<
 *                     buffer = numpy.empty((self.delta0, self.delta1),dtype=numpy.float32)
 *                     buffer_size = self.delta0 * self.delta1 * sizeof(float)
 */
              __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_1 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_t_4 = __Pyx_PyInt_to_py_Py_intptr_t((__pyx_v_lut->dimensions[0])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_3 = __Pyx_PyInt_to_py_Py_intptr_t((__pyx_v_lut->dimensions[1])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_5 = __Pyx_PyInt_to_py_Py_intptr_t((__pyx_v_lut->dimensions[2])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_16 = PyFloat_FromDouble((__pyx_v_size / 1.0e6)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_2);
              PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
              __Pyx_GIVEREF(__pyx_t_4);
              PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_16);
              __Pyx_GIVEREF(__pyx_t_16);
              __pyx_t_4 = 0;
              __pyx_t_3 = 0;
              __pyx_t_5 = 0;
              __pyx_t_16 = 0;
              __pyx_t_16 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_77), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_16));
              __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
              __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_2);
              PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_16));
              __Pyx_GIVEREF(((PyObject *)__pyx_t_16));
              __pyx_t_16 = 0;
              __pyx_t_16 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 639:                     buffer = numpy.empty((self.delta0, self.delta1),dtype=numpy.float32)
              /* "_distortion.pyx":639
 *                     memset(&lut[0,0,0], 0, size)
 *                     logger.info("LUT shape: (%i,%i,%i) %.3f MByte"%(lut.shape[0], lut.shape[1],lut.shape[2],size/1.0e6))
 *                     buffer = numpy.empty((self.delta0, self.delta1),dtype=numpy.float32)             # <<<<<<<<<<<<<<
 *                     buffer_size = self.delta0 * self.delta1 * sizeof(float)
 *                     logger.info("Max pixel size: %ix%i; Max source pixel in target: %i"%(buffer.shape[1],buffer.shape[0], self.lut_size))
 */
              __pyx_t_16 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_2 = PyObject_GetAttr(__pyx_t_16, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __pyx_t_16 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta0); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_16);
              __Pyx_GIVEREF(__pyx_t_16);
              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_16 = 0;
              __pyx_t_1 = 0;
              __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_5));
              __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
              __pyx_t_5 = 0;
              __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_5));
              __pyx_t_16 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_3 = PyObject_GetAttr(__pyx_t_16, __pyx_n_s__float32); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
              __pyx_t_24 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_3);
              if (unlikely(!__pyx_t_24.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_v_buffer = __pyx_t_24;
              __pyx_t_24.memview = NULL;
              __pyx_t_24.data = NULL;
 640:                     buffer_size = self.delta0 * self.delta1 * sizeof(float)
              /* "_distortion.pyx":640
 *                     logger.info("LUT shape: (%i,%i,%i) %.3f MByte"%(lut.shape[0], lut.shape[1],lut.shape[2],size/1.0e6))
 *                     buffer = numpy.empty((self.delta0, self.delta1),dtype=numpy.float32)
 *                     buffer_size = self.delta0 * self.delta1 * sizeof(float)             # <<<<<<<<<<<<<<
 *                     logger.info("Max pixel size: %ix%i; Max source pixel in target: %i"%(buffer.shape[1],buffer.shape[0], self.lut_size))
 *                     with nogil:
 */
              __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = __Pyx_PyInt_FromSize_t((sizeof(float))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_9 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_v_buffer_size = __pyx_t_9;
 641:                     logger.info("Max pixel size: %ix%i; Max source pixel in target: %i"%(buffer.shape[1],buffer.shape[0], self.lut_size))
              /* "_distortion.pyx":641
 *                     buffer = numpy.empty((self.delta0, self.delta1),dtype=numpy.float32)
 *                     buffer_size = self.delta0 * self.delta1 * sizeof(float)
 *                     logger.info("Max pixel size: %ix%i; Max source pixel in target: %i"%(buffer.shape[1],buffer.shape[0], self.lut_size))             # <<<<<<<<<<<<<<
 *                     with nogil:
 *                         # i,j, idx are indexes of the raw image uncorrected
 */
              __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__info); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __pyx_t_3 = PyInt_FromSsize_t((__pyx_v_buffer.shape[1])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_buffer.shape[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__lut_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_16 = PyTuple_New(3); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_3);
              PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_t_2);
              __Pyx_GIVEREF(__pyx_t_2);
              __pyx_t_3 = 0;
              __pyx_t_1 = 0;
              __pyx_t_2 = 0;
              __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_78), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(((PyObject *)__pyx_t_2));
              __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0;
              __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_t_2));
              __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
              __pyx_t_2 = 0;
              __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_16), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0;
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 642:                     with nogil:
              /* "_distortion.pyx":642
 *                     buffer_size = self.delta0 * self.delta1 * sizeof(float)
 *                     logger.info("Max pixel size: %ix%i; Max source pixel in target: %i"%(buffer.shape[1],buffer.shape[0], self.lut_size))
 *                     with nogil:             # <<<<<<<<<<<<<<
 *                         # i,j, idx are indexes of the raw image uncorrected
 *                         for i in range(shape0):
 */
              {
                  #ifdef WITH_THREAD
                  PyThreadState *_save = NULL;
                  #endif
                  Py_UNBLOCK_THREADS
                  /*try:*/ {

                  /* "_distortion.pyx":642
 *                     buffer_size = self.delta0 * self.delta1 * sizeof(float)
 *                     logger.info("Max pixel size: %ix%i; Max source pixel in target: %i"%(buffer.shape[1],buffer.shape[0], self.lut_size))
 *                     with nogil:             # <<<<<<<<<<<<<<
 *                         # i,j, idx are indexes of the raw image uncorrected
 *                         for i in range(shape0):
 */
                  /*finally:*/ {
                    Py_BLOCK_THREADS
                  }
              }
 643:                         # i,j, idx are indexes of the raw image uncorrected
 644:                         for i in range(shape0):
                    /* "_distortion.pyx":644
 *                     with nogil:
 *                         # i,j, idx are indexes of the raw image uncorrected
 *                         for i in range(shape0):             # <<<<<<<<<<<<<<
 *                             for j in range(shape1):
 *                                 #reinit of buffer
 */
                    __pyx_t_9 = __pyx_v_shape0;
                    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_9; __pyx_t_8+=1) {
                      __pyx_v_i = __pyx_t_8;
 645:                             for j in range(shape1):
                      /* "_distortion.pyx":645
 *                         # i,j, idx are indexes of the raw image uncorrected
 *                         for i in range(shape0):
 *                             for j in range(shape1):             # <<<<<<<<<<<<<<
 *                                 #reinit of buffer
 *                                 memset(&buffer[0,0], 0, buffer_size)
 */
                      __pyx_t_25 = __pyx_v_shape1;
                      for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                        __pyx_v_j = __pyx_t_26;
 646:                                 #reinit of buffer
 647:                                 memset(&buffer[0,0], 0, buffer_size)
                        /* "_distortion.pyx":647
 *                             for j in range(shape1):
 *                                 #reinit of buffer
 *                                 memset(&buffer[0,0], 0, buffer_size)             # <<<<<<<<<<<<<<
 *                                 A0 = pos[i, j, 0, 0]
 *                                 A1 = pos[i, j, 0, 1]
 */
                        __pyx_t_27 = 0;
                        __pyx_t_28 = 0;
                        memset((&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_buffer.data + __pyx_t_27 * __pyx_v_buffer.strides[0]) ) + __pyx_t_28 * __pyx_v_buffer.strides[1]) )))), 0, __pyx_v_buffer_size);
 648:                                 A0 = pos[i, j, 0, 0]
                        /* "_distortion.pyx":648
 *                                 #reinit of buffer
 *                                 memset(&buffer[0,0], 0, buffer_size)
 *                                 A0 = pos[i, j, 0, 0]             # <<<<<<<<<<<<<<
 *                                 A1 = pos[i, j, 0, 1]
 *                                 B0 = pos[i, j, 1, 0]
 */
                        __pyx_t_29 = __pyx_v_i;
                        __pyx_t_30 = __pyx_v_j;
                        __pyx_t_31 = 0;
                        __pyx_t_32 = 0;
                        __pyx_v_A0 = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos.data + __pyx_t_29 * __pyx_v_pos.strides[0]) ) + __pyx_t_30 * __pyx_v_pos.strides[1]) ) + __pyx_t_31 * __pyx_v_pos.strides[2]) ) + __pyx_t_32 * __pyx_v_pos.strides[3]) )));
 649:                                 A1 = pos[i, j, 0, 1]
                        /* "_distortion.pyx":649
 *                                 memset(&buffer[0,0], 0, buffer_size)
 *                                 A0 = pos[i, j, 0, 0]
 *                                 A1 = pos[i, j, 0, 1]             # <<<<<<<<<<<<<<
 *                                 B0 = pos[i, j, 1, 0]
 *                                 B1 = pos[i, j, 1, 1]
 */
                        __pyx_t_33 = __pyx_v_i;
                        __pyx_t_34 = __pyx_v_j;
                        __pyx_t_35 = 0;
                        __pyx_t_36 = 1;
                        __pyx_v_A1 = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos.data + __pyx_t_33 * __pyx_v_pos.strides[0]) ) + __pyx_t_34 * __pyx_v_pos.strides[1]) ) + __pyx_t_35 * __pyx_v_pos.strides[2]) ) + __pyx_t_36 * __pyx_v_pos.strides[3]) )));
 650:                                 B0 = pos[i, j, 1, 0]
                        /* "_distortion.pyx":650
 *                                 A0 = pos[i, j, 0, 0]
 *                                 A1 = pos[i, j, 0, 1]
 *                                 B0 = pos[i, j, 1, 0]             # <<<<<<<<<<<<<<
 *                                 B1 = pos[i, j, 1, 1]
 *                                 C0 = pos[i, j, 2, 0]
 */
                        __pyx_t_37 = __pyx_v_i;
                        __pyx_t_38 = __pyx_v_j;
                        __pyx_t_39 = 1;
                        __pyx_t_40 = 0;
                        __pyx_v_B0 = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos.data + __pyx_t_37 * __pyx_v_pos.strides[0]) ) + __pyx_t_38 * __pyx_v_pos.strides[1]) ) + __pyx_t_39 * __pyx_v_pos.strides[2]) ) + __pyx_t_40 * __pyx_v_pos.strides[3]) )));
 651:                                 B1 = pos[i, j, 1, 1]
                        /* "_distortion.pyx":651
 *                                 A1 = pos[i, j, 0, 1]
 *                                 B0 = pos[i, j, 1, 0]
 *                                 B1 = pos[i, j, 1, 1]             # <<<<<<<<<<<<<<
 *                                 C0 = pos[i, j, 2, 0]
 *                                 C1 = pos[i, j, 2, 1]
 */
                        __pyx_t_41 = __pyx_v_i;
                        __pyx_t_42 = __pyx_v_j;
                        __pyx_t_43 = 1;
                        __pyx_t_44 = 1;
                        __pyx_v_B1 = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos.data + __pyx_t_41 * __pyx_v_pos.strides[0]) ) + __pyx_t_42 * __pyx_v_pos.strides[1]) ) + __pyx_t_43 * __pyx_v_pos.strides[2]) ) + __pyx_t_44 * __pyx_v_pos.strides[3]) )));
 652:                                 C0 = pos[i, j, 2, 0]
                        /* "_distortion.pyx":652
 *                                 B0 = pos[i, j, 1, 0]
 *                                 B1 = pos[i, j, 1, 1]
 *                                 C0 = pos[i, j, 2, 0]             # <<<<<<<<<<<<<<
 *                                 C1 = pos[i, j, 2, 1]
 *                                 D0 = pos[i, j, 3, 0]
 */
                        __pyx_t_45 = __pyx_v_i;
                        __pyx_t_46 = __pyx_v_j;
                        __pyx_t_47 = 2;
                        __pyx_t_48 = 0;
                        __pyx_v_C0 = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos.data + __pyx_t_45 * __pyx_v_pos.strides[0]) ) + __pyx_t_46 * __pyx_v_pos.strides[1]) ) + __pyx_t_47 * __pyx_v_pos.strides[2]) ) + __pyx_t_48 * __pyx_v_pos.strides[3]) )));
 653:                                 C1 = pos[i, j, 2, 1]
                        /* "_distortion.pyx":653
 *                                 B1 = pos[i, j, 1, 1]
 *                                 C0 = pos[i, j, 2, 0]
 *                                 C1 = pos[i, j, 2, 1]             # <<<<<<<<<<<<<<
 *                                 D0 = pos[i, j, 3, 0]
 *                                 D1 = pos[i, j, 3, 1]
 */
                        __pyx_t_49 = __pyx_v_i;
                        __pyx_t_50 = __pyx_v_j;
                        __pyx_t_51 = 2;
                        __pyx_t_52 = 1;
                        __pyx_v_C1 = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos.data + __pyx_t_49 * __pyx_v_pos.strides[0]) ) + __pyx_t_50 * __pyx_v_pos.strides[1]) ) + __pyx_t_51 * __pyx_v_pos.strides[2]) ) + __pyx_t_52 * __pyx_v_pos.strides[3]) )));
 654:                                 D0 = pos[i, j, 3, 0]
                        /* "_distortion.pyx":654
 *                                 C0 = pos[i, j, 2, 0]
 *                                 C1 = pos[i, j, 2, 1]
 *                                 D0 = pos[i, j, 3, 0]             # <<<<<<<<<<<<<<
 *                                 D1 = pos[i, j, 3, 1]
 *                                 offset0 = (<int> floor(min4f(A0, B0, C0, D0)))
 */
                        __pyx_t_53 = __pyx_v_i;
                        __pyx_t_54 = __pyx_v_j;
                        __pyx_t_55 = 3;
                        __pyx_t_56 = 0;
                        __pyx_v_D0 = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos.data + __pyx_t_53 * __pyx_v_pos.strides[0]) ) + __pyx_t_54 * __pyx_v_pos.strides[1]) ) + __pyx_t_55 * __pyx_v_pos.strides[2]) ) + __pyx_t_56 * __pyx_v_pos.strides[3]) )));
 655:                                 D1 = pos[i, j, 3, 1]
                        /* "_distortion.pyx":655
 *                                 C1 = pos[i, j, 2, 1]
 *                                 D0 = pos[i, j, 3, 0]
 *                                 D1 = pos[i, j, 3, 1]             # <<<<<<<<<<<<<<
 *                                 offset0 = (<int> floor(min4f(A0, B0, C0, D0)))
 *                                 offset1 = (<int> floor(min4f(A1, B1, C1, D1)))
 */
                        __pyx_t_57 = __pyx_v_i;
                        __pyx_t_58 = __pyx_v_j;
                        __pyx_t_59 = 3;
                        __pyx_t_60 = 1;
                        __pyx_v_D1 = (*((float *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_pos.data + __pyx_t_57 * __pyx_v_pos.strides[0]) ) + __pyx_t_58 * __pyx_v_pos.strides[1]) ) + __pyx_t_59 * __pyx_v_pos.strides[2]) ) + __pyx_t_60 * __pyx_v_pos.strides[3]) )));
 656:                                 offset0 = (<int> floor(min4f(A0, B0, C0, D0)))
                        /* "_distortion.pyx":656
 *                                 D0 = pos[i, j, 3, 0]
 *                                 D1 = pos[i, j, 3, 1]
 *                                 offset0 = (<int> floor(min4f(A0, B0, C0, D0)))             # <<<<<<<<<<<<<<
 *                                 offset1 = (<int> floor(min4f(A1, B1, C1, D1)))
 *                                 box_size0 = (<int> ceil(max4f(A0, B0, C0, D0))) - offset0
 */
                        __pyx_v_offset0 = ((int)floor(__pyx_f_11_distortion_min4f(__pyx_v_A0, __pyx_v_B0, __pyx_v_C0, __pyx_v_D0)));
 657:                                 offset1 = (<int> floor(min4f(A1, B1, C1, D1)))
                        /* "_distortion.pyx":657
 *                                 D1 = pos[i, j, 3, 1]
 *                                 offset0 = (<int> floor(min4f(A0, B0, C0, D0)))
 *                                 offset1 = (<int> floor(min4f(A1, B1, C1, D1)))             # <<<<<<<<<<<<<<
 *                                 box_size0 = (<int> ceil(max4f(A0, B0, C0, D0))) - offset0
 *                                 box_size1 = (<int> ceil(max4f(A1, B1, C1, D1))) - offset1
 */
                        __pyx_v_offset1 = ((int)floor(__pyx_f_11_distortion_min4f(__pyx_v_A1, __pyx_v_B1, __pyx_v_C1, __pyx_v_D1)));
 658:                                 box_size0 = (<int> ceil(max4f(A0, B0, C0, D0))) - offset0
                        /* "_distortion.pyx":658
 *                                 offset0 = (<int> floor(min4f(A0, B0, C0, D0)))
 *                                 offset1 = (<int> floor(min4f(A1, B1, C1, D1)))
 *                                 box_size0 = (<int> ceil(max4f(A0, B0, C0, D0))) - offset0             # <<<<<<<<<<<<<<
 *                                 box_size1 = (<int> ceil(max4f(A1, B1, C1, D1))) - offset1
 *                                 A0 -= <float> offset0
 */
                        __pyx_v_box_size0 = (((int)ceil(__pyx_f_11_distortion_max4f(__pyx_v_A0, __pyx_v_B0, __pyx_v_C0, __pyx_v_D0))) - __pyx_v_offset0);
 659:                                 box_size1 = (<int> ceil(max4f(A1, B1, C1, D1))) - offset1
                        /* "_distortion.pyx":659
 *                                 offset1 = (<int> floor(min4f(A1, B1, C1, D1)))
 *                                 box_size0 = (<int> ceil(max4f(A0, B0, C0, D0))) - offset0
 *                                 box_size1 = (<int> ceil(max4f(A1, B1, C1, D1))) - offset1             # <<<<<<<<<<<<<<
 *                                 A0 -= <float> offset0
 *                                 A1 -= <float> offset1
 */
                        __pyx_v_box_size1 = (((int)ceil(__pyx_f_11_distortion_max4f(__pyx_v_A1, __pyx_v_B1, __pyx_v_C1, __pyx_v_D1))) - __pyx_v_offset1);
 660:                                 A0 -= <float> offset0
                        /* "_distortion.pyx":660
 *                                 box_size0 = (<int> ceil(max4f(A0, B0, C0, D0))) - offset0
 *                                 box_size1 = (<int> ceil(max4f(A1, B1, C1, D1))) - offset1
 *                                 A0 -= <float> offset0             # <<<<<<<<<<<<<<
 *                                 A1 -= <float> offset1
 *                                 B0 -= <float> offset0
 */
                        __pyx_v_A0 = (__pyx_v_A0 - ((float)__pyx_v_offset0));
 661:                                 A1 -= <float> offset1
                        /* "_distortion.pyx":661
 *                                 box_size1 = (<int> ceil(max4f(A1, B1, C1, D1))) - offset1
 *                                 A0 -= <float> offset0
 *                                 A1 -= <float> offset1             # <<<<<<<<<<<<<<
 *                                 B0 -= <float> offset0
 *                                 B1 -= <float> offset1
 */
                        __pyx_v_A1 = (__pyx_v_A1 - ((float)__pyx_v_offset1));
 662:                                 B0 -= <float> offset0
                        /* "_distortion.pyx":662
 *                                 A0 -= <float> offset0
 *                                 A1 -= <float> offset1
 *                                 B0 -= <float> offset0             # <<<<<<<<<<<<<<
 *                                 B1 -= <float> offset1
 *                                 C0 -= <float> offset0
 */
                        __pyx_v_B0 = (__pyx_v_B0 - ((float)__pyx_v_offset0));
 663:                                 B1 -= <float> offset1
                        /* "_distortion.pyx":663
 *                                 A1 -= <float> offset1
 *                                 B0 -= <float> offset0
 *                                 B1 -= <float> offset1             # <<<<<<<<<<<<<<
 *                                 C0 -= <float> offset0
 *                                 C1 -= <float> offset1
 */
                        __pyx_v_B1 = (__pyx_v_B1 - ((float)__pyx_v_offset1));
 664:                                 C0 -= <float> offset0
                        /* "_distortion.pyx":664
 *                                 B0 -= <float> offset0
 *                                 B1 -= <float> offset1
 *                                 C0 -= <float> offset0             # <<<<<<<<<<<<<<
 *                                 C1 -= <float> offset1
 *                                 D0 -= <float> offset0
 */
                        __pyx_v_C0 = (__pyx_v_C0 - ((float)__pyx_v_offset0));
 665:                                 C1 -= <float> offset1
                        /* "_distortion.pyx":665
 *                                 B1 -= <float> offset1
 *                                 C0 -= <float> offset0
 *                                 C1 -= <float> offset1             # <<<<<<<<<<<<<<
 *                                 D0 -= <float> offset0
 *                                 D1 -= <float> offset1
 */
                        __pyx_v_C1 = (__pyx_v_C1 - ((float)__pyx_v_offset1));
 666:                                 D0 -= <float> offset0
                        /* "_distortion.pyx":666
 *                                 C0 -= <float> offset0
 *                                 C1 -= <float> offset1
 *                                 D0 -= <float> offset0             # <<<<<<<<<<<<<<
 *                                 D1 -= <float> offset1
 *                                 if B0 != A0:
 */
                        __pyx_v_D0 = (__pyx_v_D0 - ((float)__pyx_v_offset0));
 667:                                 D1 -= <float> offset1
                        /* "_distortion.pyx":667
 *                                 C1 -= <float> offset1
 *                                 D0 -= <float> offset0
 *                                 D1 -= <float> offset1             # <<<<<<<<<<<<<<
 *                                 if B0 != A0:
 *                                     pAB = (B1 - A1) / (B0 - A0)
 */
                        __pyx_v_D1 = (__pyx_v_D1 - ((float)__pyx_v_offset1));
 668:                                 if B0 != A0:
                        /* "_distortion.pyx":668
 *                                 D0 -= <float> offset0
 *                                 D1 -= <float> offset1
 *                                 if B0 != A0:             # <<<<<<<<<<<<<<
 *                                     pAB = (B1 - A1) / (B0 - A0)
 *                                     cAB = A1 - pAB * A0
 */
                        __pyx_t_10 = (__pyx_v_B0 != __pyx_v_A0);
                        if (__pyx_t_10) {
 669:                                     pAB = (B1 - A1) / (B0 - A0)
                          /* "_distortion.pyx":669
 *                                 D1 -= <float> offset1
 *                                 if B0 != A0:
 *                                     pAB = (B1 - A1) / (B0 - A0)             # <<<<<<<<<<<<<<
 *                                     cAB = A1 - pAB * A0
 *                                 else:
 */
                          __pyx_v_pAB = ((__pyx_v_B1 - __pyx_v_A1) / (__pyx_v_B0 - __pyx_v_A0));
 670:                                     cAB = A1 - pAB * A0
                          /* "_distortion.pyx":670
 *                                 if B0 != A0:
 *                                     pAB = (B1 - A1) / (B0 - A0)
 *                                     cAB = A1 - pAB * A0             # <<<<<<<<<<<<<<
 *                                 else:
 *                                     pAB = cAB = 0.0
 */
                          __pyx_v_cAB = (__pyx_v_A1 - (__pyx_v_pAB * __pyx_v_A0));
                          goto __pyx_L29;
                        }
                        /*else*/ {
 671:                                 else:
 672:                                     pAB = cAB = 0.0
                          /* "_distortion.pyx":672
 *                                     cAB = A1 - pAB * A0
 *                                 else:
 *                                     pAB = cAB = 0.0             # <<<<<<<<<<<<<<
 *                                 if C0 != B0:
 *                                     pBC = (C1 - B1) / (C0 - B0)
 */
                          __pyx_v_pAB = 0.0;
                          __pyx_v_cAB = 0.0;
                        }
                        __pyx_L29:;
 673:                                 if C0 != B0:
                        /* "_distortion.pyx":673
 *                                 else:
 *                                     pAB = cAB = 0.0
 *                                 if C0 != B0:             # <<<<<<<<<<<<<<
 *                                     pBC = (C1 - B1) / (C0 - B0)
 *                                     cBC = B1 - pBC * B0
 */
                        __pyx_t_10 = (__pyx_v_C0 != __pyx_v_B0);
                        if (__pyx_t_10) {
 674:                                     pBC = (C1 - B1) / (C0 - B0)
                          /* "_distortion.pyx":674
 *                                     pAB = cAB = 0.0
 *                                 if C0 != B0:
 *                                     pBC = (C1 - B1) / (C0 - B0)             # <<<<<<<<<<<<<<
 *                                     cBC = B1 - pBC * B0
 *                                 else:
 */
                          __pyx_v_pBC = ((__pyx_v_C1 - __pyx_v_B1) / (__pyx_v_C0 - __pyx_v_B0));
 675:                                     cBC = B1 - pBC * B0
                          /* "_distortion.pyx":675
 *                                 if C0 != B0:
 *                                     pBC = (C1 - B1) / (C0 - B0)
 *                                     cBC = B1 - pBC * B0             # <<<<<<<<<<<<<<
 *                                 else:
 *                                     pBC = cBC = 0.0
 */
                          __pyx_v_cBC = (__pyx_v_B1 - (__pyx_v_pBC * __pyx_v_B0));
                          goto __pyx_L30;
                        }
                        /*else*/ {
 676:                                 else:
 677:                                     pBC = cBC = 0.0
                          /* "_distortion.pyx":677
 *                                     cBC = B1 - pBC * B0
 *                                 else:
 *                                     pBC = cBC = 0.0             # <<<<<<<<<<<<<<
 *                                 if D0 != C0:
 *                                     pCD = (D1 - C1) / (D0 - C0)
 */
                          __pyx_v_pBC = 0.0;
                          __pyx_v_cBC = 0.0;
                        }
                        __pyx_L30:;
 678:                                 if D0 != C0:
                        /* "_distortion.pyx":678
 *                                 else:
 *                                     pBC = cBC = 0.0
 *                                 if D0 != C0:             # <<<<<<<<<<<<<<
 *                                     pCD = (D1 - C1) / (D0 - C0)
 *                                     cCD = C1 - pCD * C0
 */
                        __pyx_t_10 = (__pyx_v_D0 != __pyx_v_C0);
                        if (__pyx_t_10) {
 679:                                     pCD = (D1 - C1) / (D0 - C0)
                          /* "_distortion.pyx":679
 *                                     pBC = cBC = 0.0
 *                                 if D0 != C0:
 *                                     pCD = (D1 - C1) / (D0 - C0)             # <<<<<<<<<<<<<<
 *                                     cCD = C1 - pCD * C0
 *                                 else:
 */
                          __pyx_v_pCD = ((__pyx_v_D1 - __pyx_v_C1) / (__pyx_v_D0 - __pyx_v_C0));
 680:                                     cCD = C1 - pCD * C0
                          /* "_distortion.pyx":680
 *                                 if D0 != C0:
 *                                     pCD = (D1 - C1) / (D0 - C0)
 *                                     cCD = C1 - pCD * C0             # <<<<<<<<<<<<<<
 *                                 else:
 *                                     pCD = cCD = 0.0
 */
                          __pyx_v_cCD = (__pyx_v_C1 - (__pyx_v_pCD * __pyx_v_C0));
                          goto __pyx_L31;
                        }
                        /*else*/ {
 681:                                 else:
 682:                                     pCD = cCD = 0.0
                          /* "_distortion.pyx":682
 *                                     cCD = C1 - pCD * C0
 *                                 else:
 *                                     pCD = cCD = 0.0             # <<<<<<<<<<<<<<
 *                                 if A0 != D0:
 *                                     pDA = (A1 - D1) / (A0 - D0)
 */
                          __pyx_v_pCD = 0.0;
                          __pyx_v_cCD = 0.0;
                        }
                        __pyx_L31:;
 683:                                 if A0 != D0:
                        /* "_distortion.pyx":683
 *                                 else:
 *                                     pCD = cCD = 0.0
 *                                 if A0 != D0:             # <<<<<<<<<<<<<<
 *                                     pDA = (A1 - D1) / (A0 - D0)
 *                                     cDA = D1 - pDA * D0
 */
                        __pyx_t_10 = (__pyx_v_A0 != __pyx_v_D0);
                        if (__pyx_t_10) {
 684:                                     pDA = (A1 - D1) / (A0 - D0)
                          /* "_distortion.pyx":684
 *                                     pCD = cCD = 0.0
 *                                 if A0 != D0:
 *                                     pDA = (A1 - D1) / (A0 - D0)             # <<<<<<<<<<<<<<
 *                                     cDA = D1 - pDA * D0
 *                                 else:
 */
                          __pyx_v_pDA = ((__pyx_v_A1 - __pyx_v_D1) / (__pyx_v_A0 - __pyx_v_D0));
 685:                                     cDA = D1 - pDA * D0
                          /* "_distortion.pyx":685
 *                                 if A0 != D0:
 *                                     pDA = (A1 - D1) / (A0 - D0)
 *                                     cDA = D1 - pDA * D0             # <<<<<<<<<<<<<<
 *                                 else:
 *                                     pDA = cDA = 0.0
 */
                          __pyx_v_cDA = (__pyx_v_D1 - (__pyx_v_pDA * __pyx_v_D0));
                          goto __pyx_L32;
                        }
                        /*else*/ {
 686:                                 else:
 687:                                     pDA = cDA = 0.0
                          /* "_distortion.pyx":687
 *                                     cDA = D1 - pDA * D0
 *                                 else:
 *                                     pDA = cDA = 0.0             # <<<<<<<<<<<<<<
 *                                 integrate(buffer, B0, A0, pAB, cAB)
 *                                 integrate(buffer, A0, D0, pDA, cDA)
 */
                          __pyx_v_pDA = 0.0;
                          __pyx_v_cDA = 0.0;
                        }
                        __pyx_L32:;
 688:                                 integrate(buffer, B0, A0, pAB, cAB)
                        /* "_distortion.pyx":688
 *                                 else:
 *                                     pDA = cDA = 0.0
 *                                 integrate(buffer, B0, A0, pAB, cAB)             # <<<<<<<<<<<<<<
 *                                 integrate(buffer, A0, D0, pDA, cDA)
 *                                 integrate(buffer, D0, C0, pCD, cCD)
 */
                        __pyx_f_11_distortion_integrate(__pyx_v_buffer, __pyx_v_B0, __pyx_v_A0, __pyx_v_pAB, __pyx_v_cAB);
 689:                                 integrate(buffer, A0, D0, pDA, cDA)
                        /* "_distortion.pyx":689
 *                                     pDA = cDA = 0.0
 *                                 integrate(buffer, B0, A0, pAB, cAB)
 *                                 integrate(buffer, A0, D0, pDA, cDA)             # <<<<<<<<<<<<<<
 *                                 integrate(buffer, D0, C0, pCD, cCD)
 *                                 integrate(buffer, C0, B0, pBC, cBC)
 */
                        __pyx_f_11_distortion_integrate(__pyx_v_buffer, __pyx_v_A0, __pyx_v_D0, __pyx_v_pDA, __pyx_v_cDA);
 690:                                 integrate(buffer, D0, C0, pCD, cCD)
                        /* "_distortion.pyx":690
 *                                 integrate(buffer, B0, A0, pAB, cAB)
 *                                 integrate(buffer, A0, D0, pDA, cDA)
 *                                 integrate(buffer, D0, C0, pCD, cCD)             # <<<<<<<<<<<<<<
 *                                 integrate(buffer, C0, B0, pBC, cBC)
 *                                 area = 0.5*((C0 - A0)*(D1 - B1)-(C1 - A1)*(D0 - B0))
 */
                        __pyx_f_11_distortion_integrate(__pyx_v_buffer, __pyx_v_D0, __pyx_v_C0, __pyx_v_pCD, __pyx_v_cCD);
 691:                                 integrate(buffer, C0, B0, pBC, cBC)
                        /* "_distortion.pyx":691
 *                                 integrate(buffer, A0, D0, pDA, cDA)
 *                                 integrate(buffer, D0, C0, pCD, cCD)
 *                                 integrate(buffer, C0, B0, pBC, cBC)             # <<<<<<<<<<<<<<
 *                                 area = 0.5*((C0 - A0)*(D1 - B1)-(C1 - A1)*(D0 - B0))
 *                                 for ms in range(box_size0):
 */
                        __pyx_f_11_distortion_integrate(__pyx_v_buffer, __pyx_v_C0, __pyx_v_B0, __pyx_v_pBC, __pyx_v_cBC);
 692:                                 area = 0.5*((C0 - A0)*(D1 - B1)-(C1 - A1)*(D0 - B0))
                        /* "_distortion.pyx":692
 *                                 integrate(buffer, D0, C0, pCD, cCD)
 *                                 integrate(buffer, C0, B0, pBC, cBC)
 *                                 area = 0.5*((C0 - A0)*(D1 - B1)-(C1 - A1)*(D0 - B0))             # <<<<<<<<<<<<<<
 *                                 for ms in range(box_size0):
 *                                     ml = ms + offset0
 */
                        __pyx_v_area = (0.5 * (((__pyx_v_C0 - __pyx_v_A0) * (__pyx_v_D1 - __pyx_v_B1)) - ((__pyx_v_C1 - __pyx_v_A1) * (__pyx_v_D0 - __pyx_v_B0))));
 693:                                 for ms in range(box_size0):
                        /* "_distortion.pyx":693
 *                                 integrate(buffer, C0, B0, pBC, cBC)
 *                                 area = 0.5*((C0 - A0)*(D1 - B1)-(C1 - A1)*(D0 - B0))
 *                                 for ms in range(box_size0):             # <<<<<<<<<<<<<<
 *                                     ml = ms + offset0
 *                                     if ml < 0 or ml >= shape0:
 */
                        __pyx_t_61 = __pyx_v_box_size0;
                        for (__pyx_t_62 = 0; __pyx_t_62 < __pyx_t_61; __pyx_t_62+=1) {
                          __pyx_v_ms = __pyx_t_62;
 694:                                     ml = ms + offset0
                          /* "_distortion.pyx":694
 *                                 area = 0.5*((C0 - A0)*(D1 - B1)-(C1 - A1)*(D0 - B0))
 *                                 for ms in range(box_size0):
 *                                     ml = ms + offset0             # <<<<<<<<<<<<<<
 *                                     if ml < 0 or ml >= shape0:
 *                                         continue
 */
                          __pyx_v_ml = (__pyx_v_ms + __pyx_v_offset0);
 695:                                     if ml < 0 or ml >= shape0:
                          /* "_distortion.pyx":695
 *                                 for ms in range(box_size0):
 *                                     ml = ms + offset0
 *                                     if ml < 0 or ml >= shape0:             # <<<<<<<<<<<<<<
 *                                         continue
 *                                     for ns in range(box_size1):
 */
                          __pyx_t_10 = (__pyx_v_ml < 0);
                          if (!__pyx_t_10) {
                            __pyx_t_63 = (__pyx_v_ml >= __pyx_v_shape0);
                            __pyx_t_64 = __pyx_t_63;
                          } else {
                            __pyx_t_64 = __pyx_t_10;
                          }
                          if (__pyx_t_64) {
 696:                                         continue
                            /* "_distortion.pyx":696
 *                                     ml = ms + offset0
 *                                     if ml < 0 or ml >= shape0:
 *                                         continue             # <<<<<<<<<<<<<<
 *                                     for ns in range(box_size1):
 *                                         # ms,ns are indexes of the corrected image in short form, ml & nl are the same
 */
                            goto __pyx_L33_continue;
                            goto __pyx_L35;
                          }
                          __pyx_L35:;
 697:                                     for ns in range(box_size1):
                          /* "_distortion.pyx":697
 *                                     if ml < 0 or ml >= shape0:
 *                                         continue
 *                                     for ns in range(box_size1):             # <<<<<<<<<<<<<<
 *                                         # ms,ns are indexes of the corrected image in short form, ml & nl are the same
 *                                         nl = ns + offset1
 */
                          __pyx_t_65 = __pyx_v_box_size1;
                          for (__pyx_t_66 = 0; __pyx_t_66 < __pyx_t_65; __pyx_t_66+=1) {
                            __pyx_v_ns = __pyx_t_66;
 698:                                         # ms,ns are indexes of the corrected image in short form, ml & nl are the same
 699:                                         nl = ns + offset1
                            /* "_distortion.pyx":699
 *                                     for ns in range(box_size1):
 *                                         # ms,ns are indexes of the corrected image in short form, ml & nl are the same
 *                                         nl = ns + offset1             # <<<<<<<<<<<<<<
 *                                         if nl < 0 or nl >= shape1:
 *                                             continue
 */
                            __pyx_v_nl = (__pyx_v_ns + __pyx_v_offset1);
 700:                                         if nl < 0 or nl >= shape1:
                            /* "_distortion.pyx":700
 *                                         # ms,ns are indexes of the corrected image in short form, ml & nl are the same
 *                                         nl = ns + offset1
 *                                         if nl < 0 or nl >= shape1:             # <<<<<<<<<<<<<<
 *                                             continue
 *                                         value = buffer[ms, ns] / area
 */
                            __pyx_t_64 = (__pyx_v_nl < 0);
                            if (!__pyx_t_64) {
                              __pyx_t_10 = (__pyx_v_nl >= __pyx_v_shape1);
                              __pyx_t_63 = __pyx_t_10;
                            } else {
                              __pyx_t_63 = __pyx_t_64;
                            }
                            if (__pyx_t_63) {
 701:                                             continue
                              /* "_distortion.pyx":701
 *                                         nl = ns + offset1
 *                                         if nl < 0 or nl >= shape1:
 *                                             continue             # <<<<<<<<<<<<<<
 *                                         value = buffer[ms, ns] / area
 *                                         if value <= 0:
 */
                              goto __pyx_L36_continue;
                              goto __pyx_L38;
                            }
                            __pyx_L38:;
 702:                                         value = buffer[ms, ns] / area
                            /* "_distortion.pyx":702
 *                                         if nl < 0 or nl >= shape1:
 *                                             continue
 *                                         value = buffer[ms, ns] / area             # <<<<<<<<<<<<<<
 *                                         if value <= 0:
 *                                             continue
 */
                            __pyx_t_67 = __pyx_v_ms;
                            __pyx_t_68 = __pyx_v_ns;
                            __pyx_v_value = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_buffer.data + __pyx_t_67 * __pyx_v_buffer.strides[0]) ) + __pyx_t_68 * __pyx_v_buffer.strides[1]) ))) / __pyx_v_area);
 703:                                         if value <= 0:
                            /* "_distortion.pyx":703
 *                                             continue
 *                                         value = buffer[ms, ns] / area
 *                                         if value <= 0:             # <<<<<<<<<<<<<<
 *                                             continue
 *                                         k = outMax[ml, nl]
 */
                            __pyx_t_63 = (__pyx_v_value <= 0.0);
                            if (__pyx_t_63) {
 704:                                             continue
                              /* "_distortion.pyx":704
 *                                         value = buffer[ms, ns] / area
 *                                         if value <= 0:
 *                                             continue             # <<<<<<<<<<<<<<
 *                                         k = outMax[ml, nl]
 *                                         lut[ml, nl, k].idx = idx
 */
                              goto __pyx_L36_continue;
                              goto __pyx_L39;
                            }
                            __pyx_L39:;
 705:                                         k = outMax[ml, nl]
                            /* "_distortion.pyx":705
 *                                         if value <= 0:
 *                                             continue
 *                                         k = outMax[ml, nl]             # <<<<<<<<<<<<<<
 *                                         lut[ml, nl, k].idx = idx
 *                                         lut[ml, nl, k].coef = value
 */
                            __pyx_t_69 = __pyx_v_ml;
                            __pyx_t_70 = __pyx_v_nl;
                            __pyx_v_k = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_outMax.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_outMax.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_outMax.diminfo[1].strides));
 706:                                         lut[ml, nl, k].idx = idx
                            /* "_distortion.pyx":706
 *                                             continue
 *                                         k = outMax[ml, nl]
 *                                         lut[ml, nl, k].idx = idx             # <<<<<<<<<<<<<<
 *                                         lut[ml, nl, k].coef = value
 *                                         outMax[ml, nl] = k + 1
 */
                            __pyx_t_71 = __pyx_v_ml;
                            __pyx_t_72 = __pyx_v_nl;
                            __pyx_t_73 = __pyx_v_k;
                            (*__Pyx_BufPtrStrided3d(struct __pyx_t_11_distortion_lut_point *, __pyx_pybuffernd_lut.rcbuffer->pybuffer.buf, __pyx_t_71, __pyx_pybuffernd_lut.diminfo[0].strides, __pyx_t_72, __pyx_pybuffernd_lut.diminfo[1].strides, __pyx_t_73, __pyx_pybuffernd_lut.diminfo[2].strides)).idx = __pyx_v_idx;
 707:                                         lut[ml, nl, k].coef = value
                            /* "_distortion.pyx":707
 *                                         k = outMax[ml, nl]
 *                                         lut[ml, nl, k].idx = idx
 *                                         lut[ml, nl, k].coef = value             # <<<<<<<<<<<<<<
 *                                         outMax[ml, nl] = k + 1
 *                                 idx += 1
 */
                            __pyx_t_74 = __pyx_v_ml;
                            __pyx_t_75 = __pyx_v_nl;
                            __pyx_t_76 = __pyx_v_k;
                            (*__Pyx_BufPtrStrided3d(struct __pyx_t_11_distortion_lut_point *, __pyx_pybuffernd_lut.rcbuffer->pybuffer.buf, __pyx_t_74, __pyx_pybuffernd_lut.diminfo[0].strides, __pyx_t_75, __pyx_pybuffernd_lut.diminfo[1].strides, __pyx_t_76, __pyx_pybuffernd_lut.diminfo[2].strides)).coef = __pyx_v_value;
 708:                                         outMax[ml, nl] = k + 1
                            /* "_distortion.pyx":708
 *                                         lut[ml, nl, k].idx = idx
 *                                         lut[ml, nl, k].coef = value
 *                                         outMax[ml, nl] = k + 1             # <<<<<<<<<<<<<<
 *                                 idx += 1
 *                     self.LUT = lut.reshape(self.shape[0] * self.shape[1], self.lut_size)
 */
                            __pyx_t_77 = __pyx_v_ml;
                            __pyx_t_78 = __pyx_v_nl;
                            *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_outMax.rcbuffer->pybuffer.buf, __pyx_t_77, __pyx_pybuffernd_outMax.diminfo[0].strides, __pyx_t_78, __pyx_pybuffernd_outMax.diminfo[1].strides) = (__pyx_v_k + 1);
                            __pyx_L36_continue:;
                          }
                          __pyx_L33_continue:;
                        }
 709:                                 idx += 1
                        /* "_distortion.pyx":709
 *                                         lut[ml, nl, k].coef = value
 *                                         outMax[ml, nl] = k + 1
 *                                 idx += 1             # <<<<<<<<<<<<<<
 *                     self.LUT = lut.reshape(self.shape[0] * self.shape[1], self.lut_size)
 * 
 */
                        __pyx_v_idx = (__pyx_v_idx + 1);
                      }
                    }
                  }
 710:                     self.LUT = lut.reshape(self.shape[0] * self.shape[1], self.lut_size)
              /* "_distortion.pyx":710
 *                                         outMax[ml, nl] = k + 1
 *                                 idx += 1
 *                     self.LUT = lut.reshape(self.shape[0] * self.shape[1], self.lut_size)             # <<<<<<<<<<<<<<
 * 
 *     @cython.wraparound(False)
 */
              __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_lut), __pyx_n_s__reshape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_16 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_16, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __pyx_t_16 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_16, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __pyx_t_16 = PyNumber_Multiply(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__lut_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_16);
              __Pyx_GIVEREF(__pyx_t_16);
              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_16 = 0;
              __pyx_t_1 = 0;
              __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
              if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__LUT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              goto __pyx_L19;
            }
            __pyx_L19:;
          }
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          goto __pyx_L18_try_end;
          __pyx_L11_error:;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __PYX_XDEC_MEMVIEW(&__pyx_t_24, 1);
          __PYX_XDEC_MEMVIEW(&__pyx_t_15, 1);
 711: 
 712:     @cython.wraparound(False)
 713:     @cython.boundscheck(False)
 714:     def correct(self, image):
/* "_distortion.pyx":714
 *     @cython.wraparound(False)
 *     @cython.boundscheck(False)
 *     def correct(self, image):             # <<<<<<<<<<<<<<
 *         """
 *         Correct an image based on the look-up table calculated ...
 */

static PyObject *__pyx_pf_11_distortion_10Distortion_10correct(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_image) {
  int __pyx_v_i;
  int __pyx_v_j;
  CYTHON_UNUSED int __pyx_v_lshape0;
  int __pyx_v_lshape1;
  int __pyx_v_idx;
  int __pyx_v_size;
  float __pyx_v_coef;
  __Pyx_memviewslice __pyx_v_LUT = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_lout = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_lin = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_img_shape = NULL;
  PyObject *__pyx_v_new_image = NULL;
  PyObject *__pyx_v_out = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("correct", 0);
  __Pyx_INCREF(__pyx_v_image);

  /* "_distortion.pyx":714
 *     @cython.wraparound(False)
 *     @cython.boundscheck(False)
 *     def correct(self, image):             # <<<<<<<<<<<<<<
 *         """
 *         Correct an image based on the look-up table calculated ...
 */
  __pyx_k_tuple_142 = PyTuple_New(15); if (unlikely(!__pyx_k_tuple_142)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_142);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__self));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 0, ((PyObject *)__pyx_n_s__self));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__self));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__image));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 1, ((PyObject *)__pyx_n_s__image));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__image));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__i));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 2, ((PyObject *)__pyx_n_s__i));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__i));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__j));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 3, ((PyObject *)__pyx_n_s__j));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__j));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__lshape0));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 4, ((PyObject *)__pyx_n_s__lshape0));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__lshape0));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__lshape1));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 5, ((PyObject *)__pyx_n_s__lshape1));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__lshape1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__idx));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 6, ((PyObject *)__pyx_n_s__idx));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__idx));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__size));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 7, ((PyObject *)__pyx_n_s__size));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__size));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__coef));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 8, ((PyObject *)__pyx_n_s__coef));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__coef));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__LUT));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 9, ((PyObject *)__pyx_n_s__LUT));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__LUT));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__lout));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 10, ((PyObject *)__pyx_n_s__lout));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__lout));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__lin));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 11, ((PyObject *)__pyx_n_s__lin));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__lin));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__img_shape));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 12, ((PyObject *)__pyx_n_s__img_shape));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__img_shape));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__new_image));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 13, ((PyObject *)__pyx_n_s__new_image));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__new_image));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__out));
  PyTuple_SET_ITEM(__pyx_k_tuple_142, 14, ((PyObject *)__pyx_n_s__out));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__out));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_142));

  /* "_distortion.pyx":714
 *     @cython.wraparound(False)
 *     @cython.boundscheck(False)
 *     def correct(self, image):             # <<<<<<<<<<<<<<
 *         """
 *         Correct an image based on the look-up table calculated ...
 */
  __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11_distortion_10Distortion_11correct, 0, NULL, __pyx_n_s___distortion, ((PyObject *)__pyx_k_codeobj_143)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__correct, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_k_codeobj_143 = (PyObject*)__Pyx_PyCode_New(2, 0, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_142, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_132, __pyx_n_s__correct, 714, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_143)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 715:         """
 716:         Correct an image based on the look-up table calculated ...
 717: 
 718:         @param image: 2D-array with the image
 719:         @return: corrected 2D image
 720:         """
 721:         cdef int i,j, lshape0, lshape1, idx, size
 722:         cdef float coef
 723:         cdef lut_point[:,:] LUT
 724:         cdef float[:] lout, lin
 725:         if self.LUT is None:
  /* "_distortion.pyx":725
 *         cdef lut_point[:,:] LUT
 *         cdef float[:] lout, lin
 *         if self.LUT is None:             # <<<<<<<<<<<<<<
 *             self.calc_LUT()
 *         LUT = self.LUT
 */
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
 726:             self.calc_LUT()
    /* "_distortion.pyx":726
 *         cdef float[:] lout, lin
 *         if self.LUT is None:
 *             self.calc_LUT()             # <<<<<<<<<<<<<<
 *         LUT = self.LUT
 *         lshape0 = LUT.shape[0]
 */
    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__calc_LUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L3;
  }
  __pyx_L3:;
 727:         LUT = self.LUT
  /* "_distortion.pyx":727
 *         if self.LUT is None:
 *             self.calc_LUT()
 *         LUT = self.LUT             # <<<<<<<<<<<<<<
 *         lshape0 = LUT.shape[0]
 *         lshape1 = LUT.shape[1]
 */
  __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn_struct___pyx_t_11_distortion_lut_point(__pyx_t_3);
  if (unlikely(!__pyx_t_4.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_LUT = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
 728:         lshape0 = LUT.shape[0]
  /* "_distortion.pyx":728
 *             self.calc_LUT()
 *         LUT = self.LUT
 *         lshape0 = LUT.shape[0]             # <<<<<<<<<<<<<<
 *         lshape1 = LUT.shape[1]
 *         img_shape = image.shape
 */
  __pyx_v_lshape0 = (__pyx_v_LUT.shape[0]);
 729:         lshape1 = LUT.shape[1]
  /* "_distortion.pyx":729
 *         LUT = self.LUT
 *         lshape0 = LUT.shape[0]
 *         lshape1 = LUT.shape[1]             # <<<<<<<<<<<<<<
 *         img_shape = image.shape
 *         if (img_shape[0]<self.shape[0]) or (img_shape[1]<self.shape[1]):
 */
  __pyx_v_lshape1 = (__pyx_v_LUT.shape[1]);
 730:         img_shape = image.shape
  /* "_distortion.pyx":730
 *         lshape0 = LUT.shape[0]
 *         lshape1 = LUT.shape[1]
 *         img_shape = image.shape             # <<<<<<<<<<<<<<
 *         if (img_shape[0]<self.shape[0]) or (img_shape[1]<self.shape[1]):
 *             new_image = numpy.zeros(self.shape, dtype=numpy.float32)
 */
  __pyx_t_3 = PyObject_GetAttr(__pyx_v_image, __pyx_n_s__shape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_img_shape = __pyx_t_3;
  __pyx_t_3 = 0;
 731:         if (img_shape[0]<self.shape[0]) or (img_shape[1]<self.shape[1]):
  /* "_distortion.pyx":731
 *         lshape1 = LUT.shape[1]
 *         img_shape = image.shape
 *         if (img_shape[0]<self.shape[0]) or (img_shape[1]<self.shape[1]):             # <<<<<<<<<<<<<<
 *             new_image = numpy.zeros(self.shape, dtype=numpy.float32)
 *             new_image[:img_shape[0],:img_shape[1]] = image
 */
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_img_shape, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_1, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_2) {
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_img_shape, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_5, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = __pyx_t_6;
  } else {
    __pyx_t_7 = __pyx_t_2;
  }
  if (__pyx_t_7) {
 732:             new_image = numpy.zeros(self.shape, dtype=numpy.float32)
    /* "_distortion.pyx":732
 *         img_shape = image.shape
 *         if (img_shape[0]<self.shape[0]) or (img_shape[1]<self.shape[1]):
 *             new_image = numpy.zeros(self.shape, dtype=numpy.float32)             # <<<<<<<<<<<<<<
 *             new_image[:img_shape[0],:img_shape[1]] = image
 *             image = new_image
 */
    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = PyObject_GetAttr(__pyx_t_8, __pyx_n_s__float32); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __pyx_v_new_image = __pyx_t_9;
    __pyx_t_9 = 0;
 733:             new_image[:img_shape[0],:img_shape[1]] = image
    /* "_distortion.pyx":733
 *         if (img_shape[0]<self.shape[0]) or (img_shape[1]<self.shape[1]):
 *             new_image = numpy.zeros(self.shape, dtype=numpy.float32)
 *             new_image[:img_shape[0],:img_shape[1]] = image             # <<<<<<<<<<<<<<
 *             image = new_image
 *             logger.warning("Patching image as image is %ix%i and spline is %ix%i"%(img_shape[1],img_shape[0],self.shape[1],self.shape[0]))
 */
    __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_img_shape, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_5 = PySlice_New(Py_None, __pyx_t_9, Py_None); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_img_shape, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = PySlice_New(Py_None, __pyx_t_9, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_5 = 0;
    __pyx_t_1 = 0;
    if (PyObject_SetItem(__pyx_v_new_image, ((PyObject *)__pyx_t_9), __pyx_v_image) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
 734:             image = new_image
    /* "_distortion.pyx":734
 *             new_image = numpy.zeros(self.shape, dtype=numpy.float32)
 *             new_image[:img_shape[0],:img_shape[1]] = image
 *             image = new_image             # <<<<<<<<<<<<<<
 *             logger.warning("Patching image as image is %ix%i and spline is %ix%i"%(img_shape[1],img_shape[0],self.shape[1],self.shape[0]))
 * 
 */
    __Pyx_INCREF(__pyx_v_new_image);
    __Pyx_DECREF(__pyx_v_image);
    __pyx_v_image = __pyx_v_new_image;
 735:             logger.warning("Patching image as image is %ix%i and spline is %ix%i"%(img_shape[1],img_shape[0],self.shape[1],self.shape[0]))
    /* "_distortion.pyx":735
 *             new_image[:img_shape[0],:img_shape[1]] = image
 *             image = new_image
 *             logger.warning("Patching image as image is %ix%i and spline is %ix%i"%(img_shape[1],img_shape[0],self.shape[1],self.shape[0]))             # <<<<<<<<<<<<<<
 * 
 *         out = numpy.zeros(self.shape, dtype=numpy.float32)
 */
    __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__warning); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_img_shape, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_img_shape, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_3, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __Pyx_GetItemInt(__pyx_t_3, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_10);
    __pyx_t_9 = 0;
    __pyx_t_5 = 0;
    __pyx_t_8 = 0;
    __pyx_t_10 = 0;
    __pyx_t_10 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_80), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_10));
    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_10));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_10));
    __pyx_t_10 = 0;
    __pyx_t_10 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L4;
  }
  __pyx_L4:;
 736: 
 737:         out = numpy.zeros(self.shape, dtype=numpy.float32)
  /* "_distortion.pyx":737
 *             logger.warning("Patching image as image is %ix%i and spline is %ix%i"%(img_shape[1],img_shape[0],self.shape[1],self.shape[0]))
 * 
 *         out = numpy.zeros(self.shape, dtype=numpy.float32)             # <<<<<<<<<<<<<<
 *         lout = out.ravel()
 *         lin = numpy.ascontiguousarray(image.ravel(),dtype=numpy.float32)
 */
  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_10));
  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = PyObject_GetAttr(__pyx_t_8, __pyx_n_s__float32); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
  __pyx_v_out = __pyx_t_5;
  __pyx_t_5 = 0;
 738:         lout = out.ravel()
  /* "_distortion.pyx":738
 * 
 *         out = numpy.zeros(self.shape, dtype=numpy.float32)
 *         lout = out.ravel()             # <<<<<<<<<<<<<<
 *         lin = numpy.ascontiguousarray(image.ravel(),dtype=numpy.float32)
 *         size = lin.size
 */
  __pyx_t_5 = PyObject_GetAttr(__pyx_v_out, __pyx_n_s__ravel); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_10);
  if (unlikely(!__pyx_t_11.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_lout = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
 739:         lin = numpy.ascontiguousarray(image.ravel(),dtype=numpy.float32)
  /* "_distortion.pyx":739
 *         out = numpy.zeros(self.shape, dtype=numpy.float32)
 *         lout = out.ravel()
 *         lin = numpy.ascontiguousarray(image.ravel(),dtype=numpy.float32)             # <<<<<<<<<<<<<<
 *         size = lin.size
 *         for i in prange(lshape0, nogil=True, schedule="static"):
 */
  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_5 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyObject_GetAttr(__pyx_v_image, __pyx_n_s__ravel); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__float32); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_10), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_8);
  if (unlikely(!__pyx_t_11.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_lin = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
 740:         size = lin.size
  /* "_distortion.pyx":740
 *         lout = out.ravel()
 *         lin = numpy.ascontiguousarray(image.ravel(),dtype=numpy.float32)
 *         size = lin.size             # <<<<<<<<<<<<<<
 *         for i in prange(lshape0, nogil=True, schedule="static"):
 *             for j in range(lshape1):
 */
  __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_lin, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_8, __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_12 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_size = __pyx_t_12;
 741:         for i in prange(lshape0, nogil=True, schedule="static"):
  /* "_distortion.pyx":741
 *         lin = numpy.ascontiguousarray(image.ravel(),dtype=numpy.float32)
 *         size = lin.size
 *         for i in prange(lshape0, nogil=True, schedule="static"):             # <<<<<<<<<<<<<<
 *             for j in range(lshape1):
 *                 idx = LUT[i,j].idx
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save = NULL;
      #endif
      Py_UNBLOCK_THREADS
      /*try:*/ {
        __pyx_t_12 = __pyx_v_lshape0;
        if (1 == 0) abort();
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            __pyx_t_14 = (__pyx_t_12 - 0) / 1;
            if (__pyx_t_14 > 0)
            {
                #ifdef _OPENMP
                #pragma omp parallel
                #endif /* _OPENMP */
                {
                    #ifdef _OPENMP
                    #pragma omp for lastprivate(__pyx_v_coef) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) schedule(static)
                    #endif /* _OPENMP */
                    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_14; __pyx_t_13++){
                        {
                            __pyx_v_i = 0 + 1 * __pyx_t_13;
                            /* Initialize private variables to invalid values */
                            __pyx_v_coef = ((float)__PYX_NAN);
                            __pyx_v_idx = ((int)0xbad0bad0);
                            __pyx_v_j = ((int)0xbad0bad0);

      /* "_distortion.pyx":741
 *         lin = numpy.ascontiguousarray(image.ravel(),dtype=numpy.float32)
 *         size = lin.size
 *         for i in prange(lshape0, nogil=True, schedule="static"):             # <<<<<<<<<<<<<<
 *             for j in range(lshape1):
 *                 idx = LUT[i,j].idx
 */
      /*finally:*/ {
        int __pyx_why;
        __pyx_why = 0; goto __pyx_L7;
        __pyx_L5: __pyx_why = 3; goto __pyx_L7;
        __pyx_L6: __pyx_why = 4; goto __pyx_L7;
        __pyx_L7:;
        Py_BLOCK_THREADS
        switch (__pyx_why) {
          case 3: goto __pyx_L0;
          case 4: goto __pyx_L1_error;
        }
      }
  }
 742:             for j in range(lshape1):
                            /* "_distortion.pyx":742
 *         size = lin.size
 *         for i in prange(lshape0, nogil=True, schedule="static"):
 *             for j in range(lshape1):             # <<<<<<<<<<<<<<
 *                 idx = LUT[i,j].idx
 *                 coef = LUT[i,j].coef
 */
                            __pyx_t_15 = __pyx_v_lshape1;
                            for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
                              __pyx_v_j = __pyx_t_16;
 743:                 idx = LUT[i,j].idx
                              /* "_distortion.pyx":743
 *         for i in prange(lshape0, nogil=True, schedule="static"):
 *             for j in range(lshape1):
 *                 idx = LUT[i,j].idx             # <<<<<<<<<<<<<<
 *                 coef = LUT[i,j].coef
 *                 if coef<=0:
 */
                              __pyx_t_17 = __pyx_v_i;
                              __pyx_t_18 = __pyx_v_j;
                              __pyx_v_idx = (*((struct __pyx_t_11_distortion_lut_point *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_LUT.data + __pyx_t_17 * __pyx_v_LUT.strides[0]) ) + __pyx_t_18 * __pyx_v_LUT.strides[1]) ))).idx;
 744:                 coef = LUT[i,j].coef
                              /* "_distortion.pyx":744
 *             for j in range(lshape1):
 *                 idx = LUT[i,j].idx
 *                 coef = LUT[i,j].coef             # <<<<<<<<<<<<<<
 *                 if coef<=0:
 *                     continue
 */
                              __pyx_t_19 = __pyx_v_i;
                              __pyx_t_20 = __pyx_v_j;
                              __pyx_v_coef = (*((struct __pyx_t_11_distortion_lut_point *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_LUT.data + __pyx_t_19 * __pyx_v_LUT.strides[0]) ) + __pyx_t_20 * __pyx_v_LUT.strides[1]) ))).coef;
 745:                 if coef<=0:
                              /* "_distortion.pyx":745
 *                 idx = LUT[i,j].idx
 *                 coef = LUT[i,j].coef
 *                 if coef<=0:             # <<<<<<<<<<<<<<
 *                     continue
 *                 if idx>=size:
 */
                              __pyx_t_7 = (__pyx_v_coef <= 0.0);
                              if (__pyx_t_7) {
 746:                     continue
                                /* "_distortion.pyx":746
 *                 coef = LUT[i,j].coef
 *                 if coef<=0:
 *                     continue             # <<<<<<<<<<<<<<
 *                 if idx>=size:
 *                     with gil:
 */
                                goto __pyx_L12_continue;
                                goto __pyx_L14;
                              }
                              __pyx_L14:;
 747:                 if idx>=size:
                              /* "_distortion.pyx":747
 *                 if coef<=0:
 *                     continue
 *                 if idx>=size:             # <<<<<<<<<<<<<<
 *                     with gil:
 *                         logger.warning("Accessing %i >= %i !!!"%(idx,size))
 */
                              __pyx_t_7 = (__pyx_v_idx >= __pyx_v_size);
                              if (__pyx_t_7) {
 748:                     with gil:
                                /* "_distortion.pyx":748
 *                     continue
 *                 if idx>=size:
 *                     with gil:             # <<<<<<<<<<<<<<
 *                         logger.warning("Accessing %i >= %i !!!"%(idx,size))
 *                         continue
 */
                                {
                                    #ifdef WITH_THREAD
                                    PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
                                    #endif
                                    /*try:*/ {

                                    /* "_distortion.pyx":748
 *                     continue
 *                 if idx>=size:
 *                     with gil:             # <<<<<<<<<<<<<<
 *                         logger.warning("Accessing %i >= %i !!!"%(idx,size))
 *                         continue
 */
                                    /*finally:*/ {
                                      int __pyx_why;
                                      __pyx_why = 0; goto __pyx_L20;
                                      __pyx_L16: __pyx_why = 1; goto __pyx_L20;
                                      __pyx_L19: __pyx_why = 4; goto __pyx_L20;
                                      __pyx_L20:;
                                      #ifdef WITH_THREAD
                                      PyGILState_Release(__pyx_gilstate_save);
                                      #endif
                                      switch (__pyx_why) {
                                        case 1: goto __pyx_L12_continue;
                                        case 4: goto __pyx_L10_error;
                                      }
                                    }
                                }
                                goto __pyx_L15;
                              }
                              __pyx_L15:;
 749:                         logger.warning("Accessing %i >= %i !!!"%(idx,size))
                                      /* "_distortion.pyx":749
 *                 if idx>=size:
 *                     with gil:
 *                         logger.warning("Accessing %i >= %i !!!"%(idx,size))             # <<<<<<<<<<<<<<
 *                         continue
 *                 lout[i] += lin[idx] * coef
 */
                                      __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__logger); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L19;}
                                      __Pyx_GOTREF(__pyx_t_1);
                                      __pyx_t_8 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__warning); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L19;}
                                      __Pyx_GOTREF(__pyx_t_8);
                                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                                      __pyx_t_1 = PyInt_FromLong(__pyx_v_idx); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L19;}
                                      __Pyx_GOTREF(__pyx_t_1);
                                      __pyx_t_10 = PyInt_FromLong(__pyx_v_size); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L19;}
                                      __Pyx_GOTREF(__pyx_t_10);
                                      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L19;}
                                      __Pyx_GOTREF(__pyx_t_5);
                                      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
                                      __Pyx_GIVEREF(__pyx_t_1);
                                      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_10);
                                      __Pyx_GIVEREF(__pyx_t_10);
                                      __pyx_t_1 = 0;
                                      __pyx_t_10 = 0;
                                      __pyx_t_10 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_81), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L19;}
                                      __Pyx_GOTREF(((PyObject *)__pyx_t_10));
                                      __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
                                      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L19;}
                                      __Pyx_GOTREF(__pyx_t_5);
                                      PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_10));
                                      __Pyx_GIVEREF(((PyObject *)__pyx_t_10));
                                      __pyx_t_10 = 0;
                                      __pyx_t_10 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L19;}
                                      __Pyx_GOTREF(__pyx_t_10);
                                      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                                      __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
                                      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 750:                         continue
                                      /* "_distortion.pyx":750
 *                     with gil:
 *                         logger.warning("Accessing %i >= %i !!!"%(idx,size))
 *                         continue             # <<<<<<<<<<<<<<
 *                 lout[i] += lin[idx] * coef
 *         return out[:img_shape[0],:img_shape[1]]
 */
                                      goto __pyx_L16;
                                    }
 751:                 lout[i] += lin[idx] * coef
                              /* "_distortion.pyx":751
 *                         logger.warning("Accessing %i >= %i !!!"%(idx,size))
 *                         continue
 *                 lout[i] += lin[idx] * coef             # <<<<<<<<<<<<<<
 *         return out[:img_shape[0],:img_shape[1]]
 * 
 */
                              __pyx_t_21 = __pyx_v_idx;
                              __pyx_t_22 = __pyx_v_i;
                              *((float *) ( /* dim=0 */ (__pyx_v_lout.data + __pyx_t_22 * __pyx_v_lout.strides[0]) )) += ((*((float *) ( /* dim=0 */ (__pyx_v_lin.data + __pyx_t_21 * __pyx_v_lin.strides[0]) ))) * __pyx_v_coef);
                              __pyx_L12_continue:;
                            }
                            goto __pyx_L23;
                            __pyx_L10_error:;
                            {
                                #ifdef WITH_THREAD
                                PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
                                #endif
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_exc_type)
                                #endif /* _OPENMP */
                                if (!__pyx_parallel_exc_type) {
                                  __Pyx_ErrFetch(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                  __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                  __Pyx_GOTREF(__pyx_parallel_exc_type);
                                }
                                #ifdef WITH_THREAD
                                PyGILState_Release(__pyx_gilstate_save);
                                #endif
                            }
                            __pyx_parallel_why = 4;
                            goto __pyx_L22;
                            __pyx_L22:;
                            #ifdef _OPENMP
                            #pragma omp critical(__pyx_parallel_lastprivates0)
                            #endif /* _OPENMP */
                            {
                                __pyx_parallel_temp0 = __pyx_v_coef;
                                __pyx_parallel_temp1 = __pyx_v_idx;
                                __pyx_parallel_temp2 = __pyx_v_j;
                                __pyx_parallel_temp3 = __pyx_v_i;
                            }
                            __pyx_L23:;
                            #ifdef _OPENMP
                            #pragma omp flush(__pyx_parallel_why)
                            #endif /* _OPENMP */
                        }
                    }
                    #ifdef _OPENMP
                    Py_END_ALLOW_THREADS
                    #else
{
#ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
                    #endif
                    #endif /* _OPENMP */
                    /* Clean up any temporaries */
                    __Pyx_XDECREF(__pyx_t_10);
                    __pyx_t_10 = NULL;
                    __Pyx_XDECREF(__pyx_t_1);
                    __pyx_t_1 = NULL;
                    __Pyx_XDECREF(__pyx_t_8);
                    __pyx_t_8 = NULL;
                    __Pyx_XDECREF(__pyx_t_5);
                    __pyx_t_5 = NULL;
                    #ifdef WITH_THREAD
                    PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    #ifndef _OPENMP
}
#endif /* _OPENMP */
                }
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              __pyx_v_coef = __pyx_parallel_temp0;
              __pyx_v_idx = __pyx_parallel_temp1;
              __pyx_v_j = __pyx_parallel_temp2;
              __pyx_v_i = __pyx_parallel_temp3;
              switch (__pyx_parallel_why) {
                    case 3: goto __pyx_L5;
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
                    #endif
                    __Pyx_ErrRestore(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    #ifdef WITH_THREAD
                    PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L6;
              }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
 752:         return out[:img_shape[0],:img_shape[1]]
  /* "_distortion.pyx":752
 *                         continue
 *                 lout[i] += lin[idx] * coef
 *         return out[:img_shape[0],:img_shape[1]]             # <<<<<<<<<<<<<<
 * 
 *     @timeit
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_img_shape, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_5 = PySlice_New(Py_None, __pyx_t_10, Py_None); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_img_shape, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_8 = PySlice_New(Py_None, __pyx_t_10, Py_None); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_8);
  __pyx_t_5 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = PyObject_GetItem(__pyx_v_out, ((PyObject *)__pyx_t_10)); if (!__pyx_t_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_AddTraceback("_distortion.Distortion.correct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_LUT, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_lout, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_lin, 1);
  __Pyx_XDECREF(__pyx_v_img_shape);
  __Pyx_XDECREF(__pyx_v_new_image);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_image);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_11_distortion_10Distortion_13uncorrect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11_distortion_10Distortion_12uncorrect[] = "\n        Take an image which has been corrected and transform it into it's raw (with loose of information)\n\n        @param image: 2D-array with the image\n        @return: uncorrected 2D image and a mask (pixels in raw image\n        ";
static PyMethodDef __pyx_mdef_11_distortion_10Distortion_13uncorrect = {__Pyx_NAMESTR("uncorrect"), (PyCFunction)__pyx_pw_11_distortion_10Distortion_13uncorrect, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_11_distortion_10Distortion_12uncorrect)};
static PyObject *__pyx_pw_11_distortion_10Distortion_13uncorrect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_image = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("uncorrect (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__image,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__self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__image)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("uncorrect", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "uncorrect") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_image = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("uncorrect", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_distortion.Distortion.uncorrect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11_distortion_10Distortion_12uncorrect(__pyx_self, __pyx_v_self, __pyx_v_image);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 753: 
 754:     @timeit
  /* "_distortion.pyx":754
 *         return out[:img_shape[0],:img_shape[1]]
 * 
 *     @timeit             # <<<<<<<<<<<<<<
 *     def uncorrect(self, image):
 *         """
 */
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__timeit); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
 755:     def uncorrect(self, image):
/* "_distortion.pyx":755
 * 
 *     @timeit
 *     def uncorrect(self, image):             # <<<<<<<<<<<<<<
 *         """
 *         Take an image which has been corrected and transform it into it's raw (with loose of information)
 */

static PyObject *__pyx_pf_11_distortion_10Distortion_12uncorrect(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_image) {
  PyObject *__pyx_v_out = NULL;
  PyObject *__pyx_v_mask = NULL;
  PyObject *__pyx_v_lmask = NULL;
  PyObject *__pyx_v_lout = NULL;
  PyObject *__pyx_v_lin = NULL;
  PyObject *__pyx_v_tot = NULL;
  PyObject *__pyx_v_idx = NULL;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_val = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("uncorrect", 0);

  /* "_distortion.pyx":755
 * 
 *     @timeit
 *     def uncorrect(self, image):             # <<<<<<<<<<<<<<
 *         """
 *         Take an image which has been corrected and transform it into it's raw (with loose of information)
 */
  __pyx_k_tuple_144 = PyTuple_New(11); if (unlikely(!__pyx_k_tuple_144)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_144);
  __Pyx_INCREF(((PyObject *)__pyx_n_s__self));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 0, ((PyObject *)__pyx_n_s__self));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__self));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__image));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 1, ((PyObject *)__pyx_n_s__image));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__image));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__out));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 2, ((PyObject *)__pyx_n_s__out));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__out));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__mask));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 3, ((PyObject *)__pyx_n_s__mask));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__mask));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__lmask));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 4, ((PyObject *)__pyx_n_s__lmask));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__lmask));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__lout));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 5, ((PyObject *)__pyx_n_s__lout));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__lout));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__lin));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 6, ((PyObject *)__pyx_n_s__lin));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__lin));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__tot));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 7, ((PyObject *)__pyx_n_s__tot));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__tot));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__idx));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 8, ((PyObject *)__pyx_n_s__idx));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__idx));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__t));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 9, ((PyObject *)__pyx_n_s__t));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__t));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__val));
  PyTuple_SET_ITEM(__pyx_k_tuple_144, 10, ((PyObject *)__pyx_n_s__val));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__val));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_144));

  /* "_distortion.pyx":755
 * 
 *     @timeit
 *     def uncorrect(self, image):             # <<<<<<<<<<<<<<
 *         """
 *         Take an image which has been corrected and transform it into it's raw (with loose of information)
 */
  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11_distortion_10Distortion_13uncorrect, 0, NULL, __pyx_n_s___distortion, ((PyObject *)__pyx_k_codeobj_145)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__uncorrect, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k_codeobj_145 = (PyObject*)__Pyx_PyCode_New(2, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_144, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_132, __pyx_n_s__uncorrect, 755, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_145)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 756:         """
 757:         Take an image which has been corrected and transform it into it's raw (with loose of information)
 758: 
 759:         @param image: 2D-array with the image
 760:         @return: uncorrected 2D image and a mask (pixels in raw image
 761:         """
 762:         if self.LUT is None:
  /* "_distortion.pyx":762
 *         @return: uncorrected 2D image and a mask (pixels in raw image
 *         """
 *         if self.LUT is None:             # <<<<<<<<<<<<<<
 *             with self._sem:
 *                 if self.LUT is None:
 */
  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
 763:             with self._sem:
    /* "_distortion.pyx":763
 *         """
 *         if self.LUT is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.LUT is None:
 *                     self.calc_LUT()
 */
    /*with:*/ {
      __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___sem); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____exit__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____enter__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      /*try:*/ {
        {
          __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_6);
          __Pyx_XGOTREF(__pyx_t_7);
          __Pyx_XGOTREF(__pyx_t_8);
          /*try:*/ {

          /* "_distortion.pyx":763
 *         """
 *         if self.LUT is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.LUT is None:
 *                     self.calc_LUT()
 */
          /*except:*/ {
            __Pyx_AddTraceback("_distortion.Distortion.uncorrect", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_5);
            PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_4);
            __pyx_t_10 = PyObject_Call(__pyx_t_3, __pyx_t_9, NULL);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
            __pyx_t_11 = (!__pyx_t_2);
            if (__pyx_t_11) {
              __Pyx_GIVEREF(__pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_4);
              __Pyx_ErrRestore(__pyx_t_5, __pyx_t_1, __pyx_t_4);
              __pyx_t_5 = 0; __pyx_t_1 = 0; __pyx_t_4 = 0; 
              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
              goto __pyx_L19;
            }
            __pyx_L19:;
            __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            goto __pyx_L9_exception_handled;
          }
          __pyx_L10_except_error:;
          __Pyx_XGIVEREF(__pyx_t_6);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
          goto __pyx_L1_error;
          __pyx_L9_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_6);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
          __pyx_L15_try_end:;
        }
      }
      /*finally:*/ {
        if (__pyx_t_3) {
          __pyx_t_8 = PyObject_Call(__pyx_t_3, __pyx_k_tuple_82, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
      }
      goto __pyx_L20;
      __pyx_L4_error:;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L1_error;
      __pyx_L20:;
    }
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "_distortion.pyx":763
 *         """
 *         if self.LUT is None:
 *             with self._sem:             # <<<<<<<<<<<<<<
 *                 if self.LUT is None:
 *                     self.calc_LUT()
 */
  __pyx_k_tuple_82 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_k_tuple_82);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_82, 0, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_82, 1, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_INCREF(Py_None);
  PyTuple_SET_ITEM(__pyx_k_tuple_82, 2, Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_82));
 764:                 if self.LUT is None:
            /* "_distortion.pyx":764
 *         if self.LUT is None:
 *             with self._sem:
 *                 if self.LUT is None:             # <<<<<<<<<<<<<<
 *                     self.calc_LUT()
 *         out = numpy.zeros(self.shape,dtype=numpy.float32)
 */
            __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_2 = (__pyx_t_1 == Py_None);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (__pyx_t_2) {
 765:                     self.calc_LUT()
              /* "_distortion.pyx":765
 *             with self._sem:
 *                 if self.LUT is None:
 *                     self.calc_LUT()             # <<<<<<<<<<<<<<
 *         out = numpy.zeros(self.shape,dtype=numpy.float32)
 *         mask = numpy.zeros(self.shape, dtype=numpy.int8)
 */
              __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__calc_LUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              goto __pyx_L16;
            }
            __pyx_L16:;
          }
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          goto __pyx_L15_try_end;
          __pyx_L8_error:;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
 766:         out = numpy.zeros(self.shape,dtype=numpy.float32)
  /* "_distortion.pyx":766
 *                 if self.LUT is None:
 *                     self.calc_LUT()
 *         out = numpy.zeros(self.shape,dtype=numpy.float32)             # <<<<<<<<<<<<<<
 *         mask = numpy.zeros(self.shape, dtype=numpy.int8)
 *         lmask = mask.ravel()
 */
  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_12 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__float32); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
  __pyx_v_out = __pyx_t_12;
  __pyx_t_12 = 0;
 767:         mask = numpy.zeros(self.shape, dtype=numpy.int8)
  /* "_distortion.pyx":767
 *                     self.calc_LUT()
 *         out = numpy.zeros(self.shape,dtype=numpy.float32)
 *         mask = numpy.zeros(self.shape, dtype=numpy.int8)             # <<<<<<<<<<<<<<
 *         lmask = mask.ravel()
 *         lout = out.ravel()
 */
  __pyx_t_12 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_4 = PyObject_GetAttr(__pyx_t_12, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_12);
  __pyx_t_12 = 0;
  __pyx_t_12 = PyDict_New(); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_12));
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__numpy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__int8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_12, ((PyObject *)__pyx_n_s__dtype), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
  __pyx_v_mask = __pyx_t_9;
  __pyx_t_9 = 0;
 768:         lmask = mask.ravel()
  /* "_distortion.pyx":768
 *         out = numpy.zeros(self.shape,dtype=numpy.float32)
 *         mask = numpy.zeros(self.shape, dtype=numpy.int8)
 *         lmask = mask.ravel()             # <<<<<<<<<<<<<<
 *         lout = out.ravel()
 *         lin = image.ravel()
 */
  __pyx_t_9 = PyObject_GetAttr(__pyx_v_mask, __pyx_n_s__ravel); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_12 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_lmask = __pyx_t_12;
  __pyx_t_12 = 0;
 769:         lout = out.ravel()
  /* "_distortion.pyx":769
 *         mask = numpy.zeros(self.shape, dtype=numpy.int8)
 *         lmask = mask.ravel()
 *         lout = out.ravel()             # <<<<<<<<<<<<<<
 *         lin = image.ravel()
 *         tot = self.LUT.coef.sum(axis= -1)
 */
  __pyx_t_12 = PyObject_GetAttr(__pyx_v_out, __pyx_n_s__ravel); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_9 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_v_lout = __pyx_t_9;
  __pyx_t_9 = 0;
 770:         lin = image.ravel()
  /* "_distortion.pyx":770
 *         lmask = mask.ravel()
 *         lout = out.ravel()
 *         lin = image.ravel()             # <<<<<<<<<<<<<<
 *         tot = self.LUT.coef.sum(axis= -1)
 *         for idx in range(self.LUT.shape[0]):
 */
  __pyx_t_9 = PyObject_GetAttr(__pyx_v_image, __pyx_n_s__ravel); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_12 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_lin = __pyx_t_12;
  __pyx_t_12 = 0;
 771:         tot = self.LUT.coef.sum(axis= -1)
  /* "_distortion.pyx":771
 *         lout = out.ravel()
 *         lin = image.ravel()
 *         tot = self.LUT.coef.sum(axis= -1)             # <<<<<<<<<<<<<<
 *         for idx in range(self.LUT.shape[0]):
 *             t = tot[idx]
 */
  __pyx_t_12 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_9 = PyObject_GetAttr(__pyx_t_12, __pyx_n_s__coef); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__sum); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__axis), __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_5 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
  __pyx_v_tot = __pyx_t_5;
  __pyx_t_5 = 0;
 772:         for idx in range(self.LUT.shape[0]):
  /* "_distortion.pyx":772
 *         lin = image.ravel()
 *         tot = self.LUT.coef.sum(axis= -1)
 *         for idx in range(self.LUT.shape[0]):             # <<<<<<<<<<<<<<
 *             t = tot[idx]
 *             if t <= 0:
 */
  __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__shape); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_9, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
  if (PyList_CheckExact(__pyx_t_5) || PyTuple_CheckExact(__pyx_t_5)) {
    __pyx_t_9 = __pyx_t_5; __Pyx_INCREF(__pyx_t_9); __pyx_t_13 = 0;
    __pyx_t_14 = NULL;
  } else {
    __pyx_t_13 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_14 = Py_TYPE(__pyx_t_9)->tp_iternext;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  for (;;) {
    if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_9)) {
      if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_9)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_9, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_9)) {
      if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
      #if CYTHON_COMPILING_IN_CPYTHON
      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_9, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      #endif
    } else {
      __pyx_t_5 = __pyx_t_14(__pyx_t_9);
      if (unlikely(!__pyx_t_5)) {
        if (PyErr_Occurred()) {
          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_XDECREF(__pyx_v_idx);
    __pyx_v_idx = __pyx_t_5;
    __pyx_t_5 = 0;
 773:             t = tot[idx]
    /* "_distortion.pyx":773
 *         tot = self.LUT.coef.sum(axis= -1)
 *         for idx in range(self.LUT.shape[0]):
 *             t = tot[idx]             # <<<<<<<<<<<<<<
 *             if t <= 0:
 *                 lmask[idx] = 1
 */
    __pyx_t_5 = PyObject_GetItem(__pyx_v_tot, __pyx_v_idx); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF(__pyx_v_t);
    __pyx_v_t = __pyx_t_5;
    __pyx_t_5 = 0;
 774:             if t <= 0:
    /* "_distortion.pyx":774
 *         for idx in range(self.LUT.shape[0]):
 *             t = tot[idx]
 *             if t <= 0:             # <<<<<<<<<<<<<<
 *                 lmask[idx] = 1
 *                 continue
 */
    __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_11) {
 775:                 lmask[idx] = 1
      /* "_distortion.pyx":775
 *             t = tot[idx]
 *             if t <= 0:
 *                 lmask[idx] = 1             # <<<<<<<<<<<<<<
 *                 continue
 *             val = lin[idx]/t
 */
      if (PyObject_SetItem(__pyx_v_lmask, __pyx_v_idx, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 776:                 continue
      /* "_distortion.pyx":776
 *             if t <= 0:
 *                 lmask[idx] = 1
 *                 continue             # <<<<<<<<<<<<<<
 *             val = lin[idx]/t
 *             lout[self.LUT[idx].idx] += val * self.LUT[idx].coef
 */
      goto __pyx_L21_continue;
      goto __pyx_L23;
    }
    __pyx_L23:;
 777:             val = lin[idx]/t
    /* "_distortion.pyx":777
 *                 lmask[idx] = 1
 *                 continue
 *             val = lin[idx]/t             # <<<<<<<<<<<<<<
 *             lout[self.LUT[idx].idx] += val * self.LUT[idx].coef
 *         return out, mask
 */
    __pyx_t_5 = PyObject_GetItem(__pyx_v_lin, __pyx_v_idx); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_12 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_v_t); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_v_val);
    __pyx_v_val = __pyx_t_12;
    __pyx_t_12 = 0;
 778:             lout[self.LUT[idx].idx] += val * self.LUT[idx].coef
    /* "_distortion.pyx":778
 *                 continue
 *             val = lin[idx]/t
 *             lout[self.LUT[idx].idx] += val * self.LUT[idx].coef             # <<<<<<<<<<<<<<
 *         return out, mask
 */
    __pyx_t_12 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_5 = PyObject_GetItem(__pyx_t_12, __pyx_v_idx); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__idx); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyObject_GetItem(__pyx_v_lout, __pyx_t_12); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__LUT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyObject_GetItem(__pyx_t_4, __pyx_v_idx); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__coef); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Multiply(__pyx_v_val, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (PyObject_SetItem(__pyx_v_lout, __pyx_t_12, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_L21_continue:;
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 779:         return out, mask
  /* "_distortion.pyx":779
 *             val = lin[idx]/t
 *             lout[self.LUT[idx].idx] += val * self.LUT[idx].coef
 *         return out, mask             # <<<<<<<<<<<<<<
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_v_out);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_out);
  __Pyx_GIVEREF(__pyx_v_out);
  __Pyx_INCREF(__pyx_v_mask);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_mask);
  __Pyx_GIVEREF(__pyx_v_mask);
  __pyx_r = ((PyObject *)__pyx_t_9);
  __pyx_t_9 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("_distortion.Distortion.uncorrect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_mask);
  __Pyx_XDECREF(__pyx_v_lmask);
  __Pyx_XDECREF(__pyx_v_lout);
  __Pyx_XDECREF(__pyx_v_lin);
  __Pyx_XDECREF(__pyx_v_tot);
  __Pyx_XDECREF(__pyx_v_idx);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_val);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
static 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;
}