Generated by Cython 3.2.1
Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.
Raw output: rastercyth.c
+001: # ==============================================================================
__pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_5) < (0)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
002: # pyvale: the python validation engine
003: # License: MIT
004: # Copyright (C) 2025 The Computer Aided Validation Team
005: # ==============================================================================
006:
007: """
008: NOTE: this module is a feature under developement.
009: """
010:
+011: import numpy as np
__pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) __pyx_t_4 = __pyx_t_1; __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_np, __pyx_t_4) < (0)) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
012: import cython
013: #from cython.parallel import prange, parallel, threadid
014: from cython.cimports.libc.math import floor, ceil
+015: from pyvale.sensorsim.cameradata import CameraData
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_CameraData};
__pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyvale_sensorsim_cameradata, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)
}
__pyx_t_4 = __pyx_t_1;
__Pyx_GOTREF(__pyx_t_4);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_CameraData};
__pyx_t_9 = 0; {
__pyx_t_5 = __Pyx_ImportFrom(__pyx_t_4, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_5) < (0)) __PYX_ERR(0, 15, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
016:
017: # NOTE: This module is a feature under developement.
018:
+019: @cython.nogil
static CYTHON_INLINE size_t __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_range_len_double(double __pyx_v_start, double __pyx_v_stop, double __pyx_v_step) {
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
020: @cython.cfunc # python+C or cython.cfunc for C only
021: @cython.boundscheck(False) # Turn off array bounds checking
022: @cython.wraparound(False) # Turn off negative indexing
023: @cython.cdivision(True) # Turn off divide by zero check
024: @cython.inline
025: @cython.exceptval(check=False)
026: def range_len_double(start: cython.double,
027: stop: cython.double,
028: step: cython.double) -> cython.size_t:
+029: return int(ceil((stop - start) / step))
__pyx_r = ((size_t)ceil(((__pyx_v_stop - __pyx_v_start) / __pyx_v_step))); goto __pyx_L0;
030:
031:
+032: @cython.nogil
static CYTHON_INLINE __Pyx_memviewslice __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_range_int(int __pyx_v_start, int __pyx_v_stop, int __pyx_v_step, __Pyx_memviewslice __pyx_v_vec_buffer) {
size_t __pyx_v_num_vals;
size_t __pyx_v_ii;
__Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__PYX_XCLEAR_MEMVIEW(&__pyx_t_7, 1);
__pyx_r.data = NULL;
__pyx_r.memview = NULL;
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.vec_range_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
goto __pyx_L2;
__pyx_L0:;
if (unlikely(!__pyx_r.memview)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
}
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L2:;
return __pyx_r;
}
033: @cython.cfunc # python+C or cython.cfunc for C only
034: @cython.boundscheck(False) # Turn off array bounds checking
035: @cython.wraparound(False) # Turn off negative indexing
036: @cython.cdivision(True) # Turn off divide by zero check
037: @cython.inline
038: @cython.exceptval(check=False)
039: def vec_range_int(start: cython.int,
040: stop: cython.int,
041: step: cython.int,
042: vec_buffer: cython.long[:]) -> cython.long[:]:
043:
+044: num_vals: cython.size_t = int(ceil((stop - start) / step))
__pyx_v_num_vals = ((size_t)ceil(((__pyx_v_stop - __pyx_v_start) / __pyx_v_step)));
045:
+046: vec_buffer[0] = start
__pyx_t_1 = 0; *((long *) ( /* dim=0 */ (__pyx_v_vec_buffer.data + __pyx_t_1 * __pyx_v_vec_buffer.strides[0]) )) = __pyx_v_start;
047: ii: cython.size_t
+048: for ii in range(1,num_vals):
__pyx_t_2 = __pyx_v_num_vals;
__pyx_t_3 = __pyx_t_2;
for (__pyx_t_4 = 1; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
__pyx_v_ii = __pyx_t_4;
+049: vec_buffer[ii] = vec_buffer[ii-1] + step
__pyx_t_5 = (__pyx_v_ii - 1);
__pyx_t_6 = __pyx_v_ii;
*((long *) ( /* dim=0 */ (__pyx_v_vec_buffer.data + __pyx_t_6 * __pyx_v_vec_buffer.strides[0]) )) = ((*((long *) ( /* dim=0 */ (__pyx_v_vec_buffer.data + __pyx_t_5 * __pyx_v_vec_buffer.strides[0]) ))) + __pyx_v_step);
}
050:
+051: return vec_buffer[0:num_vals]
__pyx_t_7.data = __pyx_v_vec_buffer.data;
__pyx_t_7.memview = __pyx_v_vec_buffer.memview;
__PYX_INC_MEMVIEW(&__pyx_t_7, 0);
__pyx_t_8 = -1;
if (unlikely(__pyx_memoryview_slice_memviewslice(
&__pyx_t_7,
__pyx_v_vec_buffer.shape[0], __pyx_v_vec_buffer.strides[0], __pyx_v_vec_buffer.suboffsets[0],
0,
0,
&__pyx_t_8,
0,
__pyx_v_num_vals,
0,
1,
1,
0,
1) < 0))
{
__PYX_ERR(0, 51, __pyx_L1_error)
}
__pyx_r = __pyx_t_7;
__pyx_t_7.memview = NULL;
__pyx_t_7.data = NULL;
goto __pyx_L0;
052:
053:
+054: @cython.nogil
static CYTHON_INLINE double __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_max_double(__Pyx_memviewslice __pyx_v_vals) {
size_t __pyx_v_num_vals;
size_t __pyx_v_ii;
double __pyx_v_max_val;
double __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
055: @cython.cfunc # python+C or cython.cfunc for C only
056: @cython.boundscheck(False) # Turn off array bounds checking
057: @cython.wraparound(False) # Turn off negative indexing
058: @cython.cdivision(True) # Turn off divide by zero check
059: @cython.inline
060: @cython.exceptval(check=False)
061: def vec_max_double(vals: cython.double[:]) -> cython.double:
062:
+063: num_vals: cython.size_t = vals.shape[0]
__pyx_v_num_vals = (__pyx_v_vals.shape[0]);
064:
+065: ii: cython.size_t = 0
__pyx_v_ii = 0;
+066: max_val: cython.double = vals[ii]
__pyx_t_1 = __pyx_v_ii; __pyx_v_max_val = (*((double *) ( /* dim=0 */ (__pyx_v_vals.data + __pyx_t_1 * __pyx_v_vals.strides[0]) )));
067:
+068: for ii in range(1,num_vals):
__pyx_t_1 = __pyx_v_num_vals;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_ii = __pyx_t_3;
+069: if vals[ii] > max_val:
__pyx_t_4 = __pyx_v_ii;
__pyx_t_5 = ((*((double *) ( /* dim=0 */ (__pyx_v_vals.data + __pyx_t_4 * __pyx_v_vals.strides[0]) ))) > __pyx_v_max_val);
if (__pyx_t_5) {
/* … */
}
}
+070: max_val = vals[ii]
__pyx_t_4 = __pyx_v_ii;
__pyx_v_max_val = (*((double *) ( /* dim=0 */ (__pyx_v_vals.data + __pyx_t_4 * __pyx_v_vals.strides[0]) )));
071:
+072: return max_val
__pyx_r = __pyx_v_max_val; goto __pyx_L0;
073:
074:
+075: @cython.nogil
static CYTHON_INLINE double __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_min_double(__Pyx_memviewslice __pyx_v_vals) {
size_t __pyx_v_num_vals;
size_t __pyx_v_ii;
double __pyx_v_min_val;
double __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
076: @cython.cfunc # python+C or cython.cfunc for C only
077: @cython.boundscheck(False) # Turn off array bounds checking
078: @cython.wraparound(False) # Turn off negative indexing
079: @cython.cdivision(True) # Turn off divide by zero check
080: @cython.inline
081: @cython.exceptval(check=False)
082: def vec_min_double(vals: cython.double[:]) -> cython.double:
083:
+084: num_vals: cython.size_t = vals.shape[0]
__pyx_v_num_vals = (__pyx_v_vals.shape[0]);
085:
+086: ii: cython.size_t = 0
__pyx_v_ii = 0;
+087: min_val: cython.double = vals[ii]
__pyx_t_1 = __pyx_v_ii; __pyx_v_min_val = (*((double *) ( /* dim=0 */ (__pyx_v_vals.data + __pyx_t_1 * __pyx_v_vals.strides[0]) )));
088:
+089: for ii in range(1,num_vals):
__pyx_t_1 = __pyx_v_num_vals;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_ii = __pyx_t_3;
+090: if vals[ii] < min_val:
__pyx_t_4 = __pyx_v_ii;
__pyx_t_5 = ((*((double *) ( /* dim=0 */ (__pyx_v_vals.data + __pyx_t_4 * __pyx_v_vals.strides[0]) ))) < __pyx_v_min_val);
if (__pyx_t_5) {
/* … */
}
}
+091: min_val = vals[ii]
__pyx_t_4 = __pyx_v_ii;
__pyx_v_min_val = (*((double *) ( /* dim=0 */ (__pyx_v_vals.data + __pyx_t_4 * __pyx_v_vals.strides[0]) )));
092:
+093: return min_val
__pyx_r = __pyx_v_min_val; goto __pyx_L0;
094:
095:
+096: @cython.nogil
static CYTHON_INLINE double __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_dot_double(__Pyx_memviewslice __pyx_v_vec0, __Pyx_memviewslice __pyx_v_vec1) {
size_t __pyx_v_vec0_len;
size_t __pyx_v_vec1_len;
size_t __pyx_v_ii;
double __pyx_v_dot;
double __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
097: @cython.cfunc # python+C or cython.cfunc for C only
098: @cython.boundscheck(False) # Turn off array bounds checking
099: @cython.wraparound(False) # Turn off negative indexing
100: @cython.cdivision(True) # Turn off divide by zero check
101: @cython.inline
102: @cython.exceptval(check=False)
103: def vec_dot_double(vec0: cython.double[:], vec1: cython.double[:]
104: ) -> cython.double:
+105: vec0_len: cython.size_t = vec0.shape[0]
__pyx_v_vec0_len = (__pyx_v_vec0.shape[0]);
+106: vec1_len: cython.size_t = vec1.shape[0]
__pyx_v_vec1_len = (__pyx_v_vec1.shape[0]);
+107: if vec0_len != vec1_len:
__pyx_t_1 = (__pyx_v_vec0_len != __pyx_v_vec1_len);
if (__pyx_t_1) {
/* … */
}
+108: return 0.0
__pyx_r = 0.0;
goto __pyx_L0;
109:
+110: ii: cython.size_t = 0
__pyx_v_ii = 0;
+111: dot: cython.double = 0.0
__pyx_v_dot = 0.0;
+112: for ii in range(vec0_len):
__pyx_t_2 = __pyx_v_vec0_len;
__pyx_t_3 = __pyx_t_2;
for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
__pyx_v_ii = __pyx_t_4;
+113: dot += vec0[ii]*vec1[ii]
__pyx_t_5 = __pyx_v_ii;
__pyx_t_6 = __pyx_v_ii;
__pyx_v_dot = (__pyx_v_dot + ((*((double *) ( /* dim=0 */ (__pyx_v_vec0.data + __pyx_t_5 * __pyx_v_vec0.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec1.data + __pyx_t_6 * __pyx_v_vec1.strides[0]) )))));
}
114:
+115: return dot
__pyx_r = __pyx_v_dot; goto __pyx_L0;
116:
117:
+118: @cython.nogil
static CYTHON_INLINE int __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_bound_index_min(double __pyx_v_min_val) {
int __pyx_v_min_ind;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
119: @cython.cfunc # python+C or cython.cfunc for C only
120: @cython.boundscheck(False) # Turn off array bounds checking
121: @cython.wraparound(False) # Turn off negative indexing
122: @cython.cdivision(True) # Turn off divide by zero check
123: @cython.inline
124: @cython.exceptval(check=False)
125: def bound_index_min(min_val: cython.double) -> cython.int:
+126: min_ind: cython.int = int(floor(min_val))
__pyx_v_min_ind = ((int)floor(__pyx_v_min_val));
+127: if min_ind < 0:
__pyx_t_1 = (__pyx_v_min_ind < 0);
if (__pyx_t_1) {
/* … */
}
+128: min_ind = 0
__pyx_v_min_ind = 0;
+129: return min_ind
__pyx_r = __pyx_v_min_ind; goto __pyx_L0;
130:
131:
+132: @cython.nogil
static CYTHON_INLINE int __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_bound_index_max(double __pyx_v_max_val, int __pyx_v_num_pixels) {
int __pyx_v_max_ind;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
133: @cython.cfunc # python+C or cython.cfunc for C only
134: @cython.boundscheck(False) # Turn off array bounds checking
135: @cython.wraparound(False) # Turn off negative indexing
136: @cython.cdivision(True) # Turn off divide by zero check
137: @cython.inline
138: @cython.exceptval(check=False)
139: def bound_index_max(max_val: cython.double,
140: num_pixels: cython.int) -> cython.int:
+141: max_ind: cython.int = int(ceil(max_val))
__pyx_v_max_ind = ((int)ceil(__pyx_v_max_val));
+142: if max_ind > (num_pixels-1):
__pyx_t_1 = (__pyx_v_max_ind > (__pyx_v_num_pixels - 1));
if (__pyx_t_1) {
/* … */
}
+143: max_ind = (num_pixels-1)
__pyx_v_max_ind = (__pyx_v_num_pixels - 1);
+144: return max_ind
__pyx_r = __pyx_v_max_ind; goto __pyx_L0;
145:
146:
+147: @cython.nogil
static CYTHON_INLINE __Pyx_memviewslice __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_mult_mat44_by_vec3(__Pyx_memviewslice __pyx_v_mat44, __Pyx_memviewslice __pyx_v_vec3_in, __Pyx_memviewslice __pyx_v_vec3_out) {
__Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
/* … */
/* function exit code */
__pyx_L0:;
if (unlikely(!__pyx_r.memview)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
}
return __pyx_r;
}
148: @cython.cfunc # python+C or cython.cfunc for C only
149: @cython.boundscheck(False) # Turn off array bounds checking
150: @cython.wraparound(False) # Turn off negative indexing
151: @cython.cdivision(True) # Turn off divide by zero check
152: @cython.inline
153: @cython.exceptval(check=False)
154: def mult_mat44_by_vec3(mat44: cython.double[:,:], vec3_in: cython.double[:],
155: vec3_out: cython.double[:]) -> cython.double[:]:
156:
+157: vec3_out[0] = (mat44[0,0]*vec3_in[0]
__pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; /* … */ __pyx_t_12 = 0; *((double *) ( /* dim=0 */ (__pyx_v_vec3_out.data + __pyx_t_12 * __pyx_v_vec3_out.strides[0]) )) = (((((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_1 * __pyx_v_mat44.strides[0]) ) + __pyx_t_2 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_3 * __pyx_v_vec3_in.strides[0]) )))) + ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_4 * __pyx_v_mat44.strides[0]) ) + __pyx_t_5 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_6 * __pyx_v_vec3_in.strides[0]) ))))) + ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_7 * __pyx_v_mat44.strides[0]) ) + __pyx_t_8 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_9 * __pyx_v_vec3_in.strides[0]) ))))) + (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_10 * __pyx_v_mat44.strides[0]) ) + __pyx_t_11 * __pyx_v_mat44.strides[1]) ))));
+158: + mat44[0,1]*vec3_in[1]
__pyx_t_4 = 0; __pyx_t_5 = 1; __pyx_t_6 = 1;
+159: + mat44[0,2]*vec3_in[2]
__pyx_t_7 = 0; __pyx_t_8 = 2; __pyx_t_9 = 2;
+160: + mat44[0,3])
__pyx_t_10 = 0; __pyx_t_11 = 3;
+161: vec3_out[1] = (mat44[1,0]*vec3_in[0]
__pyx_t_11 = 1; __pyx_t_10 = 0; __pyx_t_9 = 0; /* … */ __pyx_t_12 = 1; *((double *) ( /* dim=0 */ (__pyx_v_vec3_out.data + __pyx_t_12 * __pyx_v_vec3_out.strides[0]) )) = (((((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_11 * __pyx_v_mat44.strides[0]) ) + __pyx_t_10 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_9 * __pyx_v_vec3_in.strides[0]) )))) + ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_8 * __pyx_v_mat44.strides[0]) ) + __pyx_t_7 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_6 * __pyx_v_vec3_in.strides[0]) ))))) + ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_5 * __pyx_v_mat44.strides[0]) ) + __pyx_t_4 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_3 * __pyx_v_vec3_in.strides[0]) ))))) + (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_2 * __pyx_v_mat44.strides[0]) ) + __pyx_t_1 * __pyx_v_mat44.strides[1]) ))));
+162: + mat44[1,1]*vec3_in[1]
__pyx_t_8 = 1; __pyx_t_7 = 1; __pyx_t_6 = 1;
+163: + mat44[1,2]*vec3_in[2]
__pyx_t_5 = 1; __pyx_t_4 = 2; __pyx_t_3 = 2;
+164: + mat44[1,3])
__pyx_t_2 = 1; __pyx_t_1 = 3;
+165: vec3_out[2] = (mat44[2,0]*vec3_in[0]
__pyx_t_1 = 2; __pyx_t_2 = 0; __pyx_t_3 = 0; /* … */ __pyx_t_12 = 2; *((double *) ( /* dim=0 */ (__pyx_v_vec3_out.data + __pyx_t_12 * __pyx_v_vec3_out.strides[0]) )) = (((((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_1 * __pyx_v_mat44.strides[0]) ) + __pyx_t_2 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_3 * __pyx_v_vec3_in.strides[0]) )))) + ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_4 * __pyx_v_mat44.strides[0]) ) + __pyx_t_5 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_6 * __pyx_v_vec3_in.strides[0]) ))))) + ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_7 * __pyx_v_mat44.strides[0]) ) + __pyx_t_8 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_9 * __pyx_v_vec3_in.strides[0]) ))))) + (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_10 * __pyx_v_mat44.strides[0]) ) + __pyx_t_11 * __pyx_v_mat44.strides[1]) ))));
+166: + mat44[2,1]*vec3_in[1]
__pyx_t_4 = 2; __pyx_t_5 = 1; __pyx_t_6 = 1;
+167: + mat44[2,2]*vec3_in[2]
__pyx_t_7 = 2; __pyx_t_8 = 2; __pyx_t_9 = 2;
+168: + mat44[2,3])
__pyx_t_10 = 2; __pyx_t_11 = 3;
+169: vec3_out[3] = (mat44[3,0]*vec3_in[0]
__pyx_t_11 = 3; __pyx_t_10 = 0; __pyx_t_9 = 0; /* … */ __pyx_t_12 = 3; *((double *) ( /* dim=0 */ (__pyx_v_vec3_out.data + __pyx_t_12 * __pyx_v_vec3_out.strides[0]) )) = (((((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_11 * __pyx_v_mat44.strides[0]) ) + __pyx_t_10 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_9 * __pyx_v_vec3_in.strides[0]) )))) + ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_8 * __pyx_v_mat44.strides[0]) ) + __pyx_t_7 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_6 * __pyx_v_vec3_in.strides[0]) ))))) + ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_5 * __pyx_v_mat44.strides[0]) ) + __pyx_t_4 * __pyx_v_mat44.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_vec3_in.data + __pyx_t_3 * __pyx_v_vec3_in.strides[0]) ))))) + (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_mat44.data + __pyx_t_2 * __pyx_v_mat44.strides[0]) ) + __pyx_t_1 * __pyx_v_mat44.strides[1]) ))));
+170: + mat44[3,1]*vec3_in[1]
__pyx_t_8 = 3; __pyx_t_7 = 1; __pyx_t_6 = 1;
+171: + mat44[3,2]*vec3_in[2]
__pyx_t_5 = 3; __pyx_t_4 = 2; __pyx_t_3 = 2;
+172: + mat44[3,3])
__pyx_t_2 = 3; __pyx_t_1 = 3;
173:
+174: return vec3_out
__PYX_INC_MEMVIEW(&__pyx_v_vec3_out, 0); __pyx_r = __pyx_v_vec3_out; goto __pyx_L0;
175:
176:
+177: @cython.nogil
static __Pyx_memviewslice __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_world_to_raster_coords(__Pyx_memviewslice __pyx_v_coords_world, __Pyx_memviewslice __pyx_v_world_to_cam_mat, double __pyx_v_image_dist, __Pyx_memviewslice __pyx_v_image_dims, __Pyx_memviewslice __pyx_v_num_pixels, __Pyx_memviewslice __pyx_v_coords_raster) {
size_t __pyx_v_xx;
size_t __pyx_v_yy;
size_t __pyx_v_zz;
size_t __pyx_v_ww;
__Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
__PYX_INC_MEMVIEW(&__pyx_v_coords_raster, 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
__pyx_r.data = NULL;
__pyx_r.memview = NULL;
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.world_to_raster_coords", __pyx_clineno, __pyx_lineno, __pyx_filename);
goto __pyx_L2;
__pyx_L0:;
if (unlikely(!__pyx_r.memview)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
}
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L2:;
__PYX_XCLEAR_MEMVIEW(&__pyx_v_coords_raster, 0);
return __pyx_r;
}
178: @cython.cfunc # python+C or cython.cfunc for C only
179: @cython.boundscheck(False) # Turn off array bounds checking
180: @cython.wraparound(False) # Turn off negative indexing
181: @cython.cdivision(True) # Turn off divide by zero check
182: @cython.exceptval(check=False)
183: def world_to_raster_coords(coords_world: cython.double[:],
184: world_to_cam_mat: cython.double[:,:],
185: image_dist: cython.double,
186: image_dims: cython.double[:],
187: num_pixels: cython.int[:],
188: coords_raster: cython.double[:]
189: ) -> cython.double[:]:
+190: xx: cython.size_t = 0
__pyx_v_xx = 0;
+191: yy: cython.size_t = 1
__pyx_v_yy = 1;
+192: zz: cython.size_t = 2
__pyx_v_zz = 2;
+193: ww: cython.size_t = 3
__pyx_v_ww = 3;
194:
+195: coords_raster = mult_mat44_by_vec3(world_to_cam_mat,
__pyx_t_1 = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_mult_mat44_by_vec3(__pyx_v_world_to_cam_mat, __pyx_v_coords_world, __pyx_v_coords_raster); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 195, __pyx_L1_error)
__PYX_XCLEAR_MEMVIEW(&__pyx_v_coords_raster, 0);
__pyx_v_coords_raster = __pyx_t_1;
__pyx_t_1.memview = NULL;
__pyx_t_1.data = NULL;
196: coords_world,
197: coords_raster)
198:
+199: coords_raster[xx] = coords_raster[xx] / coords_raster[ww]
__pyx_t_2 = __pyx_v_xx; __pyx_t_3 = __pyx_v_ww; __pyx_t_4 = __pyx_v_xx; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_4 * __pyx_v_coords_raster.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_2 * __pyx_v_coords_raster.strides[0]) ))) / (*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_3 * __pyx_v_coords_raster.strides[0]) ))));
+200: coords_raster[yy] = coords_raster[yy] / coords_raster[ww]
__pyx_t_3 = __pyx_v_yy; __pyx_t_2 = __pyx_v_ww; __pyx_t_4 = __pyx_v_yy; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_4 * __pyx_v_coords_raster.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_3 * __pyx_v_coords_raster.strides[0]) ))) / (*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_2 * __pyx_v_coords_raster.strides[0]) ))));
+201: coords_raster[zz] = coords_raster[zz] / coords_raster[ww]
__pyx_t_2 = __pyx_v_zz; __pyx_t_3 = __pyx_v_ww; __pyx_t_4 = __pyx_v_zz; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_4 * __pyx_v_coords_raster.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_2 * __pyx_v_coords_raster.strides[0]) ))) / (*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_3 * __pyx_v_coords_raster.strides[0]) ))));
202:
+203: coords_raster[xx] = (image_dist * coords_raster[xx]
__pyx_t_3 = __pyx_v_xx; /* … */ __pyx_t_4 = __pyx_v_xx; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_4 * __pyx_v_coords_raster.strides[0]) )) = ((__pyx_v_image_dist * (*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_3 * __pyx_v_coords_raster.strides[0]) )))) / (-(*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_2 * __pyx_v_coords_raster.strides[0]) )))));
+204: / -coords_raster[zz])
__pyx_t_2 = __pyx_v_zz;
+205: coords_raster[yy] = (image_dist * coords_raster[yy]
__pyx_t_2 = __pyx_v_yy; /* … */ __pyx_t_4 = __pyx_v_yy; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_4 * __pyx_v_coords_raster.strides[0]) )) = ((__pyx_v_image_dist * (*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_2 * __pyx_v_coords_raster.strides[0]) )))) / (-(*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_3 * __pyx_v_coords_raster.strides[0]) )))));
+206: / -coords_raster[zz])
__pyx_t_3 = __pyx_v_zz;
207:
+208: coords_raster[xx] = 2*coords_raster[xx] / image_dims[xx]
__pyx_t_3 = __pyx_v_xx; __pyx_t_2 = __pyx_v_xx; __pyx_t_4 = __pyx_v_xx; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_4 * __pyx_v_coords_raster.strides[0]) )) = ((2.0 * (*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_3 * __pyx_v_coords_raster.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_image_dims.data + __pyx_t_2 * __pyx_v_image_dims.strides[0]) ))));
+209: coords_raster[yy] = 2*coords_raster[yy] / image_dims[yy]
__pyx_t_2 = __pyx_v_yy; __pyx_t_3 = __pyx_v_yy; __pyx_t_4 = __pyx_v_yy; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_4 * __pyx_v_coords_raster.strides[0]) )) = ((2.0 * (*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_2 * __pyx_v_coords_raster.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_image_dims.data + __pyx_t_3 * __pyx_v_image_dims.strides[0]) ))));
210:
+211: coords_raster[xx] = (coords_raster[xx] + 1)/2 * num_pixels[xx]
__pyx_t_3 = __pyx_v_xx; __pyx_t_2 = __pyx_v_xx; __pyx_t_4 = __pyx_v_xx; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_4 * __pyx_v_coords_raster.strides[0]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_3 * __pyx_v_coords_raster.strides[0]) ))) + 1.0) / 2.0) * (*((int *) ( /* dim=0 */ (__pyx_v_num_pixels.data + __pyx_t_2 * __pyx_v_num_pixels.strides[0]) ))));
+212: coords_raster[yy] = (1-coords_raster[yy])/2 * num_pixels[yy]
__pyx_t_2 = __pyx_v_yy; __pyx_t_3 = __pyx_v_yy; __pyx_t_4 = __pyx_v_yy; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_4 * __pyx_v_coords_raster.strides[0]) )) = (((1.0 - (*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_2 * __pyx_v_coords_raster.strides[0]) )))) / 2.0) * (*((int *) ( /* dim=0 */ (__pyx_v_num_pixels.data + __pyx_t_3 * __pyx_v_num_pixels.strides[0]) ))));
+213: coords_raster[zz] = -coords_raster[zz]
__pyx_t_3 = __pyx_v_zz; __pyx_t_2 = __pyx_v_zz; *((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_2 * __pyx_v_coords_raster.strides[0]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_coords_raster.data + __pyx_t_3 * __pyx_v_coords_raster.strides[0]) ))));
214:
+215: return coords_raster
__PYX_INC_MEMVIEW(&__pyx_v_coords_raster, 0); __pyx_r = __pyx_v_coords_raster; goto __pyx_L0;
216:
+217: @cython.cfunc
static CYTHON_INLINE double __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_edge_function(__Pyx_memviewslice __pyx_v_vert_0, __Pyx_memviewslice __pyx_v_vert_1, __Pyx_memviewslice __pyx_v_vert_2) {
double __pyx_v_edge_fun;
double __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
218: @cython.nogil
219: @cython.boundscheck(False)
220: @cython.wraparound(False)
221: @cython.inline
222: @cython.exceptval(check=False)
223: def edge_function(vert_0: cython.double[:],
224: vert_1: cython.double[:],
225: vert_2: cython.double[:]) -> cython.double:
226: edge_fun: cython.double = (
+227: (vert_2[0] - vert_0[0]) * (vert_1[1] - vert_0[1])
__pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 1; __pyx_t_4 = 1;
+228: - (vert_2[1] - vert_0[1]) * (vert_1[0] - vert_0[0]))
__pyx_t_5 = 1; __pyx_t_6 = 1; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_v_edge_fun = ((((*((double *) ( /* dim=0 */ (__pyx_v_vert_2.data + __pyx_t_1 * __pyx_v_vert_2.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_vert_0.data + __pyx_t_2 * __pyx_v_vert_0.strides[0]) )))) * ((*((double *) ( /* dim=0 */ (__pyx_v_vert_1.data + __pyx_t_3 * __pyx_v_vert_1.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_vert_0.data + __pyx_t_4 * __pyx_v_vert_0.strides[0]) ))))) - (((*((double *) ( /* dim=0 */ (__pyx_v_vert_2.data + __pyx_t_5 * __pyx_v_vert_2.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_vert_0.data + __pyx_t_6 * __pyx_v_vert_0.strides[0]) )))) * ((*((double *) ( /* dim=0 */ (__pyx_v_vert_1.data + __pyx_t_7 * __pyx_v_vert_1.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_vert_0.data + __pyx_t_8 * __pyx_v_vert_0.strides[0]) ))))));
+229: return edge_fun
__pyx_r = __pyx_v_edge_fun; goto __pyx_L0;
230:
231:
+232: @cython.cfunc
static CYTHON_INLINE double __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_edge_function_pt(__Pyx_memviewslice __pyx_v_vert_0, __Pyx_memviewslice __pyx_v_vert_1, double __pyx_v_vert_2_x, double __pyx_v_vert_2_y) {
double __pyx_v_edge_fun;
double __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
233: @cython.nogil
234: @cython.boundscheck(False)
235: @cython.wraparound(False)
236: @cython.inline
237: @cython.exceptval(check=False)
238: def edge_function_pt(vert_0: cython.double[:],
239: vert_1: cython.double[:],
240: vert_2_x: cython.double,
241: vert_2_y: cython.double) -> cython.double:
242: edge_fun: cython.double = (
+243: (vert_2_x - vert_0[0]) * (vert_1[1] - vert_0[1])
__pyx_t_1 = 0; __pyx_t_2 = 1; __pyx_t_3 = 1;
+244: - (vert_2_y - vert_0[1]) * (vert_1[0] - vert_0[0]))
__pyx_t_4 = 1; __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_v_edge_fun = (((__pyx_v_vert_2_x - (*((double *) ( /* dim=0 */ (__pyx_v_vert_0.data + __pyx_t_1 * __pyx_v_vert_0.strides[0]) )))) * ((*((double *) ( /* dim=0 */ (__pyx_v_vert_1.data + __pyx_t_2 * __pyx_v_vert_1.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_vert_0.data + __pyx_t_3 * __pyx_v_vert_0.strides[0]) ))))) - ((__pyx_v_vert_2_y - (*((double *) ( /* dim=0 */ (__pyx_v_vert_0.data + __pyx_t_4 * __pyx_v_vert_0.strides[0]) )))) * ((*((double *) ( /* dim=0 */ (__pyx_v_vert_1.data + __pyx_t_5 * __pyx_v_vert_1.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_vert_0.data + __pyx_t_6 * __pyx_v_vert_0.strides[0]) ))))));
+245: return edge_fun
__pyx_r = __pyx_v_edge_fun; goto __pyx_L0;
246:
247:
+248: @cython.ccall
static PyObject *__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_1average_image(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static __Pyx_memviewslice __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_average_image(__Pyx_memviewslice __pyx_v_image_subpx, int __pyx_v_sub_samp, CYTHON_UNUSED int __pyx_skip_dispatch) {
size_t __pyx_v_px_num_y;
size_t __pyx_v_px_num_x;
PyObject *__pyx_v_image_buff_avg_np = NULL;
__Pyx_memviewslice __pyx_v_image_buff_avg = { 0, 0, { 0 }, { 0 }, { 0 } };
size_t __pyx_v_num_subpx_y;
size_t __pyx_v_num_subpx_x;
double __pyx_v_subpx_per_px;
size_t __pyx_v_ss_size;
size_t __pyx_v_num_px_y;
size_t __pyx_v_num_px_x;
double __pyx_v_px_sum;
size_t __pyx_v_ix;
size_t __pyx_v_iy;
size_t __pyx_v_sx;
size_t __pyx_v_sy;
__Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_7, 1);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__pyx_r.data = NULL;
__pyx_r.memview = NULL;
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.average_image", __pyx_clineno, __pyx_lineno, __pyx_filename);
goto __pyx_L2;
__pyx_L0:;
if (unlikely(!__pyx_r.memview)) {
PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
}
__pyx_L2:;
__Pyx_XDECREF(__pyx_v_image_buff_avg_np);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_image_buff_avg, 1);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_1average_image(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pyvale_9sensorsim_6cython_10rastercyth_1average_image = {"average_image", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_1average_image, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_1average_image(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
__Pyx_memviewslice __pyx_v_image_subpx = { 0, 0, { 0 }, { 0 }, { 0 } };
int __pyx_v_sub_samp;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("average_image (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_image_subpx,&__pyx_mstate_global->__pyx_n_u_sub_samp,0};
PyObject* values[2] = {0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 248, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 248, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 248, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "average_image", 0) < (0)) __PYX_ERR(0, 248, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("average_image", 1, 2, 2, i); __PYX_ERR(0, 248, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 2)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 248, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 248, __pyx_L3_error)
}
__pyx_v_image_subpx = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_image_subpx.memview)) __PYX_ERR(0, 252, __pyx_L3_error)
__pyx_v_sub_samp = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_sub_samp == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 253, __pyx_L3_error)
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("average_image", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 248, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__PYX_XCLEAR_MEMVIEW(&__pyx_v_image_subpx, 1);
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.average_image", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(((PyObject *)__pyx_v_image_subpx.memview) == Py_None)) {
PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "image_subpx"); __PYX_ERR(0, 252, __pyx_L1_error)
}
__pyx_r = __pyx_pf_6pyvale_9sensorsim_6cython_10rastercyth_average_image(__pyx_self, __pyx_v_image_subpx, __pyx_v_sub_samp);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__PYX_XCLEAR_MEMVIEW(&__pyx_v_image_subpx, 1);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_6pyvale_9sensorsim_6cython_10rastercyth_average_image(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_image_subpx, int __pyx_v_sub_samp) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
if (unlikely(!__pyx_v_image_subpx.memview)) { __Pyx_RaiseUnboundLocalError("image_subpx"); __PYX_ERR(0, 248, __pyx_L1_error) }
if (unlikely(((PyObject *) __pyx_v_image_subpx.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 248, __pyx_L1_error)
}
__pyx_t_1 = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_average_image(__pyx_v_image_subpx, __pyx_v_sub_samp, 1); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 248, __pyx_L1_error)
__pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_1, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 248, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
__pyx_t_1.memview = NULL; __pyx_t_1.data = NULL;
__pyx_r = __pyx_t_2;
__pyx_t_2 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.average_image", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 248, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_image_subpx, __pyx_mstate_global->__pyx_kp_u_cython_double) < (0)) __PYX_ERR(0, 248, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sub_samp, __pyx_mstate_global->__pyx_kp_u_cython_int) < (0)) __PYX_ERR(0, 248, __pyx_L1_error)
__pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pyvale_9sensorsim_6cython_10rastercyth_1average_image, 0, __pyx_mstate_global->__pyx_n_u_average_image, NULL, __pyx_mstate_global->__pyx_n_u_pyvale_sensorsim_cython_rastercy, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 248, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
#endif
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_4);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_average_image, __pyx_t_5) < (0)) __PYX_ERR(0, 248, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
249: @cython.boundscheck(False)
250: @cython.wraparound(False)
251: @cython.cdivision(True)
252: def average_image(image_subpx: cython.double[:,:],
253: sub_samp: cython.int,
254: ) -> cython.double[:,:]:
255:
+256: if sub_samp <= 1:
__pyx_t_1 = (__pyx_v_sub_samp <= 1);
if (__pyx_t_1) {
/* … */
}
+257: return np.asarray(image_subpx[:,:])
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 257, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_image_subpx, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 257, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_r = __pyx_t_7;
__pyx_t_7.memview = NULL;
__pyx_t_7.data = NULL;
goto __pyx_L0;
258:
+259: px_num_y: cython.size_t = int(ceil(image_subpx.shape[0]/sub_samp))
__pyx_v_px_num_y = ((size_t)ceil(((__pyx_v_image_subpx.shape[0]) / ((Py_ssize_t)__pyx_v_sub_samp))));
+260: px_num_x: cython.size_t = int(ceil(image_subpx.shape[1]/sub_samp))
__pyx_v_px_num_x = ((size_t)ceil(((__pyx_v_image_subpx.shape[1]) / ((Py_ssize_t)__pyx_v_sub_samp))));
261:
+262: image_buff_avg_np = np.full((px_num_y,px_num_x),0.0,dtype=np.float64)
__pyx_t_5 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_full); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_px_num_y); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyLong_FromSize_t(__pyx_v_px_num_x); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4) != (0)) __PYX_ERR(0, 262, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_8); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 262, __pyx_L1_error); __pyx_t_4 = 0; __pyx_t_8 = 0; __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_5, __pyx_t_9, __pyx_mstate_global->__pyx_float_0_0}; __pyx_t_8 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_8, __pyx_callargs+3, 0) < (0)) __PYX_ERR(0, 262, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_image_buff_avg_np = __pyx_t_2; __pyx_t_2 = 0;
+263: image_buff_avg: cython.double[:,:] = image_buff_avg_np
__pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_image_buff_avg_np, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 263, __pyx_L1_error) __pyx_v_image_buff_avg = __pyx_t_7; __pyx_t_7.memview = NULL; __pyx_t_7.data = NULL;
264:
+265: num_subpx_y: cython.size_t = image_subpx.shape[0]
__pyx_v_num_subpx_y = (__pyx_v_image_subpx.shape[0]);
+266: num_subpx_x: cython.size_t = image_subpx.shape[1]
__pyx_v_num_subpx_x = (__pyx_v_image_subpx.shape[1]);
+267: subpx_per_px: cython.double = float(sub_samp*sub_samp)
__pyx_v_subpx_per_px = ((double)(__pyx_v_sub_samp * __pyx_v_sub_samp));
+268: ss_size: cython.size_t = sub_samp
__pyx_v_ss_size = __pyx_v_sub_samp;
269:
+270: num_px_y: cython.size_t = int(num_subpx_y/sub_samp)
__pyx_v_num_px_y = (__pyx_v_num_subpx_y / ((size_t)__pyx_v_sub_samp));
+271: num_px_x: cython.size_t = int(num_subpx_x/sub_samp)
__pyx_v_num_px_x = (__pyx_v_num_subpx_x / ((size_t)__pyx_v_sub_samp));
272:
+273: px_sum: cython.double = 0.0
__pyx_v_px_sum = 0.0;
274:
+275: ix: cython.size_t = 0
__pyx_v_ix = 0;
+276: iy: cython.size_t = 0
__pyx_v_iy = 0;
+277: sx: cython.size_t = 0
__pyx_v_sx = 0;
+278: sy: cython.size_t = 0
__pyx_v_sy = 0;
279:
+280: for iy in range(num_px_y):
__pyx_t_6 = __pyx_v_num_px_y;
__pyx_t_10 = __pyx_t_6;
for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
__pyx_v_iy = __pyx_t_11;
+281: for ix in range(num_px_x):
__pyx_t_12 = __pyx_v_num_px_x;
__pyx_t_13 = __pyx_t_12;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_ix = __pyx_t_14;
+282: px_sum = 0.0
__pyx_v_px_sum = 0.0;
+283: for sy in range(ss_size):
__pyx_t_15 = __pyx_v_ss_size;
__pyx_t_16 = __pyx_t_15;
for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
__pyx_v_sy = __pyx_t_17;
+284: for sx in range(ss_size):
__pyx_t_18 = __pyx_v_ss_size;
__pyx_t_19 = __pyx_t_18;
for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
__pyx_v_sx = __pyx_t_20;
+285: px_sum += image_subpx[ss_size*iy+sy,ss_size*ix+sx]
__pyx_t_21 = ((__pyx_v_ss_size * __pyx_v_iy) + __pyx_v_sy);
__pyx_t_22 = ((__pyx_v_ss_size * __pyx_v_ix) + __pyx_v_sx);
__pyx_v_px_sum = (__pyx_v_px_sum + (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_subpx.data + __pyx_t_21 * __pyx_v_image_subpx.strides[0]) ) + __pyx_t_22 * __pyx_v_image_subpx.strides[1]) ))));
}
}
286:
+287: image_buff_avg[iy,ix] = px_sum / subpx_per_px
__pyx_t_15 = __pyx_v_iy;
__pyx_t_16 = __pyx_v_ix;
*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_buff_avg.data + __pyx_t_15 * __pyx_v_image_buff_avg.strides[0]) ) + __pyx_t_16 * __pyx_v_image_buff_avg.strides[1]) )) = (__pyx_v_px_sum / __pyx_v_subpx_per_px);
}
}
288:
+289: return image_buff_avg
__PYX_INC_MEMVIEW(&__pyx_v_image_buff_avg, 1); __pyx_r = __pyx_v_image_buff_avg; goto __pyx_L0;
290:
291:
+292: @cython.nogil
static int __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth__average_image(__Pyx_memviewslice __pyx_v_image_buff_subpx_in, int __pyx_v_sub_samp, __Pyx_memviewslice __pyx_v_image_buff_avg_out) {
size_t __pyx_v_num_subpx_y;
size_t __pyx_v_num_subpx_x;
double __pyx_v_subpx_per_px;
size_t __pyx_v_ss_size;
size_t __pyx_v_num_px_y;
size_t __pyx_v_num_px_x;
double __pyx_v_px_sum;
size_t __pyx_v_ix;
size_t __pyx_v_iy;
size_t __pyx_v_sx;
size_t __pyx_v_sy;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
293: @cython.cfunc
294: @cython.boundscheck(False)
295: @cython.wraparound(False)
296: @cython.cdivision(True)
297: @cython.exceptval(check=False)
298: def _average_image(image_buff_subpx_in: cython.double[:,:],
299: sub_samp: cython.int,
300: image_buff_avg_out: cython.double[:,:]
301: ) -> cython.int:
302:
+303: num_subpx_y: cython.size_t = image_buff_subpx_in.shape[0]
__pyx_v_num_subpx_y = (__pyx_v_image_buff_subpx_in.shape[0]);
+304: num_subpx_x: cython.size_t = image_buff_subpx_in.shape[1]
__pyx_v_num_subpx_x = (__pyx_v_image_buff_subpx_in.shape[1]);
+305: subpx_per_px: cython.double = float(sub_samp*sub_samp)
__pyx_v_subpx_per_px = ((double)(__pyx_v_sub_samp * __pyx_v_sub_samp));
+306: ss_size: cython.size_t = sub_samp
__pyx_v_ss_size = __pyx_v_sub_samp;
307:
+308: num_px_y: cython.size_t = int(num_subpx_y/sub_samp)
__pyx_v_num_px_y = (__pyx_v_num_subpx_y / ((size_t)__pyx_v_sub_samp));
+309: num_px_x: cython.size_t = int(num_subpx_x/sub_samp)
__pyx_v_num_px_x = (__pyx_v_num_subpx_x / ((size_t)__pyx_v_sub_samp));
310:
+311: px_sum: cython.double = 0.0
__pyx_v_px_sum = 0.0;
312:
+313: ix: cython.size_t = 0
__pyx_v_ix = 0;
+314: iy: cython.size_t = 0
__pyx_v_iy = 0;
+315: sx: cython.size_t = 0
__pyx_v_sx = 0;
+316: sy: cython.size_t = 0
__pyx_v_sy = 0;
317:
+318: for iy in range(num_px_y):
__pyx_t_1 = __pyx_v_num_px_y;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_iy = __pyx_t_3;
+319: for ix in range(num_px_x):
__pyx_t_4 = __pyx_v_num_px_x;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_ix = __pyx_t_6;
+320: px_sum = 0.0
__pyx_v_px_sum = 0.0;
+321: for sy in range(ss_size):
__pyx_t_7 = __pyx_v_ss_size;
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
__pyx_v_sy = __pyx_t_9;
+322: for sx in range(ss_size):
__pyx_t_10 = __pyx_v_ss_size;
__pyx_t_11 = __pyx_t_10;
for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
__pyx_v_sx = __pyx_t_12;
+323: px_sum += image_buff_subpx_in[ss_size*iy+sy,ss_size*ix+sx]
__pyx_t_13 = ((__pyx_v_ss_size * __pyx_v_iy) + __pyx_v_sy);
__pyx_t_14 = ((__pyx_v_ss_size * __pyx_v_ix) + __pyx_v_sx);
__pyx_v_px_sum = (__pyx_v_px_sum + (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_buff_subpx_in.data + __pyx_t_13 * __pyx_v_image_buff_subpx_in.strides[0]) ) + __pyx_t_14 * __pyx_v_image_buff_subpx_in.strides[1]) ))));
}
}
324:
+325: image_buff_avg_out[iy,ix] = px_sum / subpx_per_px
__pyx_t_7 = __pyx_v_iy;
__pyx_t_8 = __pyx_v_ix;
*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_buff_avg_out.data + __pyx_t_7 * __pyx_v_image_buff_avg_out.strides[0]) ) + __pyx_t_8 * __pyx_v_image_buff_avg_out.strides[1]) )) = (__pyx_v_px_sum / __pyx_v_subpx_per_px);
}
}
326:
+327: return 0
__pyx_r = 0; goto __pyx_L0;
328:
329:
330: #///////////////////////////////////////////////////////////////////////////////
+331: @cython.ccall # python+C or cython.cfunc for C only
static PyObject *__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_3raster_static_frame(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_raster_static_frame(__Pyx_memviewslice __pyx_v_coords, __Pyx_memviewslice __pyx_v_connect, __Pyx_memviewslice __pyx_v_fields_to_render, PyObject *__pyx_v_cam_data, CYTHON_UNUSED int __pyx_skip_dispatch) {
__Pyx_memviewslice __pyx_v_world_to_cam_mat = { 0, 0, { 0 }, { 0 }, { 0 } };
__Pyx_memviewslice __pyx_v_pixels_num = { 0, 0, { 0 }, { 0 }, { 0 } };
__Pyx_memviewslice __pyx_v_image_dims = { 0, 0, { 0 }, { 0 }, { 0 } };
double __pyx_v_image_dist;
int __pyx_v_sub_samp;
size_t __pyx_v_nodes_per_elem;
size_t __pyx_v_fields_num;
int __pyx_v_sub_pix_x;
int __pyx_v_sub_pix_y;
PyObject *__pyx_v_image_buff_avg_np = NULL;
__Pyx_memviewslice __pyx_v_image_buff_avg = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_v_depth_buff_avg_np = NULL;
__Pyx_memviewslice __pyx_v_depth_buff_avg = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_v_depth_buffer_np = NULL;
__Pyx_memviewslice __pyx_v_depth_buff_subpx = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_v_image_buffer_np = NULL;
__Pyx_memviewslice __pyx_v_image_buff_subpx = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_v_nodes_raster_np = NULL;
__Pyx_memviewslice __pyx_v_nodes_raster_buff = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_v_field_raster_np = NULL;
__Pyx_memviewslice __pyx_v_field_raster_buff = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_v_weights_np = NULL;
__Pyx_memviewslice __pyx_v_weights_buff = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_v_px_coord_np = NULL;
__Pyx_memviewslice __pyx_v_px_coord_buff = { 0, 0, { 0 }, { 0 }, { 0 } };
size_t __pyx_v_elems_in_image;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_2, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_3, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_4, 1);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_15, 1);
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.raster_static_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__PYX_XCLEAR_MEMVIEW(&__pyx_v_world_to_cam_mat, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_pixels_num, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_image_dims, 1);
__Pyx_XDECREF(__pyx_v_image_buff_avg_np);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_image_buff_avg, 1);
__Pyx_XDECREF(__pyx_v_depth_buff_avg_np);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_depth_buff_avg, 1);
__Pyx_XDECREF(__pyx_v_depth_buffer_np);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_depth_buff_subpx, 1);
__Pyx_XDECREF(__pyx_v_image_buffer_np);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_image_buff_subpx, 1);
__Pyx_XDECREF(__pyx_v_nodes_raster_np);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_nodes_raster_buff, 1);
__Pyx_XDECREF(__pyx_v_field_raster_np);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_field_raster_buff, 1);
__Pyx_XDECREF(__pyx_v_weights_np);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_weights_buff, 1);
__Pyx_XDECREF(__pyx_v_px_coord_np);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_px_coord_buff, 1);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_3raster_static_frame(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pyvale_9sensorsim_6cython_10rastercyth_3raster_static_frame = {"raster_static_frame", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_3raster_static_frame, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_3raster_static_frame(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
__Pyx_memviewslice __pyx_v_coords = { 0, 0, { 0 }, { 0 }, { 0 } };
__Pyx_memviewslice __pyx_v_connect = { 0, 0, { 0 }, { 0 }, { 0 } };
__Pyx_memviewslice __pyx_v_fields_to_render = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_v_cam_data = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("raster_static_frame (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_coords,&__pyx_mstate_global->__pyx_n_u_connect,&__pyx_mstate_global->__pyx_n_u_fields_to_render,&__pyx_mstate_global->__pyx_n_u_cam_data,0};
PyObject* values[4] = {0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 331, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 331, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 331, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 331, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 331, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "raster_static_frame", 0) < (0)) __PYX_ERR(0, 331, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("raster_static_frame", 1, 4, 4, i); __PYX_ERR(0, 331, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 4)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 331, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 331, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 331, __pyx_L3_error)
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 331, __pyx_L3_error)
}
__pyx_v_coords = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_coords.memview)) __PYX_ERR(0, 335, __pyx_L3_error)
__pyx_v_connect = __Pyx_PyObject_to_MemoryviewSlice_dsds_size_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_connect.memview)) __PYX_ERR(0, 336, __pyx_L3_error)
__pyx_v_fields_to_render = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_fields_to_render.memview)) __PYX_ERR(0, 337, __pyx_L3_error)
__pyx_v_cam_data = values[3];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("raster_static_frame", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 331, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__PYX_XCLEAR_MEMVIEW(&__pyx_v_coords, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_connect, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_fields_to_render, 1);
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.raster_static_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(((PyObject *)__pyx_v_coords.memview) == Py_None)) {
PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "coords"); __PYX_ERR(0, 335, __pyx_L1_error)
}
if (unlikely(((PyObject *)__pyx_v_connect.memview) == Py_None)) {
PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "connect"); __PYX_ERR(0, 336, __pyx_L1_error)
}
if (unlikely(((PyObject *)__pyx_v_fields_to_render.memview) == Py_None)) {
PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "fields_to_render"); __PYX_ERR(0, 337, __pyx_L1_error)
}
__pyx_r = __pyx_pf_6pyvale_9sensorsim_6cython_10rastercyth_2raster_static_frame(__pyx_self, __pyx_v_coords, __pyx_v_connect, __pyx_v_fields_to_render, __pyx_v_cam_data);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__PYX_XCLEAR_MEMVIEW(&__pyx_v_coords, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_connect, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_fields_to_render, 1);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_6pyvale_9sensorsim_6cython_10rastercyth_2raster_static_frame(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_coords, __Pyx_memviewslice __pyx_v_connect, __Pyx_memviewslice __pyx_v_fields_to_render, PyObject *__pyx_v_cam_data) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
if (unlikely(!__pyx_v_coords.memview)) { __Pyx_RaiseUnboundLocalError("coords"); __PYX_ERR(0, 331, __pyx_L1_error) }
if (unlikely(((PyObject *) __pyx_v_coords.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 331, __pyx_L1_error)
}
if (unlikely(!__pyx_v_connect.memview)) { __Pyx_RaiseUnboundLocalError("connect"); __PYX_ERR(0, 331, __pyx_L1_error) }
if (unlikely(((PyObject *) __pyx_v_connect.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 331, __pyx_L1_error)
}
if (unlikely(!__pyx_v_fields_to_render.memview)) { __Pyx_RaiseUnboundLocalError("fields_to_render"); __PYX_ERR(0, 331, __pyx_L1_error) }
if (unlikely(((PyObject *) __pyx_v_fields_to_render.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 331, __pyx_L1_error)
}
__pyx_t_1 = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_raster_static_frame(__pyx_v_coords, __pyx_v_connect, __pyx_v_fields_to_render, __pyx_v_cam_data, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 331, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.raster_static_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_5 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 331, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_coords, __pyx_mstate_global->__pyx_kp_u_cython_double) < (0)) __PYX_ERR(0, 331, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_connect, __pyx_mstate_global->__pyx_kp_u_cython_size_t) < (0)) __PYX_ERR(0, 331, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_fields_to_render, __pyx_mstate_global->__pyx_kp_u_cython_double) < (0)) __PYX_ERR(0, 331, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_cam_data, __pyx_mstate_global->__pyx_n_u_CameraData) < (0)) __PYX_ERR(0, 331, __pyx_L1_error)
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6pyvale_9sensorsim_6cython_10rastercyth_3raster_static_frame, 0, __pyx_mstate_global->__pyx_n_u_raster_static_frame, NULL, __pyx_mstate_global->__pyx_n_u_pyvale_sensorsim_cython_rastercy, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 331, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
#endif
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_5);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_raster_static_frame, __pyx_t_4) < (0)) __PYX_ERR(0, 331, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
332: @cython.boundscheck(False) # Turn off array bounds checking
333: @cython.wraparound(False) # Turn off negative indexing
334: @cython.cdivision(True) # Turn off divide by zero check
335: def raster_static_frame(coords: cython.double[:,:],
336: connect: cython.size_t[:,:],
337: fields_to_render: cython.double[:,:],
338: cam_data: CameraData,
339: ) -> tuple[np.ndarray,np.ndarray,int]:
340:
341:
+342: world_to_cam_mat: cython.double[:,:] = cam_data.world_to_cam_mat
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_cam_data, __pyx_mstate_global->__pyx_n_u_world_to_cam_mat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 342, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_world_to_cam_mat = __pyx_t_2; __pyx_t_2.memview = NULL; __pyx_t_2.data = NULL;
+343: pixels_num: cython.int[:] = cam_data.pixels_num
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_cam_data, __pyx_mstate_global->__pyx_n_u_pixels_num); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 343, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_pixels_num = __pyx_t_3; __pyx_t_3.memview = NULL; __pyx_t_3.data = NULL;
+344: image_dims: cython.double[:] = cam_data.image_dims
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_cam_data, __pyx_mstate_global->__pyx_n_u_image_dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 344, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 344, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_image_dims = __pyx_t_4; __pyx_t_4.memview = NULL; __pyx_t_4.data = NULL;
+345: image_dist: cython.double = cam_data.image_dist
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_cam_data, __pyx_mstate_global->__pyx_n_u_image_dist); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_image_dist = __pyx_t_5;
+346: sub_samp: cython.int = cam_data.sub_samp
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_cam_data, __pyx_mstate_global->__pyx_n_u_sub_samp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 346, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_sub_samp = __pyx_t_6;
347:
+348: nodes_per_elem: cython.size_t = connect.shape[1]
__pyx_v_nodes_per_elem = (__pyx_v_connect.shape[1]);
+349: fields_num: cython.size_t = fields_to_render.shape[1]
__pyx_v_fields_num = (__pyx_v_fields_to_render.shape[1]);
+350: sub_pix_x: cython.int = pixels_num[0]*sub_samp
__pyx_t_7 = 0; __pyx_v_sub_pix_x = ((*((int *) ( /* dim=0 */ (__pyx_v_pixels_num.data + __pyx_t_7 * __pyx_v_pixels_num.strides[0]) ))) * __pyx_v_sub_samp);
+351: sub_pix_y: cython.int = pixels_num[1]*sub_samp
__pyx_t_7 = 1; __pyx_v_sub_pix_y = ((*((int *) ( /* dim=0 */ (__pyx_v_pixels_num.data + __pyx_t_7 * __pyx_v_pixels_num.strides[0]) ))) * __pyx_v_sub_samp);
352:
353: #---------------------------------------------------------------------------
354: # Final image buffer memory allocation
+355: image_buff_avg_np = np.full((pixels_num[1],pixels_num[0],fields_num),0.0,dtype=np.float64)
__pyx_t_8 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_full); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_7 = 1; __pyx_t_9 = __Pyx_PyLong_From_int((*((int *) ( /* dim=0 */ (__pyx_v_pixels_num.data + __pyx_t_7 * __pyx_v_pixels_num.strides[0]) )))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = 0; __pyx_t_11 = __Pyx_PyLong_From_int((*((int *) ( /* dim=0 */ (__pyx_v_pixels_num.data + __pyx_t_7 * __pyx_v_pixels_num.strides[0]) )))); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyLong_FromSize_t(__pyx_v_fields_num); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 355, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_11); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_11) != (0)) __PYX_ERR(0, 355, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_12); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_12) != (0)) __PYX_ERR(0, 355, __pyx_L1_error); __pyx_t_9 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_10, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_8, __pyx_t_13, __pyx_mstate_global->__pyx_float_0_0}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_11, __pyx_t_12, __pyx_callargs+3, 0) < (0)) __PYX_ERR(0, 355, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_image_buff_avg_np = __pyx_t_1; __pyx_t_1 = 0;
+356: image_buff_avg: cython.double[:,:,:] = image_buff_avg_np
__pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(__pyx_v_image_buff_avg_np, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(0, 356, __pyx_L1_error) __pyx_v_image_buff_avg = __pyx_t_15; __pyx_t_15.memview = NULL; __pyx_t_15.data = NULL;
357:
+358: depth_buff_avg_np = np.full((pixels_num[1],pixels_num[0]),0.0,dtype=np.float64)
__pyx_t_10 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_full); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_7 = 1; __pyx_t_12 = __Pyx_PyLong_From_int((*((int *) ( /* dim=0 */ (__pyx_v_pixels_num.data + __pyx_t_7 * __pyx_v_pixels_num.strides[0]) )))); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_7 = 0; __pyx_t_13 = __Pyx_PyLong_From_int((*((int *) ( /* dim=0 */ (__pyx_v_pixels_num.data + __pyx_t_7 * __pyx_v_pixels_num.strides[0]) )))); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_12); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_12) != (0)) __PYX_ERR(0, 358, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_13); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_13) != (0)) __PYX_ERR(0, 358, __pyx_L1_error); __pyx_t_12 = 0; __pyx_t_13 = 0; __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_10, __pyx_t_8, __pyx_mstate_global->__pyx_float_0_0}; __pyx_t_13 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_12, __pyx_t_13, __pyx_callargs+3, 0) < (0)) __PYX_ERR(0, 358, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_depth_buff_avg_np = __pyx_t_1; __pyx_t_1 = 0;
+359: depth_buff_avg: cython.double[:,:] = depth_buff_avg_np
__pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_depth_buff_avg_np, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 359, __pyx_L1_error) __pyx_v_depth_buff_avg = __pyx_t_2; __pyx_t_2.memview = NULL; __pyx_t_2.data = NULL;
360:
361: #---------------------------------------------------------------------------
362: # Per-thread scratch memory allocations
+363: depth_buffer_np = np.full((sub_pix_y,sub_pix_x),1.0e6,dtype=np.float64)
__pyx_t_11 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_full); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_13 = __Pyx_PyLong_From_int(__pyx_v_sub_pix_y); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_8 = __Pyx_PyLong_From_int(__pyx_v_sub_pix_x); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_GIVEREF(__pyx_t_13); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13) != (0)) __PYX_ERR(0, 363, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_8); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 363, __pyx_L1_error); __pyx_t_13 = 0; __pyx_t_8 = 0; __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_11); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_11, __pyx_t_10, __pyx_mstate_global->__pyx_float_1_0e6}; __pyx_t_8 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_13, __pyx_t_8, __pyx_callargs+3, 0) < (0)) __PYX_ERR(0, 363, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_depth_buffer_np = __pyx_t_1; __pyx_t_1 = 0;
+364: depth_buff_subpx: cython.double[:,:] = depth_buffer_np
__pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_depth_buffer_np, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 364, __pyx_L1_error) __pyx_v_depth_buff_subpx = __pyx_t_2; __pyx_t_2.memview = NULL; __pyx_t_2.data = NULL;
365:
+366: image_buffer_np = np.full((sub_pix_y,sub_pix_x,fields_num),0.0,dtype=np.float64)
__pyx_t_12 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_full); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyLong_From_int(__pyx_v_sub_pix_y); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_sub_pix_x); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyLong_FromSize_t(__pyx_v_fields_num); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_8); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 366, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_10); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_10) != (0)) __PYX_ERR(0, 366, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_11); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_11) != (0)) __PYX_ERR(0, 366, __pyx_L1_error); __pyx_t_8 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_13))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); assert(__pyx_t_12); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_13, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_12, __pyx_t_9, __pyx_mstate_global->__pyx_float_0_0}; __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_10, __pyx_t_11, __pyx_callargs+3, 0) < (0)) __PYX_ERR(0, 366, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_image_buffer_np = __pyx_t_1; __pyx_t_1 = 0;
+367: image_buff_subpx: cython.double[:,:,:] = image_buffer_np
__pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(__pyx_v_image_buffer_np, PyBUF_WRITABLE); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(0, 367, __pyx_L1_error) __pyx_v_image_buff_subpx = __pyx_t_15; __pyx_t_15.memview = NULL; __pyx_t_15.data = NULL;
368:
369: # shape=(nodes_per_elem, coord[X,Y,Z,W])
+370: nodes_raster_np = np.empty((nodes_per_elem,4),dtype=np.float64)
__pyx_t_13 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_empty); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyLong_FromSize_t(__pyx_v_nodes_per_elem); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_11); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 370, __pyx_L1_error); __Pyx_INCREF(__pyx_mstate_global->__pyx_int_4); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_mstate_global->__pyx_int_4) != (0)) __PYX_ERR(0, 370, __pyx_L1_error); __pyx_t_11 = 0; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_10); assert(__pyx_t_13); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_13); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_10, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_13, __pyx_t_9}; __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_12, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 370, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11); __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_nodes_raster_np = __pyx_t_1; __pyx_t_1 = 0;
+371: nodes_raster_buff: cython.double[:,:] = nodes_raster_np
__pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_nodes_raster_np, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 371, __pyx_L1_error) __pyx_v_nodes_raster_buff = __pyx_t_2; __pyx_t_2.memview = NULL; __pyx_t_2.data = NULL;
372:
+373: field_raster_np = np.empty((nodes_per_elem,),dtype=np.float64)
__pyx_t_10 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_empty); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyLong_FromSize_t(__pyx_v_nodes_per_elem); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_11); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 373, __pyx_L1_error); __pyx_t_11 = 0; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_10, __pyx_t_9}; __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_13, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 373, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_field_raster_np = __pyx_t_1; __pyx_t_1 = 0;
+374: field_raster_buff: cython.double[:] = field_raster_np
__pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_field_raster_np, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 374, __pyx_L1_error) __pyx_v_field_raster_buff = __pyx_t_4; __pyx_t_4.memview = NULL; __pyx_t_4.data = NULL;
375:
+376: weights_np = np.zeros((nodes_per_elem,),np.float64)
__pyx_t_12 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyLong_FromSize_t(__pyx_v_nodes_per_elem); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_11); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 376, __pyx_L1_error); __pyx_t_11 = 0; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_13))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); assert(__pyx_t_12); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_13, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_9, __pyx_t_10}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_weights_np = __pyx_t_1; __pyx_t_1 = 0;
+377: weights_buff: cython.double[:] = weights_np
__pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_weights_np, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 377, __pyx_L1_error) __pyx_v_weights_buff = __pyx_t_4; __pyx_t_4.memview = NULL; __pyx_t_4.data = NULL;
378:
379: # Only used for edge function in raster coords - need x,y
+380: px_coord_np = np.zeros((2,),np.float64)
__pyx_t_13 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_13); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_13); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_13, __pyx_mstate_global->__pyx_tuple[2], __pyx_t_12}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_px_coord_np = __pyx_t_1; __pyx_t_1 = 0;
+381: px_coord_buff: cython.double[:] = px_coord_np
__pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_px_coord_np, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 381, __pyx_L1_error) __pyx_v_px_coord_buff = __pyx_t_4; __pyx_t_4.memview = NULL; __pyx_t_4.data = NULL;
382:
383:
384: #---------------------------------------------------------------------------
+385: elems_in_image: cython.size_t = _raster_frame(coords[:,:],
if (unlikely(((PyObject *) __pyx_v_coords.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 385, __pyx_L1_error)
}
/* … */
__pyx_v_elems_in_image = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth__raster_frame(__pyx_v_coords, __pyx_v_connect, __pyx_v_fields_to_render, __pyx_v_world_to_cam_mat, __pyx_v_pixels_num, __pyx_v_image_dims, __pyx_v_image_dist, __pyx_v_sub_samp, __pyx_v_image_buff_avg, __pyx_v_depth_buff_avg, __pyx_v_image_buff_subpx, __pyx_v_depth_buff_subpx, __pyx_v_nodes_raster_buff, __pyx_v_field_raster_buff, __pyx_v_px_coord_buff, __pyx_v_weights_buff);
+386: connect[:,:],
if (unlikely(((PyObject *) __pyx_v_connect.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 386, __pyx_L1_error)
}
+387: fields_to_render[:,:],
if (unlikely(((PyObject *) __pyx_v_fields_to_render.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 387, __pyx_L1_error)
}
+388: world_to_cam_mat[:,:],
if (unlikely(((PyObject *) __pyx_v_world_to_cam_mat.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 388, __pyx_L1_error)
}
+389: pixels_num[:],
if (unlikely(((PyObject *) __pyx_v_pixels_num.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 389, __pyx_L1_error)
}
+390: image_dims[:],
if (unlikely(((PyObject *) __pyx_v_image_dims.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 390, __pyx_L1_error)
}
391: image_dist,
392: sub_samp,
+393: image_buff_avg[:,:,:],
if (unlikely(((PyObject *) __pyx_v_image_buff_avg.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 393, __pyx_L1_error)
}
+394: depth_buff_avg[:,:],
if (unlikely(((PyObject *) __pyx_v_depth_buff_avg.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 394, __pyx_L1_error)
}
+395: image_buff_subpx[:,:,:],
if (unlikely(((PyObject *) __pyx_v_image_buff_subpx.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 395, __pyx_L1_error)
}
+396: depth_buff_subpx[:,:],
if (unlikely(((PyObject *) __pyx_v_depth_buff_subpx.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 396, __pyx_L1_error)
}
+397: nodes_raster_buff[:,:],
if (unlikely(((PyObject *) __pyx_v_nodes_raster_buff.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 397, __pyx_L1_error)
}
+398: field_raster_buff[:],
if (unlikely(((PyObject *) __pyx_v_field_raster_buff.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 398, __pyx_L1_error)
}
+399: px_coord_buff[:],
if (unlikely(((PyObject *) __pyx_v_px_coord_buff.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 399, __pyx_L1_error)
}
+400: weights_buff[:])
if (unlikely(((PyObject *) __pyx_v_weights_buff.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 400, __pyx_L1_error)
}
401:
+402: return (image_buff_avg_np,depth_buff_avg_np,elems_in_image)
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_elems_in_image); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 402, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_image_buff_avg_np); __Pyx_GIVEREF(__pyx_v_image_buff_avg_np); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_image_buff_avg_np) != (0)) __PYX_ERR(0, 402, __pyx_L1_error); __Pyx_INCREF(__pyx_v_depth_buff_avg_np); __Pyx_GIVEREF(__pyx_v_depth_buff_avg_np); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_depth_buff_avg_np) != (0)) __PYX_ERR(0, 402, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_1) != (0)) __PYX_ERR(0, 402, __pyx_L1_error); __pyx_t_1 = 0; __pyx_r = ((PyObject*)__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L0;
403:
404: #///////////////////////////////////////////////////////////////////////////////
+405: @cython.ccall # python+C or cython.cfunc for C only
static PyObject *__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_5raster_deform_frame(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_raster_deform_frame(CYTHON_UNUSED __Pyx_memviewslice __pyx_v_coords, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_connect, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_fields_to_render, CYTHON_UNUSED PyObject *__pyx_v_cam_data, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_field_disp, CYTHON_UNUSED int __pyx_skip_dispatch) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
/* Python wrapper */
static PyObject *__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_5raster_deform_frame(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pyvale_9sensorsim_6cython_10rastercyth_5raster_deform_frame = {"raster_deform_frame", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_5raster_deform_frame, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pyvale_9sensorsim_6cython_10rastercyth_5raster_deform_frame(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
__Pyx_memviewslice __pyx_v_coords = { 0, 0, { 0 }, { 0 }, { 0 } };
__Pyx_memviewslice __pyx_v_connect = { 0, 0, { 0 }, { 0 }, { 0 } };
__Pyx_memviewslice __pyx_v_fields_to_render = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_v_cam_data = 0;
__Pyx_memviewslice __pyx_v_field_disp = { 0, 0, { 0 }, { 0 }, { 0 } };
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("raster_deform_frame (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_coords,&__pyx_mstate_global->__pyx_n_u_connect,&__pyx_mstate_global->__pyx_n_u_fields_to_render,&__pyx_mstate_global->__pyx_n_u_cam_data,&__pyx_mstate_global->__pyx_n_u_field_disp,0};
PyObject* values[5] = {0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 405, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 5:
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 405, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 405, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 405, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 405, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 405, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "raster_deform_frame", 0) < (0)) __PYX_ERR(0, 405, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("raster_deform_frame", 1, 5, 5, i); __PYX_ERR(0, 405, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 5)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 405, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 405, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 405, __pyx_L3_error)
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 405, __pyx_L3_error)
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 405, __pyx_L3_error)
}
__pyx_v_coords = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_coords.memview)) __PYX_ERR(0, 409, __pyx_L3_error)
__pyx_v_connect = __Pyx_PyObject_to_MemoryviewSlice_dsds_size_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_connect.memview)) __PYX_ERR(0, 410, __pyx_L3_error)
__pyx_v_fields_to_render = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_fields_to_render.memview)) __PYX_ERR(0, 411, __pyx_L3_error)
__pyx_v_cam_data = values[3];
__pyx_v_field_disp = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_field_disp.memview)) __PYX_ERR(0, 413, __pyx_L3_error)
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("raster_deform_frame", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 405, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__PYX_XCLEAR_MEMVIEW(&__pyx_v_coords, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_connect, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_fields_to_render, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_field_disp, 1);
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.raster_deform_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(((PyObject *)__pyx_v_coords.memview) == Py_None)) {
PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "coords"); __PYX_ERR(0, 409, __pyx_L1_error)
}
if (unlikely(((PyObject *)__pyx_v_connect.memview) == Py_None)) {
PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "connect"); __PYX_ERR(0, 410, __pyx_L1_error)
}
if (unlikely(((PyObject *)__pyx_v_fields_to_render.memview) == Py_None)) {
PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "fields_to_render"); __PYX_ERR(0, 411, __pyx_L1_error)
}
if (unlikely(((PyObject *)__pyx_v_field_disp.memview) == Py_None)) {
PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "field_disp"); __PYX_ERR(0, 413, __pyx_L1_error)
}
__pyx_r = __pyx_pf_6pyvale_9sensorsim_6cython_10rastercyth_4raster_deform_frame(__pyx_self, __pyx_v_coords, __pyx_v_connect, __pyx_v_fields_to_render, __pyx_v_cam_data, __pyx_v_field_disp);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__PYX_XCLEAR_MEMVIEW(&__pyx_v_coords, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_connect, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_fields_to_render, 1);
__PYX_XCLEAR_MEMVIEW(&__pyx_v_field_disp, 1);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_6pyvale_9sensorsim_6cython_10rastercyth_4raster_deform_frame(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_coords, __Pyx_memviewslice __pyx_v_connect, __Pyx_memviewslice __pyx_v_fields_to_render, PyObject *__pyx_v_cam_data, __Pyx_memviewslice __pyx_v_field_disp) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
if (unlikely(!__pyx_v_coords.memview)) { __Pyx_RaiseUnboundLocalError("coords"); __PYX_ERR(0, 405, __pyx_L1_error) }
if (unlikely(((PyObject *) __pyx_v_coords.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 405, __pyx_L1_error)
}
if (unlikely(!__pyx_v_connect.memview)) { __Pyx_RaiseUnboundLocalError("connect"); __PYX_ERR(0, 405, __pyx_L1_error) }
if (unlikely(((PyObject *) __pyx_v_connect.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 405, __pyx_L1_error)
}
if (unlikely(!__pyx_v_fields_to_render.memview)) { __Pyx_RaiseUnboundLocalError("fields_to_render"); __PYX_ERR(0, 405, __pyx_L1_error) }
if (unlikely(((PyObject *) __pyx_v_fields_to_render.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 405, __pyx_L1_error)
}
if (unlikely(!__pyx_v_field_disp.memview)) { __Pyx_RaiseUnboundLocalError("field_disp"); __PYX_ERR(0, 405, __pyx_L1_error) }
if (unlikely(((PyObject *) __pyx_v_field_disp.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 405, __pyx_L1_error)
}
__pyx_t_1 = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_raster_deform_frame(__pyx_v_coords, __pyx_v_connect, __pyx_v_fields_to_render, __pyx_v_cam_data, __pyx_v_field_disp, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("pyvale.sensorsim.cython.rastercyth.raster_deform_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 405, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_coords, __pyx_mstate_global->__pyx_kp_u_cython_double) < (0)) __PYX_ERR(0, 405, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_connect, __pyx_mstate_global->__pyx_kp_u_cython_size_t) < (0)) __PYX_ERR(0, 405, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_fields_to_render, __pyx_mstate_global->__pyx_kp_u_cython_double) < (0)) __PYX_ERR(0, 405, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_cam_data, __pyx_mstate_global->__pyx_n_u_CameraData) < (0)) __PYX_ERR(0, 405, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_field_disp, __pyx_mstate_global->__pyx_kp_u_cython_double) < (0)) __PYX_ERR(0, 405, __pyx_L1_error)
__pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pyvale_9sensorsim_6cython_10rastercyth_5raster_deform_frame, 0, __pyx_mstate_global->__pyx_n_u_raster_deform_frame, NULL, __pyx_mstate_global->__pyx_n_u_pyvale_sensorsim_cython_rastercy, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 405, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
#endif
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_4);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_raster_deform_frame, __pyx_t_5) < (0)) __PYX_ERR(0, 405, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
406: @cython.boundscheck(False) # Turn off array bounds checking
407: @cython.wraparound(False) # Turn off negative indexing
408: @cython.cdivision(True) # Turn off divide by zero check
409: def raster_deform_frame(coords: cython.double[:,:],
410: connect: cython.size_t[:,:],
411: fields_to_render: cython.double[:,:],
412: cam_data: CameraData,
413: field_disp: cython.double[:,:],
414: ) -> tuple[np.ndarray,np.ndarray,int]:
415: pass
416:
417: #///////////////////////////////////////////////////////////////////////////////
418: #@cython.nogil
+419: @cython.cfunc # python+C or cython.cfunc for C only
static size_t __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth__raster_frame(__Pyx_memviewslice __pyx_v_coords, __Pyx_memviewslice __pyx_v_connect, __Pyx_memviewslice __pyx_v_fields_to_render, __Pyx_memviewslice __pyx_v_world_to_cam_mat, __Pyx_memviewslice __pyx_v_num_pixels, __Pyx_memviewslice __pyx_v_image_dims, double __pyx_v_image_dist, int __pyx_v_sub_samp, __Pyx_memviewslice __pyx_v_image_buff_avg, __Pyx_memviewslice __pyx_v_depth_buff_avg, __Pyx_memviewslice __pyx_v_image_buff_subpx, __Pyx_memviewslice __pyx_v_depth_buff_subpx, __Pyx_memviewslice __pyx_v_nodes_raster_buff, __Pyx_memviewslice __pyx_v_field_raster_buff, __Pyx_memviewslice __pyx_v_px_coord_buff, __Pyx_memviewslice __pyx_v_weights_buff) {
size_t __pyx_v_xx;
size_t __pyx_v_yy;
size_t __pyx_v_zz;
size_t __pyx_v_elem_count;
size_t __pyx_v_nodes_per_elem;
size_t __pyx_v_fields_num;
double __pyx_v_tol;
size_t __pyx_v_elems_in_image;
double __pyx_v_coord_step;
double __pyx_v_coord_offset;
size_t __pyx_v_ee;
size_t __pyx_v_nn;
CYTHON_UNUSED size_t __pyx_v_ii;
CYTHON_UNUSED size_t __pyx_v_jj;
size_t __pyx_v_ww;
size_t __pyx_v_ff;
double __pyx_v_elem_area;
double __pyx_v_x_min;
double __pyx_v_x_max;
double __pyx_v_y_min;
double __pyx_v_y_max;
size_t __pyx_v_xi_min;
size_t __pyx_v_xi_max;
size_t __pyx_v_yi_min;
size_t __pyx_v_yi_max;
size_t __pyx_v_num_bound_x;
size_t __pyx_v_num_bound_y;
double __pyx_v_bound_coord_x;
double __pyx_v_bound_coord_y;
size_t __pyx_v_bound_ind_x;
size_t __pyx_v_bound_ind_y;
double __pyx_v_weight_dot_nodes;
double __pyx_v_px_coord_z;
double __pyx_v_px_field;
size_t __pyx_r;
420: @cython.boundscheck(False) # Turn off array bounds checking
421: @cython.wraparound(False) # Turn off negative indexing
422: @cython.cdivision(True) # Turn off divide by zero check
423: @cython.exceptval(check=False) # Turn off exceptions
424: def _raster_frame(coords: cython.double[:,:],
425: connect: cython.size_t[:,:],
426: fields_to_render: cython.double[:,:],
427: world_to_cam_mat: cython.double[:,:],
428: num_pixels: cython.int[:],
429: image_dims: cython.double[:],
430: image_dist: cython.double,
431: sub_samp: cython.int,
432: # From here these are memory buffers that will be written into
433: image_buff_avg: cython.double[:,:,:],
434: depth_buff_avg: cython.double[:,:],
435: image_buff_subpx: cython.double[:,:,:],
436: depth_buff_subpx: cython.double[:,:],
437: nodes_raster_buff: cython.double[:,:],
438: field_raster_buff: cython.double[:],
439: px_coord_buff: cython.double[:],
440: weights_buff: cython.double[:],
441: ) -> cython.size_t:
442: """Rasters a single frame and all associated fields into the image and depth
443: buffer provided as inputs to the function. This is a pure cython function
444: with the GIL released for parallelisation. All fields (textures) are
445: rendered in a sub-loop so that the depth buffer and inside/outside test is
446: only performed once for all fields to be rendered.
447:
448: Parameters
449: ----------
450: coords : cython.double[:,:]
451: Input. shape=(num_nodes,coords[x,y,z,w])
452: connect : cython.size_t[:,:]
453: Input. shape=(num_elems,nodes_per_elem)
454: fields_to_render : cython.double[:,:]
455: Input. shape=(num_nodes,num_fields)
456: world_to_cam_mat : cython.double[:,:]
457: Input. Homogeneous coordinate transformation matrix from world to camera
458: coordinates. shape=(4,4).
459: num_pixels : cython.int[:]
460: Input. shape=(2 [num_px_x,num_px_y],)
461: image_dims : cython.double[:]
462: Input. shape=(2 [fov_size_x,fov_size_y],)
463: image_dist : cython.double
464: Input.
465: sub_samp : cython.int
466: Number of subsamples per pixel for anti-aliasing.
467: image_buff_avg : cython.double[:,:,:]
468: Output buffer. shape=(num_px_y,num_px_x,num_fields)
469: depth_buff_avg : cython.double[:,:]
470: Output buffer. shape=(num_px_y,num_px_x)
471: image_buff_subpx : cython.double[:,:,:]
472: Processing buffer (output). shape=(num_subpx_y,num_subpx_x,num_fields)
473: depth_buff_subpx : cython.double[:,:]
474: Processing buffer (output). shape=(num_subpx_y,num_subpx_x)
475: nodes_raster_buff : cython.double[:,:]
476: Processing buffer. shape=(nodes_per_elem, 4 coord[x,y,z,w])
477: field_raster_buff : cython.double[:]
478: Processing buffer. shape=(nodes_per_elem,)
479: px_coord_buff : cython.double[:]
480: Processing buffer. shape=(2,)
481: weights_buff : cython.double[:]
482: Processing buffer. shape=(nodes_per_elem,)
483:
484: Returns
485: -------
486: cython.size_t
487: Number of rendered elements after backface culling and cropping.
488: """
489:
+490: xx: cython.size_t = 0
__pyx_v_xx = 0;
+491: yy: cython.size_t = 1
__pyx_v_yy = 1;
+492: zz: cython.size_t = 2
__pyx_v_zz = 2;
493:
+494: elem_count: cython.size_t = connect.shape[0]
__pyx_v_elem_count = (__pyx_v_connect.shape[0]);
+495: nodes_per_elem: cython.size_t = connect.shape[1]
__pyx_v_nodes_per_elem = (__pyx_v_connect.shape[1]);
+496: fields_num: cython.size_t = fields_to_render.shape[1]
__pyx_v_fields_num = (__pyx_v_fields_to_render.shape[1]);
497:
498: # tolerance for floating point zero dot product
+499: tol: cython.double = 1e-12
__pyx_v_tol = 1e-12;
500:
501: #elem_count: cython.size_t = 1
+502: elems_in_image: cython.size_t = 0
__pyx_v_elems_in_image = 0;
503:
504: # Lifted constants
+505: coord_step: cython.double = 1.0/float(sub_samp)
__pyx_v_coord_step = (1.0 / ((double)__pyx_v_sub_samp));
+506: coord_offset: cython.double = 1.0/(2.0*float(sub_samp))
__pyx_v_coord_offset = (1.0 / (2.0 * ((double)__pyx_v_sub_samp)));
507:
+508: ee: cython.size_t = 0
__pyx_v_ee = 0;
+509: nn: cython.size_t = 0
__pyx_v_nn = 0;
+510: ii: cython.size_t = 0
__pyx_v_ii = 0;
+511: jj: cython.size_t = 0
__pyx_v_jj = 0;
+512: ww: cython.size_t = 0
__pyx_v_ww = 0;
+513: ff: cython.size_t = 0
__pyx_v_ff = 0;
514:
+515: for ee in range(elem_count):
__pyx_t_1 = __pyx_v_elem_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_ee = __pyx_t_3;
516:
+517: for nn in range(nodes_per_elem):
__pyx_t_4 = __pyx_v_nodes_per_elem;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_nn = __pyx_t_6;
518: # shape=(nodes_per_elem, coord[X,Y,Z,W])
+519: nodes_raster_buff[nn,:] = world_to_raster_coords(coords[connect[ee,nn],:],
__pyx_t_7 = __pyx_v_ee;
__pyx_t_8 = __pyx_v_nn;
__pyx_t_9.data = __pyx_v_coords.data;
__pyx_t_9.memview = __pyx_v_coords.memview;
__PYX_INC_MEMVIEW(&__pyx_t_9, 1);
{
Py_ssize_t __pyx_tmp_idx = (*((size_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_connect.data + __pyx_t_7 * __pyx_v_connect.strides[0]) ) + __pyx_t_8 * __pyx_v_connect.strides[1]) )));
Py_ssize_t __pyx_tmp_stride = __pyx_v_coords.strides[0];
__pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_9.shape[0] = __pyx_v_coords.shape[1];
__pyx_t_9.strides[0] = __pyx_v_coords.strides[1];
__pyx_t_9.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_9.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 519, __pyx_L1_error)
}
/* … */
__pyx_t_11 = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_world_to_raster_coords(__pyx_t_9, __pyx_v_world_to_cam_mat, __pyx_v_image_dist, __pyx_v_image_dims, __pyx_v_num_pixels, __pyx_t_10); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 519, __pyx_L1_error)
__PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
__pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;
__pyx_t_10.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_10.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_10, 1);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_nn;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_10.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_10.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_10.suboffsets[0] = -1;
if (unlikely((__pyx_memoryview_copy_contents(__pyx_t_11, __pyx_t_10, 1, 1, 0) < 0))) __PYX_ERR(0, 519, __pyx_L1_error)
__PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
__pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_11, 1);
__pyx_t_11.memview = NULL; __pyx_t_11.data = NULL;
}
520: world_to_cam_mat,
521: image_dist,
522: image_dims,
523: num_pixels,
+524: nodes_raster_buff[nn,:])
__pyx_t_10.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_10.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_10, 1);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_nn;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_10.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_10.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_10.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_10.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 524, __pyx_L1_error)
}
525:
526:
+527: elem_area: cython.double = edge_function(nodes_raster_buff[0,:],
__pyx_t_11.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_11.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_11, 1);
{
Py_ssize_t __pyx_tmp_idx = 0;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_11.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_11.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_11.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_11.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_11.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 527, __pyx_L1_error)
}
/* … */
__pyx_v_elem_area = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_edge_function(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_11, 1);
__pyx_t_11.memview = NULL; __pyx_t_11.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
__pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+528: nodes_raster_buff[1,:],
__pyx_t_10.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_10.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_10, 1);
{
Py_ssize_t __pyx_tmp_idx = 1;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_10.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_10.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_10.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_10.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 528, __pyx_L1_error)
}
+529: nodes_raster_buff[2,:])
__pyx_t_9.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_9.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_9, 1);
{
Py_ssize_t __pyx_tmp_idx = 2;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_9.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_9.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_9.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_9.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 529, __pyx_L1_error)
}
530:
+531: if elem_area < -tol: # Backface culling
__pyx_t_12 = (__pyx_v_elem_area < (-__pyx_v_tol));
if (__pyx_t_12) {
/* … */
}
+532: continue
goto __pyx_L3_continue;
533:
534: # print(f"{nodes_raster_buff[0,0]},{nodes_raster_buff[0,1]},{nodes_raster_buff[0,2]}")
535: # print(f"{nodes_raster_buff[1,0]},{nodes_raster_buff[1,1]},{nodes_raster_buff[1,2]}")
536: # print(f"{nodes_raster_buff[2,0]},{nodes_raster_buff[2,1]},{nodes_raster_buff[2,2]}")
537: # print(f"{ee} ELEM AREA : {elem_area}")
538: # print()
539:
+540: x_min: cython.double = vec_min_double(nodes_raster_buff[:,xx])
__pyx_t_9.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_9.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.shape[0] = __pyx_v_nodes_raster_buff.shape[0];
__pyx_t_9.strides[0] = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_9.suboffsets[0] = -1;
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_xx;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
if (unlikely(((PyObject *) __pyx_t_9.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 540, __pyx_L1_error)
}
__pyx_v_x_min = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_min_double(__pyx_t_9);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+541: x_max: cython.double = vec_max_double(nodes_raster_buff[:,xx])
__pyx_t_9.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_9.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.shape[0] = __pyx_v_nodes_raster_buff.shape[0];
__pyx_t_9.strides[0] = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_9.suboffsets[0] = -1;
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_xx;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
if (unlikely(((PyObject *) __pyx_t_9.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 541, __pyx_L1_error)
}
__pyx_v_x_max = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_max_double(__pyx_t_9);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
542:
+543: if ((x_min > num_pixels[xx]-1) or (x_max < 0)): # x crop
__pyx_t_4 = __pyx_v_xx;
__pyx_t_13 = (__pyx_v_x_min > ((*((int *) ( /* dim=0 */ (__pyx_v_num_pixels.data + __pyx_t_4 * __pyx_v_num_pixels.strides[0]) ))) - 1));
if (!__pyx_t_13) {
} else {
__pyx_t_12 = __pyx_t_13;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_13 = (__pyx_v_x_max < 0.0);
__pyx_t_12 = __pyx_t_13;
__pyx_L9_bool_binop_done:;
if (__pyx_t_12) {
/* … */
}
+544: continue
goto __pyx_L3_continue;
545:
+546: y_min: cython.double = vec_min_double(nodes_raster_buff[:,yy])
__pyx_t_9.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_9.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.shape[0] = __pyx_v_nodes_raster_buff.shape[0];
__pyx_t_9.strides[0] = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_9.suboffsets[0] = -1;
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_yy;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
if (unlikely(((PyObject *) __pyx_t_9.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 546, __pyx_L1_error)
}
__pyx_v_y_min = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_min_double(__pyx_t_9);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+547: y_max: cython.double = vec_max_double(nodes_raster_buff[:,yy])
__pyx_t_9.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_9.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.shape[0] = __pyx_v_nodes_raster_buff.shape[0];
__pyx_t_9.strides[0] = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_9.suboffsets[0] = -1;
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_yy;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
if (unlikely(((PyObject *) __pyx_t_9.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 547, __pyx_L1_error)
}
__pyx_v_y_max = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_max_double(__pyx_t_9);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
548:
+549: if ((y_min > num_pixels[yy]-1) or (y_max < 0)): # y crop
__pyx_t_4 = __pyx_v_yy;
__pyx_t_13 = (__pyx_v_y_min > ((*((int *) ( /* dim=0 */ (__pyx_v_num_pixels.data + __pyx_t_4 * __pyx_v_num_pixels.strides[0]) ))) - 1));
if (!__pyx_t_13) {
} else {
__pyx_t_12 = __pyx_t_13;
goto __pyx_L12_bool_binop_done;
}
__pyx_t_13 = (__pyx_v_y_max < 0.0);
__pyx_t_12 = __pyx_t_13;
__pyx_L12_bool_binop_done:;
if (__pyx_t_12) {
/* … */
}
+550: continue
goto __pyx_L3_continue;
551:
552: # print(f"Elem {ee}: x, min {x_min}")
553: # print(f"Elem {ee}: x, max {x_max}")
554: # print(f"Elem {ee}: y, min {y_min}")
555: # print(f"Elem {ee}: y, max {y_max}\n")
556:
+557: elems_in_image += 1
__pyx_v_elems_in_image = (__pyx_v_elems_in_image + 1);
558:
+559: xi_min: cython.size_t = bound_index_min(x_min)
__pyx_v_xi_min = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_bound_index_min(__pyx_v_x_min);
+560: xi_max: cython.size_t = bound_index_max(x_max,num_pixels[xx])
__pyx_t_4 = __pyx_v_xx;
__pyx_v_xi_max = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_bound_index_max(__pyx_v_x_max, (*((int *) ( /* dim=0 */ (__pyx_v_num_pixels.data + __pyx_t_4 * __pyx_v_num_pixels.strides[0]) ))));
+561: yi_min: cython.size_t = bound_index_min(y_min)
__pyx_v_yi_min = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_bound_index_min(__pyx_v_y_min);
+562: yi_max: cython.size_t = bound_index_max(y_max,num_pixels[yy])
__pyx_t_4 = __pyx_v_yy;
__pyx_v_yi_max = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_bound_index_max(__pyx_v_y_max, (*((int *) ( /* dim=0 */ (__pyx_v_num_pixels.data + __pyx_t_4 * __pyx_v_num_pixels.strides[0]) ))));
563:
564: # print(f"Elem {ee}: xi, min {xi_min}")
565: # print(f"Elem {ee}: xi, max {xi_max}")
566: # print(f"Elem {ee}: yi, min {yi_min}")
567: # print(f"Elem {ee}: yi, max {yi_max}\n")
568:
+569: for nn in range(nodes_per_elem):
__pyx_t_4 = __pyx_v_nodes_per_elem;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_nn = __pyx_t_6;
+570: nodes_raster_buff[nn,zz] = 1/nodes_raster_buff[nn,zz]
__pyx_t_8 = __pyx_v_nn;
__pyx_t_7 = __pyx_v_zz;
__pyx_t_14 = __pyx_v_nn;
__pyx_t_15 = __pyx_v_zz;
*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_nodes_raster_buff.data + __pyx_t_14 * __pyx_v_nodes_raster_buff.strides[0]) ) + __pyx_t_15 * __pyx_v_nodes_raster_buff.strides[1]) )) = (1.0 / (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_nodes_raster_buff.data + __pyx_t_8 * __pyx_v_nodes_raster_buff.strides[0]) ) + __pyx_t_7 * __pyx_v_nodes_raster_buff.strides[1]) ))));
}
571:
+572: num_bound_x: cython.size_t = range_len_double(float(xi_min),
__pyx_v_num_bound_x = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_range_len_double(((double)__pyx_v_xi_min), ((double)__pyx_v_xi_max), __pyx_v_coord_step);
573: float(xi_max),
574: coord_step)
+575: num_bound_y: cython.size_t = range_len_double(float(yi_min),
__pyx_v_num_bound_y = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_range_len_double(((double)__pyx_v_yi_min), ((double)__pyx_v_yi_max), __pyx_v_coord_step);
576: float(yi_max),
577: coord_step)
578:
+579: bound_coord_x: cython.double = float(xi_min) + coord_offset
__pyx_v_bound_coord_x = (((double)__pyx_v_xi_min) + __pyx_v_coord_offset);
+580: bound_coord_y: cython.double = float(yi_min) + coord_offset
__pyx_v_bound_coord_y = (((double)__pyx_v_yi_min) + __pyx_v_coord_offset);
581:
+582: bound_ind_x: cython.size_t = sub_samp*xi_min
__pyx_v_bound_ind_x = (__pyx_v_sub_samp * __pyx_v_xi_min);
+583: bound_ind_y: cython.size_t = sub_samp*yi_min
__pyx_v_bound_ind_y = (__pyx_v_sub_samp * __pyx_v_yi_min);
584:
585: # print(f"Elem {ee}: bound_coord_x={bound_coord_x}")
586: # print(f"Elem {ee}: bound_coord_y={bound_coord_y}")
587: # print(f"Elem {ee}: bound_ind_x={bound_ind_x}")
588: # print(f"Elem {ee}: bound_ind_y={bound_ind_y}")
589: # print(f"Elem {ee}: coord_step={coord_step}")
590: # print(f"Elem {ee}: num_bound_x={num_bound_x}")
591: # print(f"Elem {ee}: num_bound_x={num_bound_y}")
592: # print()
593:
594:
+595: for jj in range(num_bound_y):
__pyx_t_4 = __pyx_v_num_bound_y;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_jj = __pyx_t_6;
596:
+597: bound_coord_x = float(xi_min) + coord_offset
__pyx_v_bound_coord_x = (((double)__pyx_v_xi_min) + __pyx_v_coord_offset);
+598: bound_ind_x: cython.size_t = sub_samp*xi_min
__pyx_v_bound_ind_x = (__pyx_v_sub_samp * __pyx_v_xi_min);
599:
+600: for ii in range(num_bound_x):
__pyx_t_7 = __pyx_v_num_bound_x;
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_8; __pyx_t_15+=1) {
__pyx_v_ii = __pyx_t_15;
601:
+602: px_coord_buff[xx] = bound_coord_x
__pyx_t_14 = __pyx_v_xx;
*((double *) ( /* dim=0 */ (__pyx_v_px_coord_buff.data + __pyx_t_14 * __pyx_v_px_coord_buff.strides[0]) )) = __pyx_v_bound_coord_x;
+603: px_coord_buff[yy] = bound_coord_y
__pyx_t_14 = __pyx_v_yy;
*((double *) ( /* dim=0 */ (__pyx_v_px_coord_buff.data + __pyx_t_14 * __pyx_v_px_coord_buff.strides[0]) )) = __pyx_v_bound_coord_y;
604:
605: # Check the edge functions for each edge one at a time, as soon
606: # as one is outside we don't need to do anymore work
+607: weights_buff[0] = edge_function(nodes_raster_buff[1,:],
__pyx_t_9.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_9.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_9, 1);
{
Py_ssize_t __pyx_tmp_idx = 1;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_9.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_9.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_9.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_9.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 607, __pyx_L1_error)
}
/* … */
__pyx_t_16 = 0;
*((double *) ( /* dim=0 */ (__pyx_v_weights_buff.data + __pyx_t_16 * __pyx_v_weights_buff.strides[0]) )) = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_edge_function(__pyx_t_9, __pyx_t_10, __pyx_v_px_coord_buff);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
__pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;
+608: nodes_raster_buff[2,:],
__pyx_t_10.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_10.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_10, 1);
{
Py_ssize_t __pyx_tmp_idx = 2;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_10.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_10.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_10.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_10.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 608, __pyx_L1_error)
}
609: px_coord_buff)
+610: if (weights_buff[0] < -tol):
__pyx_t_16 = 0;
__pyx_t_12 = ((*((double *) ( /* dim=0 */ (__pyx_v_weights_buff.data + __pyx_t_16 * __pyx_v_weights_buff.strides[0]) ))) < (-__pyx_v_tol));
if (__pyx_t_12) {
/* … */
}
+611: bound_coord_x += coord_step
__pyx_v_bound_coord_x = (__pyx_v_bound_coord_x + __pyx_v_coord_step);
+612: bound_ind_x += 1
__pyx_v_bound_ind_x = (__pyx_v_bound_ind_x + 1);
+613: continue
goto __pyx_L18_continue;
614:
+615: weights_buff[1] = edge_function(nodes_raster_buff[2,:],
__pyx_t_10.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_10.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_10, 1);
{
Py_ssize_t __pyx_tmp_idx = 2;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_10.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_10.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_10.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_10.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 615, __pyx_L1_error)
}
/* … */
__pyx_t_16 = 1;
*((double *) ( /* dim=0 */ (__pyx_v_weights_buff.data + __pyx_t_16 * __pyx_v_weights_buff.strides[0]) )) = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_edge_function(__pyx_t_10, __pyx_t_9, __pyx_v_px_coord_buff);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
__pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+616: nodes_raster_buff[0,:],
__pyx_t_9.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_9.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_9, 1);
{
Py_ssize_t __pyx_tmp_idx = 0;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_9.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_9.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_9.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_9.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 616, __pyx_L1_error)
}
617: px_coord_buff)
+618: if (weights_buff[1] < -tol):
__pyx_t_16 = 1;
__pyx_t_12 = ((*((double *) ( /* dim=0 */ (__pyx_v_weights_buff.data + __pyx_t_16 * __pyx_v_weights_buff.strides[0]) ))) < (-__pyx_v_tol));
if (__pyx_t_12) {
/* … */
}
+619: bound_coord_x += coord_step
__pyx_v_bound_coord_x = (__pyx_v_bound_coord_x + __pyx_v_coord_step);
+620: bound_ind_x += 1
__pyx_v_bound_ind_x = (__pyx_v_bound_ind_x + 1);
+621: continue
goto __pyx_L18_continue;
622:
623:
+624: weights_buff[2] = edge_function(nodes_raster_buff[0,:],
__pyx_t_9.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_9.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_9, 1);
{
Py_ssize_t __pyx_tmp_idx = 0;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_9.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_9.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_9.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_9.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 624, __pyx_L1_error)
}
/* … */
__pyx_t_16 = 2;
*((double *) ( /* dim=0 */ (__pyx_v_weights_buff.data + __pyx_t_16 * __pyx_v_weights_buff.strides[0]) )) = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_edge_function(__pyx_t_9, __pyx_t_10, __pyx_v_px_coord_buff);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
__pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
__pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;
+625: nodes_raster_buff[1,:],
__pyx_t_10.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_10.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_10, 1);
{
Py_ssize_t __pyx_tmp_idx = 1;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_10.shape[0] = __pyx_v_nodes_raster_buff.shape[1];
__pyx_t_10.strides[0] = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_10.suboffsets[0] = -1;
if (unlikely(((PyObject *) __pyx_t_10.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 625, __pyx_L1_error)
}
626: px_coord_buff)
+627: if (weights_buff[2] < -tol):
__pyx_t_16 = 2;
__pyx_t_12 = ((*((double *) ( /* dim=0 */ (__pyx_v_weights_buff.data + __pyx_t_16 * __pyx_v_weights_buff.strides[0]) ))) < (-__pyx_v_tol));
if (__pyx_t_12) {
/* … */
}
+628: bound_coord_x += coord_step
__pyx_v_bound_coord_x = (__pyx_v_bound_coord_x + __pyx_v_coord_step);
+629: bound_ind_x += 1
__pyx_v_bound_ind_x = (__pyx_v_bound_ind_x + 1);
+630: continue
goto __pyx_L18_continue;
631:
632: # if (ee%6) == 0:
633: # print(f"Elem: {ee}")
634: # print(f"x bound ind={bound_ind_x}, coord={bound_coord_x}")
635: # print(f"y bound ind={bound_ind_y}, coord={bound_coord_y}")
636: # print(f"weights=[{weights_buff[0]},{weights_buff[1]},{weights_buff[2]}]")
637: # print()
638:
639:
+640: for ww in range(nodes_per_elem):
__pyx_t_14 = __pyx_v_nodes_per_elem;
__pyx_t_17 = __pyx_t_14;
for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
__pyx_v_ww = __pyx_t_18;
+641: weights_buff[ww] = weights_buff[ww] / elem_area
__pyx_t_19 = __pyx_v_ww;
__pyx_t_20 = __pyx_v_ww;
*((double *) ( /* dim=0 */ (__pyx_v_weights_buff.data + __pyx_t_20 * __pyx_v_weights_buff.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_weights_buff.data + __pyx_t_19 * __pyx_v_weights_buff.strides[0]) ))) / __pyx_v_elem_area);
}
642:
+643: weight_dot_nodes: cython.double = vec_dot_double(
__pyx_v_weight_dot_nodes = __pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_dot_double(__pyx_v_weights_buff, __pyx_t_10);
__PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
__pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;
644: weights_buff,
+645: nodes_raster_buff[:,zz])
__pyx_t_10.data = __pyx_v_nodes_raster_buff.data;
__pyx_t_10.memview = __pyx_v_nodes_raster_buff.memview;
__PYX_INC_MEMVIEW(&__pyx_t_10, 1);
__pyx_t_10.shape[0] = __pyx_v_nodes_raster_buff.shape[0];
__pyx_t_10.strides[0] = __pyx_v_nodes_raster_buff.strides[0];
__pyx_t_10.suboffsets[0] = -1;
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_zz;
Py_ssize_t __pyx_tmp_stride = __pyx_v_nodes_raster_buff.strides[1];
__pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
if (unlikely(((PyObject *) __pyx_t_10.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 645, __pyx_L1_error)
}
646:
647: # Check the depth buffer, if the element is behind move on
+648: px_coord_z: cython.double = 1/weight_dot_nodes
__pyx_v_px_coord_z = (1.0 / __pyx_v_weight_dot_nodes);
+649: if px_coord_z >= depth_buff_subpx[bound_ind_y,bound_ind_x]:
__pyx_t_14 = __pyx_v_bound_ind_y;
__pyx_t_17 = __pyx_v_bound_ind_x;
__pyx_t_12 = (__pyx_v_px_coord_z >= (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_depth_buff_subpx.data + __pyx_t_14 * __pyx_v_depth_buff_subpx.strides[0]) ) + __pyx_t_17 * __pyx_v_depth_buff_subpx.strides[1]) ))));
if (__pyx_t_12) {
/* … */
}
+650: bound_coord_x += coord_step
__pyx_v_bound_coord_x = (__pyx_v_bound_coord_x + __pyx_v_coord_step);
+651: bound_ind_x += 1
__pyx_v_bound_ind_x = (__pyx_v_bound_ind_x + 1);
+652: continue
goto __pyx_L18_continue;
653:
654: # We only need one depth buffer for all fields
+655: depth_buff_subpx[bound_ind_y,bound_ind_x] = px_coord_z
__pyx_t_17 = __pyx_v_bound_ind_y;
__pyx_t_14 = __pyx_v_bound_ind_x;
*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_depth_buff_subpx.data + __pyx_t_17 * __pyx_v_depth_buff_subpx.strides[0]) ) + __pyx_t_14 * __pyx_v_depth_buff_subpx.strides[1]) )) = __pyx_v_px_coord_z;
656:
+657: for ff in range(fields_num):
__pyx_t_14 = __pyx_v_fields_num;
__pyx_t_17 = __pyx_t_14;
for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
__pyx_v_ff = __pyx_t_18;
+658: for nn in range(nodes_per_elem):
__pyx_t_19 = __pyx_v_nodes_per_elem;
__pyx_t_20 = __pyx_t_19;
for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
__pyx_v_nn = __pyx_t_21;
659:
+660: field_raster_buff[nn] = (fields_to_render[connect[ee,nn],ff]
__pyx_t_22 = __pyx_v_ee;
__pyx_t_23 = __pyx_v_nn;
__pyx_t_24 = (*((size_t *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_connect.data + __pyx_t_22 * __pyx_v_connect.strides[0]) ) + __pyx_t_23 * __pyx_v_connect.strides[1]) )));
__pyx_t_25 = __pyx_v_ff;
/* … */
__pyx_t_28 = __pyx_v_nn;
*((double *) ( /* dim=0 */ (__pyx_v_field_raster_buff.data + __pyx_t_28 * __pyx_v_field_raster_buff.strides[0]) )) = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_fields_to_render.data + __pyx_t_24 * __pyx_v_fields_to_render.strides[0]) ) + __pyx_t_25 * __pyx_v_fields_to_render.strides[1]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_nodes_raster_buff.data + __pyx_t_26 * __pyx_v_nodes_raster_buff.strides[0]) ) + __pyx_t_27 * __pyx_v_nodes_raster_buff.strides[1]) ))));
}
+661: *nodes_raster_buff[nn,zz])
__pyx_t_26 = __pyx_v_nn;
__pyx_t_27 = __pyx_v_zz;
662:
663: px_field: cython.double = (vec_dot_double(field_raster_buff,
664: weights_buff)
+665: *px_coord_z)
__pyx_v_px_field = (__pyx_f_6pyvale_9sensorsim_6cython_10rastercyth_vec_dot_double(__pyx_v_field_raster_buff, __pyx_v_weights_buff) * __pyx_v_px_coord_z);
666:
+667: image_buff_subpx[bound_ind_y,bound_ind_x,ff] = px_field
__pyx_t_19 = __pyx_v_bound_ind_y;
__pyx_t_20 = __pyx_v_bound_ind_x;
__pyx_t_21 = __pyx_v_ff;
*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_image_buff_subpx.data + __pyx_t_19 * __pyx_v_image_buff_subpx.strides[0]) ) + __pyx_t_20 * __pyx_v_image_buff_subpx.strides[1]) ) + __pyx_t_21 * __pyx_v_image_buff_subpx.strides[2]) )) = __pyx_v_px_field;
}
668:
669: # end for(x) - increment the x coords
+670: bound_coord_x += coord_step
__pyx_v_bound_coord_x = (__pyx_v_bound_coord_x + __pyx_v_coord_step);
+671: bound_ind_x += 1
__pyx_v_bound_ind_x = (__pyx_v_bound_ind_x + 1);
__pyx_L18_continue:;
}
672:
673: # end for(y) - increment the y coords
+674: bound_coord_y += coord_step
__pyx_v_bound_coord_y = (__pyx_v_bound_coord_y + __pyx_v_coord_step);
+675: bound_ind_y += 1
__pyx_v_bound_ind_y = (__pyx_v_bound_ind_y + 1);
}
__pyx_L3_continue:;
}
676:
+677: _average_image(depth_buff_subpx,sub_samp,depth_buff_avg)
(void)(__pyx_f_6pyvale_9sensorsim_6cython_10rastercyth__average_image(__pyx_v_depth_buff_subpx, __pyx_v_sub_samp, __pyx_v_depth_buff_avg));
678:
+679: for ff in range(fields_num):
__pyx_t_1 = __pyx_v_fields_num;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_ff = __pyx_t_3;
+680: _average_image(image_buff_subpx[:,:,ff],
__pyx_t_29.data = __pyx_v_image_buff_subpx.data;
__pyx_t_29.memview = __pyx_v_image_buff_subpx.memview;
__PYX_INC_MEMVIEW(&__pyx_t_29, 1);
__pyx_t_29.shape[0] = __pyx_v_image_buff_subpx.shape[0];
__pyx_t_29.strides[0] = __pyx_v_image_buff_subpx.strides[0];
__pyx_t_29.suboffsets[0] = -1;
__pyx_t_29.shape[1] = __pyx_v_image_buff_subpx.shape[1];
__pyx_t_29.strides[1] = __pyx_v_image_buff_subpx.strides[1];
__pyx_t_29.suboffsets[1] = -1;
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_ff;
Py_ssize_t __pyx_tmp_stride = __pyx_v_image_buff_subpx.strides[2];
__pyx_t_29.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
if (unlikely(((PyObject *) __pyx_t_29.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 680, __pyx_L1_error)
}
/* … */
(void)(__pyx_f_6pyvale_9sensorsim_6cython_10rastercyth__average_image(__pyx_t_29, __pyx_v_sub_samp, __pyx_t_30));
__PYX_XCLEAR_MEMVIEW(&__pyx_t_29, 1);
__pyx_t_29.memview = NULL; __pyx_t_29.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_30, 1);
__pyx_t_30.memview = NULL; __pyx_t_30.data = NULL;
}
681: sub_samp,
+682: image_buff_avg[:,:,ff])
__pyx_t_30.data = __pyx_v_image_buff_avg.data;
__pyx_t_30.memview = __pyx_v_image_buff_avg.memview;
__PYX_INC_MEMVIEW(&__pyx_t_30, 1);
__pyx_t_30.shape[0] = __pyx_v_image_buff_avg.shape[0];
__pyx_t_30.strides[0] = __pyx_v_image_buff_avg.strides[0];
__pyx_t_30.suboffsets[0] = -1;
__pyx_t_30.shape[1] = __pyx_v_image_buff_avg.shape[1];
__pyx_t_30.strides[1] = __pyx_v_image_buff_avg.strides[1];
__pyx_t_30.suboffsets[1] = -1;
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_ff;
Py_ssize_t __pyx_tmp_stride = __pyx_v_image_buff_avg.strides[2];
__pyx_t_30.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
if (unlikely(((PyObject *) __pyx_t_30.memview) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
__PYX_ERR(0, 682, __pyx_L1_error)
}
683:
+684: return elems_in_image
__pyx_r = __pyx_v_elems_in_image; goto __pyx_L0;