File Coverage

lib/PDL/Image2D-pp-conv2d.c
Criterion Covered Total %
statement 148 1726 8.5
branch 138 2486 5.5
condition n/a
subroutine n/a
pod n/a
total 286 4212 6.7


line stmt bran cond sub pod time code
1              
2             #line 453 "lib/PDL/PP.pm"
3             /*
4             * THIS FILE WAS GENERATED BY PDL::PP from lib/PDL/Image2D.pd! Do not modify!
5             */
6              
7             #define PDL_FREE_CODE(trans, destroy, comp_free_code, ntpriv_free_code) \
8             if (destroy) { \
9             comp_free_code \
10             } \
11             if ((trans)->dims_redone) { \
12             ntpriv_free_code \
13             }
14              
15             #include "EXTERN.h"
16             #include "perl.h"
17             #include "XSUB.h"
18             #include "pdl.h"
19             #include "pdlcore.h"
20             #define PDL PDL_Image2D
21             extern Core* PDL; /* Structure hold core C functions */
22             #line 23 "lib/PDL/Image2D-pp-conv2d.c"
23              
24             /* Fast Modulus with proper negative behaviour */
25              
26             #define REALMOD(a,b) {while ((a)>=(b)) (a) -= (b); while ((a)<0) (a) += (b);}
27              
28             #define X(symbol, ctype, ppsym, ...) \
29             ctype quick_select_ ## ppsym(ctype arr[], int n);
30             PDL_TYPELIST_REAL(X)
31             #undef X
32              
33             #line 1846 "lib/PDL/PP.pm"
34             typedef struct pdl_params_conv2d {
35             #line 36 "lib/PDL/Image2D-pp-conv2d.c"
36             int opt;
37             } pdl_params_conv2d;
38              
39              
40             #line 1857 "lib/PDL/PP.pm"
41             pdl_error pdl_conv2d_redodims(pdl_trans *__privtrans) {
42             pdl_error PDL_err = {0, NULL, 0};
43             #line 44 "lib/PDL/Image2D-pp-conv2d.c"
44 12           pdl_params_conv2d *__params = __privtrans->params; (void)__params;
45 12           __privtrans->ind_sizes[0] = __privtrans->ind_sizes[4] + __privtrans->ind_sizes[2];
46 12           __privtrans->ind_sizes[1] = __privtrans->ind_sizes[5] + __privtrans->ind_sizes[3];
47 12 50         PDL_RETERROR(PDL_err, PDL->redodims_default(__privtrans));
48 12           return PDL_err;
49             }
50              
51              
52             #line 1857 "lib/PDL/PP.pm"
53             pdl_error pdl_conv2d_readdata(pdl_trans *__privtrans) {
54             pdl_error PDL_err = {0, NULL, 0};
55             #line 56 "lib/PDL/Image2D-pp-conv2d.c"
56 12           pdl_params_conv2d *__params = __privtrans->params; (void)__params;
57 12           register PDL_Indx __m_size = __privtrans->ind_sizes[2];
58 12           register PDL_Indx __n_size = __privtrans->ind_sizes[3];
59 12           register PDL_Indx __p_size = __privtrans->ind_sizes[4];
60 12           register PDL_Indx __q_size = __privtrans->ind_sizes[5];
61 12 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "broadcast.incs NULL");
62             /* broadcastloop declarations */
63             int __brcloopval;
64             register PDL_Indx __tind0,__tind1; /* counters along dim */
65 12           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
66             /* dims here are how many steps along those dims */
67 12           register PDL_Indx __tinc0_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
68 12           register PDL_Indx __tinc0_kern = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
69 12           register PDL_Indx __tinc0_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
70 12           register PDL_Indx __tinc0_mapi = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
71 12           register PDL_Indx __tinc0_mapj = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
72 12           register PDL_Indx __tinc1_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
73 12           register PDL_Indx __tinc1_kern = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
74 12           register PDL_Indx __tinc1_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
75 12           register PDL_Indx __tinc1_mapi = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
76 12           register PDL_Indx __tinc1_mapj = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
77             #define PDL_BROADCASTLOOP_START_conv2d_readdata PDL_BROADCASTLOOP_START( \
78             readdata, \
79             __privtrans->broadcast, \
80             __privtrans->vtable, \
81             a_datap += __offsp[0]; \
82             kern_datap += __offsp[1]; \
83             b_datap += __offsp[2]; \
84             mapi_datap += __offsp[3]; \
85             mapj_datap += __offsp[4]; \
86             , \
87             ( ,a_datap += __tinc1_a - __tinc0_a * __tdims0 \
88             ,kern_datap += __tinc1_kern - __tinc0_kern * __tdims0 \
89             ,b_datap += __tinc1_b - __tinc0_b * __tdims0 \
90             ,mapi_datap += __tinc1_mapi - __tinc0_mapi * __tdims0 \
91             ,mapj_datap += __tinc1_mapj - __tinc0_mapj * __tdims0 \
92             ), \
93             ( ,a_datap += __tinc0_a \
94             ,kern_datap += __tinc0_kern \
95             ,b_datap += __tinc0_b \
96             ,mapi_datap += __tinc0_mapi \
97             ,mapj_datap += __tinc0_mapj \
98             ) \
99             )
100             #define PDL_BROADCASTLOOP_END_conv2d_readdata PDL_BROADCASTLOOP_END( \
101             __privtrans->broadcast, \
102             a_datap -= __tinc1_a * __tdims1 + __offsp[0]; \
103             kern_datap -= __tinc1_kern * __tdims1 + __offsp[1]; \
104             b_datap -= __tinc1_b * __tdims1 + __offsp[2]; \
105             mapi_datap -= __tinc1_mapi * __tdims1 + __offsp[3]; \
106             mapj_datap -= __tinc1_mapj * __tdims1 + __offsp[4]; \
107             )
108 12           register PDL_Indx __inc_a_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_a_m;register PDL_Indx __inc_a_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_a_n;
109 12           register PDL_Indx __inc_b_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_b_m;register PDL_Indx __inc_b_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,1)]; (void)__inc_b_n;
110 12           register PDL_Indx __inc_kern_p = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_kern_p;register PDL_Indx __inc_kern_q = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_kern_q;
111 12           register PDL_Indx __inc_mapi_isize = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_mapi_isize;
112 12           register PDL_Indx __inc_mapj_jsize = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_mapj_jsize;
113             #ifndef PDL_DECLARE_PARAMS_conv2d_1
114             #define PDL_DECLARE_PARAMS_conv2d_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_mapi,PDL_PPSYM_PARAM_mapi,PDL_TYPE_PARAM_mapj,PDL_PPSYM_PARAM_mapj) \
115             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, a, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
116             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, kern, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
117             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, b, (__privtrans->pdls[2]), 1, PDL_PPSYM_OP) \
118             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_PARAM_mapi, mapi, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_mapi) \
119             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_PARAM_mapj, mapj, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_mapj)
120             #endif
121 12 100         if ( __privtrans->bvalflag ) { /* ** do 'bad' Code ** */
122             #define PDL_BAD_CODE
123             #define PDL_IF_BAD(t,f) t
124 1           switch (__privtrans->__datatype) { /* Start generic switch */
125 0           case PDL_SB: {
126 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_SByte,A,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
127 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
128 0           int m_size = __privtrans->ind_sizes[2];
129 0           int n_size = __privtrans->ind_sizes[3];
130 0           int p_size = __privtrans->ind_sizes[4];
131 0           int q_size = __privtrans->ind_sizes[5];
132            
133 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
134 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
135              
136 0           poff = p_size/2; mapi += p_size-1;
137 0           qoff = q_size/2; mapj += q_size-1;
138 0 0         for ( i = 1-p_size; i< m_size; i++) {
139 0           i2 = i + poff;
140 0           switch (opt) {
141 0           case 1: /* REFLECT */
142 0 0         if (i2<0)
143 0           i2 = -i2-1;
144 0 0         else if (i2 >= m_size)
145 0           i2 = 2*m_size-(i2+1);
146 0           break;
147 0           case 2: /* TRUNCATE */
148 0 0         if (i2<0 || i2 >= m_size)
    0          
149 0           i2 = -1;
150 0           break;
151 0           case 3: /* REPLICATE */
152 0 0         if (i2<0)
153 0           i2 = 0;
154 0 0         if (i2 >= m_size)
155 0           i2 = m_size-1;
156 0           break;
157 0           default:
158 0 0         REALMOD(i2,m_size);
    0          
159             }
160 0           mapi[i] = i2;
161             }
162 0 0         for ( j = 1-q_size; j< n_size; j++) {
163 0           j2 = j + qoff;
164 0           switch (opt) {
165 0           case 1: /* REFLECT */
166 0 0         if (j2<0)
167 0           j2 = -j2-1;
168 0 0         else if (j2 >= n_size)
169 0           j2 = 2*n_size-(j2+1);
170 0           break;
171 0           case 2: /* TRUNCATE */
172 0 0         if (j2<0 || j2 >= n_size)
    0          
173 0           j2 = -1;
174 0           break;
175 0           case 3: /* REPLICATE */
176 0 0         if (j2<0)
177 0           j2 = 0;
178 0 0         if (j2 >= n_size)
179 0           j2 = n_size-1;
180 0           break;
181 0           default:
182 0 0         REALMOD(j2,n_size);
    0          
183             }
184 0           mapj[j] = j2;
185             }
186              
187             #line 251 "lib/PDL/Image2D.pd"
188             PDL_BROADCASTLOOP_START_conv2d_readdata
189             #line 252 "lib/PDL/Image2D.pd"
190             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
191             #line 253 "lib/PDL/Image2D.pd"
192             PDL_IF_BAD(int flag = 0;,)
193             PDL_CLDouble tmp = 0;
194             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
195             #line 256 "lib/PDL/Image2D.pd"
196             j2 = mapj[n-q];
197             if (j2 >= 0) {
198             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
199             #line 259 "lib/PDL/Image2D.pd"
200             i2 = mapi[m-p];
201             if (i2 >= 0) {
202             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,A,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,A,kern_badval_isnan) ),) {
203             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
204             PDL_IF_BAD(flag = 1;,)
205             } /* if: good */
206             } /* if: i2 >= 0 */
207             }} /* Close p */
208             #line 267 "lib/PDL/Image2D.pd"
209             } /* if: j2 >= 0 */
210             }} /* Close q */
211             #line 269 "lib/PDL/Image2D.pd"
212             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
213             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
214             }} /* Close n */}} /* Close m */
215             #line 272 "lib/PDL/Image2D.pd"
216             PDL_BROADCASTLOOP_END_conv2d_readdata
217             #line 218 "lib/PDL/Image2D-pp-conv2d.c"
218             }
219 0           } break;
220 0           case PDL_B: {
221 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Byte,B,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
222 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
223 0           int m_size = __privtrans->ind_sizes[2];
224 0           int n_size = __privtrans->ind_sizes[3];
225 0           int p_size = __privtrans->ind_sizes[4];
226 0           int q_size = __privtrans->ind_sizes[5];
227            
228 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
229 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
230              
231 0           poff = p_size/2; mapi += p_size-1;
232 0           qoff = q_size/2; mapj += q_size-1;
233 0 0         for ( i = 1-p_size; i< m_size; i++) {
234 0           i2 = i + poff;
235 0           switch (opt) {
236 0           case 1: /* REFLECT */
237 0 0         if (i2<0)
238 0           i2 = -i2-1;
239 0 0         else if (i2 >= m_size)
240 0           i2 = 2*m_size-(i2+1);
241 0           break;
242 0           case 2: /* TRUNCATE */
243 0 0         if (i2<0 || i2 >= m_size)
    0          
244 0           i2 = -1;
245 0           break;
246 0           case 3: /* REPLICATE */
247 0 0         if (i2<0)
248 0           i2 = 0;
249 0 0         if (i2 >= m_size)
250 0           i2 = m_size-1;
251 0           break;
252 0           default:
253 0 0         REALMOD(i2,m_size);
    0          
254             }
255 0           mapi[i] = i2;
256             }
257 0 0         for ( j = 1-q_size; j< n_size; j++) {
258 0           j2 = j + qoff;
259 0           switch (opt) {
260 0           case 1: /* REFLECT */
261 0 0         if (j2<0)
262 0           j2 = -j2-1;
263 0 0         else if (j2 >= n_size)
264 0           j2 = 2*n_size-(j2+1);
265 0           break;
266 0           case 2: /* TRUNCATE */
267 0 0         if (j2<0 || j2 >= n_size)
    0          
268 0           j2 = -1;
269 0           break;
270 0           case 3: /* REPLICATE */
271 0 0         if (j2<0)
272 0           j2 = 0;
273 0 0         if (j2 >= n_size)
274 0           j2 = n_size-1;
275 0           break;
276 0           default:
277 0 0         REALMOD(j2,n_size);
    0          
278             }
279 0           mapj[j] = j2;
280             }
281              
282             #line 251 "lib/PDL/Image2D.pd"
283             PDL_BROADCASTLOOP_START_conv2d_readdata
284             #line 252 "lib/PDL/Image2D.pd"
285             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
286             #line 253 "lib/PDL/Image2D.pd"
287             PDL_IF_BAD(int flag = 0;,)
288             PDL_CLDouble tmp = 0;
289             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
290             #line 256 "lib/PDL/Image2D.pd"
291             j2 = mapj[n-q];
292             if (j2 >= 0) {
293             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
294             #line 259 "lib/PDL/Image2D.pd"
295             i2 = mapi[m-p];
296             if (i2 >= 0) {
297             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,B,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,B,kern_badval_isnan) ),) {
298             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
299             PDL_IF_BAD(flag = 1;,)
300             } /* if: good */
301             } /* if: i2 >= 0 */
302             }} /* Close p */
303             #line 267 "lib/PDL/Image2D.pd"
304             } /* if: j2 >= 0 */
305             }} /* Close q */
306             #line 269 "lib/PDL/Image2D.pd"
307             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
308             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
309             }} /* Close n */}} /* Close m */
310             #line 272 "lib/PDL/Image2D.pd"
311             PDL_BROADCASTLOOP_END_conv2d_readdata
312             #line 313 "lib/PDL/Image2D-pp-conv2d.c"
313             }
314 0           } break;
315 0           case PDL_S: {
316 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Short,S,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
317 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
318 0           int m_size = __privtrans->ind_sizes[2];
319 0           int n_size = __privtrans->ind_sizes[3];
320 0           int p_size = __privtrans->ind_sizes[4];
321 0           int q_size = __privtrans->ind_sizes[5];
322            
323 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
324 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
325              
326 0           poff = p_size/2; mapi += p_size-1;
327 0           qoff = q_size/2; mapj += q_size-1;
328 0 0         for ( i = 1-p_size; i< m_size; i++) {
329 0           i2 = i + poff;
330 0           switch (opt) {
331 0           case 1: /* REFLECT */
332 0 0         if (i2<0)
333 0           i2 = -i2-1;
334 0 0         else if (i2 >= m_size)
335 0           i2 = 2*m_size-(i2+1);
336 0           break;
337 0           case 2: /* TRUNCATE */
338 0 0         if (i2<0 || i2 >= m_size)
    0          
339 0           i2 = -1;
340 0           break;
341 0           case 3: /* REPLICATE */
342 0 0         if (i2<0)
343 0           i2 = 0;
344 0 0         if (i2 >= m_size)
345 0           i2 = m_size-1;
346 0           break;
347 0           default:
348 0 0         REALMOD(i2,m_size);
    0          
349             }
350 0           mapi[i] = i2;
351             }
352 0 0         for ( j = 1-q_size; j< n_size; j++) {
353 0           j2 = j + qoff;
354 0           switch (opt) {
355 0           case 1: /* REFLECT */
356 0 0         if (j2<0)
357 0           j2 = -j2-1;
358 0 0         else if (j2 >= n_size)
359 0           j2 = 2*n_size-(j2+1);
360 0           break;
361 0           case 2: /* TRUNCATE */
362 0 0         if (j2<0 || j2 >= n_size)
    0          
363 0           j2 = -1;
364 0           break;
365 0           case 3: /* REPLICATE */
366 0 0         if (j2<0)
367 0           j2 = 0;
368 0 0         if (j2 >= n_size)
369 0           j2 = n_size-1;
370 0           break;
371 0           default:
372 0 0         REALMOD(j2,n_size);
    0          
373             }
374 0           mapj[j] = j2;
375             }
376              
377             #line 251 "lib/PDL/Image2D.pd"
378             PDL_BROADCASTLOOP_START_conv2d_readdata
379             #line 252 "lib/PDL/Image2D.pd"
380             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
381             #line 253 "lib/PDL/Image2D.pd"
382             PDL_IF_BAD(int flag = 0;,)
383             PDL_CLDouble tmp = 0;
384             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
385             #line 256 "lib/PDL/Image2D.pd"
386             j2 = mapj[n-q];
387             if (j2 >= 0) {
388             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
389             #line 259 "lib/PDL/Image2D.pd"
390             i2 = mapi[m-p];
391             if (i2 >= 0) {
392             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,S,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,S,kern_badval_isnan) ),) {
393             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
394             PDL_IF_BAD(flag = 1;,)
395             } /* if: good */
396             } /* if: i2 >= 0 */
397             }} /* Close p */
398             #line 267 "lib/PDL/Image2D.pd"
399             } /* if: j2 >= 0 */
400             }} /* Close q */
401             #line 269 "lib/PDL/Image2D.pd"
402             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
403             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
404             }} /* Close n */}} /* Close m */
405             #line 272 "lib/PDL/Image2D.pd"
406             PDL_BROADCASTLOOP_END_conv2d_readdata
407             #line 408 "lib/PDL/Image2D-pp-conv2d.c"
408             }
409 0           } break;
410 0           case PDL_US: {
411 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Ushort,U,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
412 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
413 0           int m_size = __privtrans->ind_sizes[2];
414 0           int n_size = __privtrans->ind_sizes[3];
415 0           int p_size = __privtrans->ind_sizes[4];
416 0           int q_size = __privtrans->ind_sizes[5];
417            
418 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
419 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
420              
421 0           poff = p_size/2; mapi += p_size-1;
422 0           qoff = q_size/2; mapj += q_size-1;
423 0 0         for ( i = 1-p_size; i< m_size; i++) {
424 0           i2 = i + poff;
425 0           switch (opt) {
426 0           case 1: /* REFLECT */
427 0 0         if (i2<0)
428 0           i2 = -i2-1;
429 0 0         else if (i2 >= m_size)
430 0           i2 = 2*m_size-(i2+1);
431 0           break;
432 0           case 2: /* TRUNCATE */
433 0 0         if (i2<0 || i2 >= m_size)
    0          
434 0           i2 = -1;
435 0           break;
436 0           case 3: /* REPLICATE */
437 0 0         if (i2<0)
438 0           i2 = 0;
439 0 0         if (i2 >= m_size)
440 0           i2 = m_size-1;
441 0           break;
442 0           default:
443 0 0         REALMOD(i2,m_size);
    0          
444             }
445 0           mapi[i] = i2;
446             }
447 0 0         for ( j = 1-q_size; j< n_size; j++) {
448 0           j2 = j + qoff;
449 0           switch (opt) {
450 0           case 1: /* REFLECT */
451 0 0         if (j2<0)
452 0           j2 = -j2-1;
453 0 0         else if (j2 >= n_size)
454 0           j2 = 2*n_size-(j2+1);
455 0           break;
456 0           case 2: /* TRUNCATE */
457 0 0         if (j2<0 || j2 >= n_size)
    0          
458 0           j2 = -1;
459 0           break;
460 0           case 3: /* REPLICATE */
461 0 0         if (j2<0)
462 0           j2 = 0;
463 0 0         if (j2 >= n_size)
464 0           j2 = n_size-1;
465 0           break;
466 0           default:
467 0 0         REALMOD(j2,n_size);
    0          
468             }
469 0           mapj[j] = j2;
470             }
471              
472             #line 251 "lib/PDL/Image2D.pd"
473             PDL_BROADCASTLOOP_START_conv2d_readdata
474             #line 252 "lib/PDL/Image2D.pd"
475             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
476             #line 253 "lib/PDL/Image2D.pd"
477             PDL_IF_BAD(int flag = 0;,)
478             PDL_CLDouble tmp = 0;
479             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
480             #line 256 "lib/PDL/Image2D.pd"
481             j2 = mapj[n-q];
482             if (j2 >= 0) {
483             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
484             #line 259 "lib/PDL/Image2D.pd"
485             i2 = mapi[m-p];
486             if (i2 >= 0) {
487             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,U,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,U,kern_badval_isnan) ),) {
488             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
489             PDL_IF_BAD(flag = 1;,)
490             } /* if: good */
491             } /* if: i2 >= 0 */
492             }} /* Close p */
493             #line 267 "lib/PDL/Image2D.pd"
494             } /* if: j2 >= 0 */
495             }} /* Close q */
496             #line 269 "lib/PDL/Image2D.pd"
497             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
498             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
499             }} /* Close n */}} /* Close m */
500             #line 272 "lib/PDL/Image2D.pd"
501             PDL_BROADCASTLOOP_END_conv2d_readdata
502             #line 503 "lib/PDL/Image2D-pp-conv2d.c"
503             }
504 0           } break;
505 0           case PDL_L: {
506 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Long,L,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
507 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
508 0           int m_size = __privtrans->ind_sizes[2];
509 0           int n_size = __privtrans->ind_sizes[3];
510 0           int p_size = __privtrans->ind_sizes[4];
511 0           int q_size = __privtrans->ind_sizes[5];
512            
513 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
514 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
515              
516 0           poff = p_size/2; mapi += p_size-1;
517 0           qoff = q_size/2; mapj += q_size-1;
518 0 0         for ( i = 1-p_size; i< m_size; i++) {
519 0           i2 = i + poff;
520 0           switch (opt) {
521 0           case 1: /* REFLECT */
522 0 0         if (i2<0)
523 0           i2 = -i2-1;
524 0 0         else if (i2 >= m_size)
525 0           i2 = 2*m_size-(i2+1);
526 0           break;
527 0           case 2: /* TRUNCATE */
528 0 0         if (i2<0 || i2 >= m_size)
    0          
529 0           i2 = -1;
530 0           break;
531 0           case 3: /* REPLICATE */
532 0 0         if (i2<0)
533 0           i2 = 0;
534 0 0         if (i2 >= m_size)
535 0           i2 = m_size-1;
536 0           break;
537 0           default:
538 0 0         REALMOD(i2,m_size);
    0          
539             }
540 0           mapi[i] = i2;
541             }
542 0 0         for ( j = 1-q_size; j< n_size; j++) {
543 0           j2 = j + qoff;
544 0           switch (opt) {
545 0           case 1: /* REFLECT */
546 0 0         if (j2<0)
547 0           j2 = -j2-1;
548 0 0         else if (j2 >= n_size)
549 0           j2 = 2*n_size-(j2+1);
550 0           break;
551 0           case 2: /* TRUNCATE */
552 0 0         if (j2<0 || j2 >= n_size)
    0          
553 0           j2 = -1;
554 0           break;
555 0           case 3: /* REPLICATE */
556 0 0         if (j2<0)
557 0           j2 = 0;
558 0 0         if (j2 >= n_size)
559 0           j2 = n_size-1;
560 0           break;
561 0           default:
562 0 0         REALMOD(j2,n_size);
    0          
563             }
564 0           mapj[j] = j2;
565             }
566              
567             #line 251 "lib/PDL/Image2D.pd"
568             PDL_BROADCASTLOOP_START_conv2d_readdata
569             #line 252 "lib/PDL/Image2D.pd"
570             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
571             #line 253 "lib/PDL/Image2D.pd"
572             PDL_IF_BAD(int flag = 0;,)
573             PDL_CLDouble tmp = 0;
574             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
575             #line 256 "lib/PDL/Image2D.pd"
576             j2 = mapj[n-q];
577             if (j2 >= 0) {
578             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
579             #line 259 "lib/PDL/Image2D.pd"
580             i2 = mapi[m-p];
581             if (i2 >= 0) {
582             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,L,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,L,kern_badval_isnan) ),) {
583             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
584             PDL_IF_BAD(flag = 1;,)
585             } /* if: good */
586             } /* if: i2 >= 0 */
587             }} /* Close p */
588             #line 267 "lib/PDL/Image2D.pd"
589             } /* if: j2 >= 0 */
590             }} /* Close q */
591             #line 269 "lib/PDL/Image2D.pd"
592             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
593             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
594             }} /* Close n */}} /* Close m */
595             #line 272 "lib/PDL/Image2D.pd"
596             PDL_BROADCASTLOOP_END_conv2d_readdata
597             #line 598 "lib/PDL/Image2D-pp-conv2d.c"
598             }
599 0           } break;
600 0           case PDL_UL: {
601 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_ULong,K,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
602 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
603 0           int m_size = __privtrans->ind_sizes[2];
604 0           int n_size = __privtrans->ind_sizes[3];
605 0           int p_size = __privtrans->ind_sizes[4];
606 0           int q_size = __privtrans->ind_sizes[5];
607            
608 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
609 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
610              
611 0           poff = p_size/2; mapi += p_size-1;
612 0           qoff = q_size/2; mapj += q_size-1;
613 0 0         for ( i = 1-p_size; i< m_size; i++) {
614 0           i2 = i + poff;
615 0           switch (opt) {
616 0           case 1: /* REFLECT */
617 0 0         if (i2<0)
618 0           i2 = -i2-1;
619 0 0         else if (i2 >= m_size)
620 0           i2 = 2*m_size-(i2+1);
621 0           break;
622 0           case 2: /* TRUNCATE */
623 0 0         if (i2<0 || i2 >= m_size)
    0          
624 0           i2 = -1;
625 0           break;
626 0           case 3: /* REPLICATE */
627 0 0         if (i2<0)
628 0           i2 = 0;
629 0 0         if (i2 >= m_size)
630 0           i2 = m_size-1;
631 0           break;
632 0           default:
633 0 0         REALMOD(i2,m_size);
    0          
634             }
635 0           mapi[i] = i2;
636             }
637 0 0         for ( j = 1-q_size; j< n_size; j++) {
638 0           j2 = j + qoff;
639 0           switch (opt) {
640 0           case 1: /* REFLECT */
641 0 0         if (j2<0)
642 0           j2 = -j2-1;
643 0 0         else if (j2 >= n_size)
644 0           j2 = 2*n_size-(j2+1);
645 0           break;
646 0           case 2: /* TRUNCATE */
647 0 0         if (j2<0 || j2 >= n_size)
    0          
648 0           j2 = -1;
649 0           break;
650 0           case 3: /* REPLICATE */
651 0 0         if (j2<0)
652 0           j2 = 0;
653 0 0         if (j2 >= n_size)
654 0           j2 = n_size-1;
655 0           break;
656 0           default:
657 0 0         REALMOD(j2,n_size);
    0          
658             }
659 0           mapj[j] = j2;
660             }
661              
662             #line 251 "lib/PDL/Image2D.pd"
663             PDL_BROADCASTLOOP_START_conv2d_readdata
664             #line 252 "lib/PDL/Image2D.pd"
665             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
666             #line 253 "lib/PDL/Image2D.pd"
667             PDL_IF_BAD(int flag = 0;,)
668             PDL_CLDouble tmp = 0;
669             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
670             #line 256 "lib/PDL/Image2D.pd"
671             j2 = mapj[n-q];
672             if (j2 >= 0) {
673             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
674             #line 259 "lib/PDL/Image2D.pd"
675             i2 = mapi[m-p];
676             if (i2 >= 0) {
677             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,K,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,K,kern_badval_isnan) ),) {
678             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
679             PDL_IF_BAD(flag = 1;,)
680             } /* if: good */
681             } /* if: i2 >= 0 */
682             }} /* Close p */
683             #line 267 "lib/PDL/Image2D.pd"
684             } /* if: j2 >= 0 */
685             }} /* Close q */
686             #line 269 "lib/PDL/Image2D.pd"
687             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
688             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
689             }} /* Close n */}} /* Close m */
690             #line 272 "lib/PDL/Image2D.pd"
691             PDL_BROADCASTLOOP_END_conv2d_readdata
692             #line 693 "lib/PDL/Image2D-pp-conv2d.c"
693             }
694 0           } break;
695 0           case PDL_IND: {
696 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Indx,N,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
697 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
698 0           int m_size = __privtrans->ind_sizes[2];
699 0           int n_size = __privtrans->ind_sizes[3];
700 0           int p_size = __privtrans->ind_sizes[4];
701 0           int q_size = __privtrans->ind_sizes[5];
702            
703 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
704 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
705              
706 0           poff = p_size/2; mapi += p_size-1;
707 0           qoff = q_size/2; mapj += q_size-1;
708 0 0         for ( i = 1-p_size; i< m_size; i++) {
709 0           i2 = i + poff;
710 0           switch (opt) {
711 0           case 1: /* REFLECT */
712 0 0         if (i2<0)
713 0           i2 = -i2-1;
714 0 0         else if (i2 >= m_size)
715 0           i2 = 2*m_size-(i2+1);
716 0           break;
717 0           case 2: /* TRUNCATE */
718 0 0         if (i2<0 || i2 >= m_size)
    0          
719 0           i2 = -1;
720 0           break;
721 0           case 3: /* REPLICATE */
722 0 0         if (i2<0)
723 0           i2 = 0;
724 0 0         if (i2 >= m_size)
725 0           i2 = m_size-1;
726 0           break;
727 0           default:
728 0 0         REALMOD(i2,m_size);
    0          
729             }
730 0           mapi[i] = i2;
731             }
732 0 0         for ( j = 1-q_size; j< n_size; j++) {
733 0           j2 = j + qoff;
734 0           switch (opt) {
735 0           case 1: /* REFLECT */
736 0 0         if (j2<0)
737 0           j2 = -j2-1;
738 0 0         else if (j2 >= n_size)
739 0           j2 = 2*n_size-(j2+1);
740 0           break;
741 0           case 2: /* TRUNCATE */
742 0 0         if (j2<0 || j2 >= n_size)
    0          
743 0           j2 = -1;
744 0           break;
745 0           case 3: /* REPLICATE */
746 0 0         if (j2<0)
747 0           j2 = 0;
748 0 0         if (j2 >= n_size)
749 0           j2 = n_size-1;
750 0           break;
751 0           default:
752 0 0         REALMOD(j2,n_size);
    0          
753             }
754 0           mapj[j] = j2;
755             }
756              
757             #line 251 "lib/PDL/Image2D.pd"
758             PDL_BROADCASTLOOP_START_conv2d_readdata
759             #line 252 "lib/PDL/Image2D.pd"
760             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
761             #line 253 "lib/PDL/Image2D.pd"
762             PDL_IF_BAD(int flag = 0;,)
763             PDL_CLDouble tmp = 0;
764             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
765             #line 256 "lib/PDL/Image2D.pd"
766             j2 = mapj[n-q];
767             if (j2 >= 0) {
768             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
769             #line 259 "lib/PDL/Image2D.pd"
770             i2 = mapi[m-p];
771             if (i2 >= 0) {
772             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,N,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,N,kern_badval_isnan) ),) {
773             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
774             PDL_IF_BAD(flag = 1;,)
775             } /* if: good */
776             } /* if: i2 >= 0 */
777             }} /* Close p */
778             #line 267 "lib/PDL/Image2D.pd"
779             } /* if: j2 >= 0 */
780             }} /* Close q */
781             #line 269 "lib/PDL/Image2D.pd"
782             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
783             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
784             }} /* Close n */}} /* Close m */
785             #line 272 "lib/PDL/Image2D.pd"
786             PDL_BROADCASTLOOP_END_conv2d_readdata
787             #line 788 "lib/PDL/Image2D-pp-conv2d.c"
788             }
789 0           } break;
790 0           case PDL_ULL: {
791 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_ULongLong,P,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
792 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
793 0           int m_size = __privtrans->ind_sizes[2];
794 0           int n_size = __privtrans->ind_sizes[3];
795 0           int p_size = __privtrans->ind_sizes[4];
796 0           int q_size = __privtrans->ind_sizes[5];
797            
798 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
799 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
800              
801 0           poff = p_size/2; mapi += p_size-1;
802 0           qoff = q_size/2; mapj += q_size-1;
803 0 0         for ( i = 1-p_size; i< m_size; i++) {
804 0           i2 = i + poff;
805 0           switch (opt) {
806 0           case 1: /* REFLECT */
807 0 0         if (i2<0)
808 0           i2 = -i2-1;
809 0 0         else if (i2 >= m_size)
810 0           i2 = 2*m_size-(i2+1);
811 0           break;
812 0           case 2: /* TRUNCATE */
813 0 0         if (i2<0 || i2 >= m_size)
    0          
814 0           i2 = -1;
815 0           break;
816 0           case 3: /* REPLICATE */
817 0 0         if (i2<0)
818 0           i2 = 0;
819 0 0         if (i2 >= m_size)
820 0           i2 = m_size-1;
821 0           break;
822 0           default:
823 0 0         REALMOD(i2,m_size);
    0          
824             }
825 0           mapi[i] = i2;
826             }
827 0 0         for ( j = 1-q_size; j< n_size; j++) {
828 0           j2 = j + qoff;
829 0           switch (opt) {
830 0           case 1: /* REFLECT */
831 0 0         if (j2<0)
832 0           j2 = -j2-1;
833 0 0         else if (j2 >= n_size)
834 0           j2 = 2*n_size-(j2+1);
835 0           break;
836 0           case 2: /* TRUNCATE */
837 0 0         if (j2<0 || j2 >= n_size)
    0          
838 0           j2 = -1;
839 0           break;
840 0           case 3: /* REPLICATE */
841 0 0         if (j2<0)
842 0           j2 = 0;
843 0 0         if (j2 >= n_size)
844 0           j2 = n_size-1;
845 0           break;
846 0           default:
847 0 0         REALMOD(j2,n_size);
    0          
848             }
849 0           mapj[j] = j2;
850             }
851              
852             #line 251 "lib/PDL/Image2D.pd"
853             PDL_BROADCASTLOOP_START_conv2d_readdata
854             #line 252 "lib/PDL/Image2D.pd"
855             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
856             #line 253 "lib/PDL/Image2D.pd"
857             PDL_IF_BAD(int flag = 0;,)
858             PDL_CLDouble tmp = 0;
859             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
860             #line 256 "lib/PDL/Image2D.pd"
861             j2 = mapj[n-q];
862             if (j2 >= 0) {
863             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
864             #line 259 "lib/PDL/Image2D.pd"
865             i2 = mapi[m-p];
866             if (i2 >= 0) {
867             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,P,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,P,kern_badval_isnan) ),) {
868             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
869             PDL_IF_BAD(flag = 1;,)
870             } /* if: good */
871             } /* if: i2 >= 0 */
872             }} /* Close p */
873             #line 267 "lib/PDL/Image2D.pd"
874             } /* if: j2 >= 0 */
875             }} /* Close q */
876             #line 269 "lib/PDL/Image2D.pd"
877             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
878             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
879             }} /* Close n */}} /* Close m */
880             #line 272 "lib/PDL/Image2D.pd"
881             PDL_BROADCASTLOOP_END_conv2d_readdata
882             #line 883 "lib/PDL/Image2D-pp-conv2d.c"
883             }
884 0           } break;
885 0           case PDL_LL: {
886 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_LongLong,Q,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
887 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
888 0           int m_size = __privtrans->ind_sizes[2];
889 0           int n_size = __privtrans->ind_sizes[3];
890 0           int p_size = __privtrans->ind_sizes[4];
891 0           int q_size = __privtrans->ind_sizes[5];
892            
893 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
894 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
895              
896 0           poff = p_size/2; mapi += p_size-1;
897 0           qoff = q_size/2; mapj += q_size-1;
898 0 0         for ( i = 1-p_size; i< m_size; i++) {
899 0           i2 = i + poff;
900 0           switch (opt) {
901 0           case 1: /* REFLECT */
902 0 0         if (i2<0)
903 0           i2 = -i2-1;
904 0 0         else if (i2 >= m_size)
905 0           i2 = 2*m_size-(i2+1);
906 0           break;
907 0           case 2: /* TRUNCATE */
908 0 0         if (i2<0 || i2 >= m_size)
    0          
909 0           i2 = -1;
910 0           break;
911 0           case 3: /* REPLICATE */
912 0 0         if (i2<0)
913 0           i2 = 0;
914 0 0         if (i2 >= m_size)
915 0           i2 = m_size-1;
916 0           break;
917 0           default:
918 0 0         REALMOD(i2,m_size);
    0          
919             }
920 0           mapi[i] = i2;
921             }
922 0 0         for ( j = 1-q_size; j< n_size; j++) {
923 0           j2 = j + qoff;
924 0           switch (opt) {
925 0           case 1: /* REFLECT */
926 0 0         if (j2<0)
927 0           j2 = -j2-1;
928 0 0         else if (j2 >= n_size)
929 0           j2 = 2*n_size-(j2+1);
930 0           break;
931 0           case 2: /* TRUNCATE */
932 0 0         if (j2<0 || j2 >= n_size)
    0          
933 0           j2 = -1;
934 0           break;
935 0           case 3: /* REPLICATE */
936 0 0         if (j2<0)
937 0           j2 = 0;
938 0 0         if (j2 >= n_size)
939 0           j2 = n_size-1;
940 0           break;
941 0           default:
942 0 0         REALMOD(j2,n_size);
    0          
943             }
944 0           mapj[j] = j2;
945             }
946              
947             #line 251 "lib/PDL/Image2D.pd"
948             PDL_BROADCASTLOOP_START_conv2d_readdata
949             #line 252 "lib/PDL/Image2D.pd"
950             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
951             #line 253 "lib/PDL/Image2D.pd"
952             PDL_IF_BAD(int flag = 0;,)
953             PDL_CLDouble tmp = 0;
954             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
955             #line 256 "lib/PDL/Image2D.pd"
956             j2 = mapj[n-q];
957             if (j2 >= 0) {
958             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
959             #line 259 "lib/PDL/Image2D.pd"
960             i2 = mapi[m-p];
961             if (i2 >= 0) {
962             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,Q,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,Q,kern_badval_isnan) ),) {
963             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
964             PDL_IF_BAD(flag = 1;,)
965             } /* if: good */
966             } /* if: i2 >= 0 */
967             }} /* Close p */
968             #line 267 "lib/PDL/Image2D.pd"
969             } /* if: j2 >= 0 */
970             }} /* Close q */
971             #line 269 "lib/PDL/Image2D.pd"
972             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
973             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
974             }} /* Close n */}} /* Close m */
975             #line 272 "lib/PDL/Image2D.pd"
976             PDL_BROADCASTLOOP_END_conv2d_readdata
977             #line 978 "lib/PDL/Image2D-pp-conv2d.c"
978             }
979 0           } break;
980 0           case PDL_F: {
981 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Float,F,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
982 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
983 0           int m_size = __privtrans->ind_sizes[2];
984 0           int n_size = __privtrans->ind_sizes[3];
985 0           int p_size = __privtrans->ind_sizes[4];
986 0           int q_size = __privtrans->ind_sizes[5];
987            
988 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
989 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
990              
991 0           poff = p_size/2; mapi += p_size-1;
992 0           qoff = q_size/2; mapj += q_size-1;
993 0 0         for ( i = 1-p_size; i< m_size; i++) {
994 0           i2 = i + poff;
995 0           switch (opt) {
996 0           case 1: /* REFLECT */
997 0 0         if (i2<0)
998 0           i2 = -i2-1;
999 0 0         else if (i2 >= m_size)
1000 0           i2 = 2*m_size-(i2+1);
1001 0           break;
1002 0           case 2: /* TRUNCATE */
1003 0 0         if (i2<0 || i2 >= m_size)
    0          
1004 0           i2 = -1;
1005 0           break;
1006 0           case 3: /* REPLICATE */
1007 0 0         if (i2<0)
1008 0           i2 = 0;
1009 0 0         if (i2 >= m_size)
1010 0           i2 = m_size-1;
1011 0           break;
1012 0           default:
1013 0 0         REALMOD(i2,m_size);
    0          
1014             }
1015 0           mapi[i] = i2;
1016             }
1017 0 0         for ( j = 1-q_size; j< n_size; j++) {
1018 0           j2 = j + qoff;
1019 0           switch (opt) {
1020 0           case 1: /* REFLECT */
1021 0 0         if (j2<0)
1022 0           j2 = -j2-1;
1023 0 0         else if (j2 >= n_size)
1024 0           j2 = 2*n_size-(j2+1);
1025 0           break;
1026 0           case 2: /* TRUNCATE */
1027 0 0         if (j2<0 || j2 >= n_size)
    0          
1028 0           j2 = -1;
1029 0           break;
1030 0           case 3: /* REPLICATE */
1031 0 0         if (j2<0)
1032 0           j2 = 0;
1033 0 0         if (j2 >= n_size)
1034 0           j2 = n_size-1;
1035 0           break;
1036 0           default:
1037 0 0         REALMOD(j2,n_size);
    0          
1038             }
1039 0           mapj[j] = j2;
1040             }
1041              
1042             #line 251 "lib/PDL/Image2D.pd"
1043             PDL_BROADCASTLOOP_START_conv2d_readdata
1044             #line 252 "lib/PDL/Image2D.pd"
1045             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1046             #line 253 "lib/PDL/Image2D.pd"
1047             PDL_IF_BAD(int flag = 0;,)
1048             PDL_CLDouble tmp = 0;
1049             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1050             #line 256 "lib/PDL/Image2D.pd"
1051             j2 = mapj[n-q];
1052             if (j2 >= 0) {
1053             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1054             #line 259 "lib/PDL/Image2D.pd"
1055             i2 = mapi[m-p];
1056             if (i2 >= 0) {
1057             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,F,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,F,kern_badval_isnan) ),) {
1058             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1059             PDL_IF_BAD(flag = 1;,)
1060             } /* if: good */
1061             } /* if: i2 >= 0 */
1062             }} /* Close p */
1063             #line 267 "lib/PDL/Image2D.pd"
1064             } /* if: j2 >= 0 */
1065             }} /* Close q */
1066             #line 269 "lib/PDL/Image2D.pd"
1067             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1068             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1069             }} /* Close n */}} /* Close m */
1070             #line 272 "lib/PDL/Image2D.pd"
1071             PDL_BROADCASTLOOP_END_conv2d_readdata
1072             #line 1073 "lib/PDL/Image2D-pp-conv2d.c"
1073             }
1074 0           } break;
1075 1           case PDL_D: {
1076 1 50         PDL_DECLARE_PARAMS_conv2d_1(PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1077 1           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1078 1           int m_size = __privtrans->ind_sizes[2];
1079 1           int n_size = __privtrans->ind_sizes[3];
1080 1           int p_size = __privtrans->ind_sizes[4];
1081 1           int q_size = __privtrans->ind_sizes[5];
1082            
1083 1           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1084 1 50         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    50          
1085              
1086 1           poff = p_size/2; mapi += p_size-1;
1087 1           qoff = q_size/2; mapj += q_size-1;
1088 12 100         for ( i = 1-p_size; i< m_size; i++) {
1089 11           i2 = i + poff;
1090 11           switch (opt) {
1091 0           case 1: /* REFLECT */
1092 0 0         if (i2<0)
1093 0           i2 = -i2-1;
1094 0 0         else if (i2 >= m_size)
1095 0           i2 = 2*m_size-(i2+1);
1096 0           break;
1097 0           case 2: /* TRUNCATE */
1098 0 0         if (i2<0 || i2 >= m_size)
    0          
1099 0           i2 = -1;
1100 0           break;
1101 0           case 3: /* REPLICATE */
1102 0 0         if (i2<0)
1103 0           i2 = 0;
1104 0 0         if (i2 >= m_size)
1105 0           i2 = m_size-1;
1106 0           break;
1107 11           default:
1108 12 100         REALMOD(i2,m_size);
    50          
1109             }
1110 11           mapi[i] = i2;
1111             }
1112 5 100         for ( j = 1-q_size; j< n_size; j++) {
1113 4           j2 = j + qoff;
1114 4           switch (opt) {
1115 0           case 1: /* REFLECT */
1116 0 0         if (j2<0)
1117 0           j2 = -j2-1;
1118 0 0         else if (j2 >= n_size)
1119 0           j2 = 2*n_size-(j2+1);
1120 0           break;
1121 0           case 2: /* TRUNCATE */
1122 0 0         if (j2<0 || j2 >= n_size)
    0          
1123 0           j2 = -1;
1124 0           break;
1125 0           case 3: /* REPLICATE */
1126 0 0         if (j2<0)
1127 0           j2 = 0;
1128 0 0         if (j2 >= n_size)
1129 0           j2 = n_size-1;
1130 0           break;
1131 4           default:
1132 5 100         REALMOD(j2,n_size);
    50          
1133             }
1134 4           mapj[j] = j2;
1135             }
1136              
1137             #line 251 "lib/PDL/Image2D.pd"
1138             PDL_BROADCASTLOOP_START_conv2d_readdata
1139             #line 252 "lib/PDL/Image2D.pd"
1140             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1141             #line 253 "lib/PDL/Image2D.pd"
1142             PDL_IF_BAD(int flag = 0;,)
1143             PDL_CLDouble tmp = 0;
1144             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1145             #line 256 "lib/PDL/Image2D.pd"
1146             j2 = mapj[n-q];
1147             if (j2 >= 0) {
1148             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1149             #line 259 "lib/PDL/Image2D.pd"
1150             i2 = mapi[m-p];
1151             if (i2 >= 0) {
1152             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,D,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,D,kern_badval_isnan) ),) {
1153             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1154             PDL_IF_BAD(flag = 1;,)
1155             } /* if: good */
1156             } /* if: i2 >= 0 */
1157             }} /* Close p */
1158             #line 267 "lib/PDL/Image2D.pd"
1159             } /* if: j2 >= 0 */
1160             }} /* Close q */
1161             #line 269 "lib/PDL/Image2D.pd"
1162             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1163             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1164             }} /* Close n */}} /* Close m */
1165             #line 272 "lib/PDL/Image2D.pd"
1166             PDL_BROADCASTLOOP_END_conv2d_readdata
1167             #line 1168 "lib/PDL/Image2D-pp-conv2d.c"
1168             }
1169 1           } break;
1170 0           case PDL_LD: {
1171 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_LDouble,E,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1172 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1173 0           int m_size = __privtrans->ind_sizes[2];
1174 0           int n_size = __privtrans->ind_sizes[3];
1175 0           int p_size = __privtrans->ind_sizes[4];
1176 0           int q_size = __privtrans->ind_sizes[5];
1177            
1178 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1179 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
1180              
1181 0           poff = p_size/2; mapi += p_size-1;
1182 0           qoff = q_size/2; mapj += q_size-1;
1183 0 0         for ( i = 1-p_size; i< m_size; i++) {
1184 0           i2 = i + poff;
1185 0           switch (opt) {
1186 0           case 1: /* REFLECT */
1187 0 0         if (i2<0)
1188 0           i2 = -i2-1;
1189 0 0         else if (i2 >= m_size)
1190 0           i2 = 2*m_size-(i2+1);
1191 0           break;
1192 0           case 2: /* TRUNCATE */
1193 0 0         if (i2<0 || i2 >= m_size)
    0          
1194 0           i2 = -1;
1195 0           break;
1196 0           case 3: /* REPLICATE */
1197 0 0         if (i2<0)
1198 0           i2 = 0;
1199 0 0         if (i2 >= m_size)
1200 0           i2 = m_size-1;
1201 0           break;
1202 0           default:
1203 0 0         REALMOD(i2,m_size);
    0          
1204             }
1205 0           mapi[i] = i2;
1206             }
1207 0 0         for ( j = 1-q_size; j< n_size; j++) {
1208 0           j2 = j + qoff;
1209 0           switch (opt) {
1210 0           case 1: /* REFLECT */
1211 0 0         if (j2<0)
1212 0           j2 = -j2-1;
1213 0 0         else if (j2 >= n_size)
1214 0           j2 = 2*n_size-(j2+1);
1215 0           break;
1216 0           case 2: /* TRUNCATE */
1217 0 0         if (j2<0 || j2 >= n_size)
    0          
1218 0           j2 = -1;
1219 0           break;
1220 0           case 3: /* REPLICATE */
1221 0 0         if (j2<0)
1222 0           j2 = 0;
1223 0 0         if (j2 >= n_size)
1224 0           j2 = n_size-1;
1225 0           break;
1226 0           default:
1227 0 0         REALMOD(j2,n_size);
    0          
1228             }
1229 0           mapj[j] = j2;
1230             }
1231              
1232             #line 251 "lib/PDL/Image2D.pd"
1233             PDL_BROADCASTLOOP_START_conv2d_readdata
1234             #line 252 "lib/PDL/Image2D.pd"
1235             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1236             #line 253 "lib/PDL/Image2D.pd"
1237             PDL_IF_BAD(int flag = 0;,)
1238             PDL_CLDouble tmp = 0;
1239             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1240             #line 256 "lib/PDL/Image2D.pd"
1241             j2 = mapj[n-q];
1242             if (j2 >= 0) {
1243             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1244             #line 259 "lib/PDL/Image2D.pd"
1245             i2 = mapi[m-p];
1246             if (i2 >= 0) {
1247             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,E,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,E,kern_badval_isnan) ),) {
1248             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1249             PDL_IF_BAD(flag = 1;,)
1250             } /* if: good */
1251             } /* if: i2 >= 0 */
1252             }} /* Close p */
1253             #line 267 "lib/PDL/Image2D.pd"
1254             } /* if: j2 >= 0 */
1255             }} /* Close q */
1256             #line 269 "lib/PDL/Image2D.pd"
1257             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1258             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1259             }} /* Close n */}} /* Close m */
1260             #line 272 "lib/PDL/Image2D.pd"
1261             PDL_BROADCASTLOOP_END_conv2d_readdata
1262             #line 1263 "lib/PDL/Image2D-pp-conv2d.c"
1263             }
1264 0           } break;
1265 0           case PDL_CF: {
1266 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_CFloat,G,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1267 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1268 0           int m_size = __privtrans->ind_sizes[2];
1269 0           int n_size = __privtrans->ind_sizes[3];
1270 0           int p_size = __privtrans->ind_sizes[4];
1271 0           int q_size = __privtrans->ind_sizes[5];
1272            
1273 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1274 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
1275              
1276 0           poff = p_size/2; mapi += p_size-1;
1277 0           qoff = q_size/2; mapj += q_size-1;
1278 0 0         for ( i = 1-p_size; i< m_size; i++) {
1279 0           i2 = i + poff;
1280 0           switch (opt) {
1281 0           case 1: /* REFLECT */
1282 0 0         if (i2<0)
1283 0           i2 = -i2-1;
1284 0 0         else if (i2 >= m_size)
1285 0           i2 = 2*m_size-(i2+1);
1286 0           break;
1287 0           case 2: /* TRUNCATE */
1288 0 0         if (i2<0 || i2 >= m_size)
    0          
1289 0           i2 = -1;
1290 0           break;
1291 0           case 3: /* REPLICATE */
1292 0 0         if (i2<0)
1293 0           i2 = 0;
1294 0 0         if (i2 >= m_size)
1295 0           i2 = m_size-1;
1296 0           break;
1297 0           default:
1298 0 0         REALMOD(i2,m_size);
    0          
1299             }
1300 0           mapi[i] = i2;
1301             }
1302 0 0         for ( j = 1-q_size; j< n_size; j++) {
1303 0           j2 = j + qoff;
1304 0           switch (opt) {
1305 0           case 1: /* REFLECT */
1306 0 0         if (j2<0)
1307 0           j2 = -j2-1;
1308 0 0         else if (j2 >= n_size)
1309 0           j2 = 2*n_size-(j2+1);
1310 0           break;
1311 0           case 2: /* TRUNCATE */
1312 0 0         if (j2<0 || j2 >= n_size)
    0          
1313 0           j2 = -1;
1314 0           break;
1315 0           case 3: /* REPLICATE */
1316 0 0         if (j2<0)
1317 0           j2 = 0;
1318 0 0         if (j2 >= n_size)
1319 0           j2 = n_size-1;
1320 0           break;
1321 0           default:
1322 0 0         REALMOD(j2,n_size);
    0          
1323             }
1324 0           mapj[j] = j2;
1325             }
1326              
1327             #line 251 "lib/PDL/Image2D.pd"
1328             PDL_BROADCASTLOOP_START_conv2d_readdata
1329             #line 252 "lib/PDL/Image2D.pd"
1330             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1331             #line 253 "lib/PDL/Image2D.pd"
1332             PDL_IF_BAD(int flag = 0;,)
1333             PDL_CLDouble tmp = 0;
1334             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1335             #line 256 "lib/PDL/Image2D.pd"
1336             j2 = mapj[n-q];
1337             if (j2 >= 0) {
1338             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1339             #line 259 "lib/PDL/Image2D.pd"
1340             i2 = mapi[m-p];
1341             if (i2 >= 0) {
1342             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,G,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,G,kern_badval_isnan) ),) {
1343             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1344             PDL_IF_BAD(flag = 1;,)
1345             } /* if: good */
1346             } /* if: i2 >= 0 */
1347             }} /* Close p */
1348             #line 267 "lib/PDL/Image2D.pd"
1349             } /* if: j2 >= 0 */
1350             }} /* Close q */
1351             #line 269 "lib/PDL/Image2D.pd"
1352             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1353             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1354             }} /* Close n */}} /* Close m */
1355             #line 272 "lib/PDL/Image2D.pd"
1356             PDL_BROADCASTLOOP_END_conv2d_readdata
1357             #line 1358 "lib/PDL/Image2D-pp-conv2d.c"
1358             }
1359 0           } break;
1360 0           case PDL_CD: {
1361 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_CDouble,C,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1362 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1363 0           int m_size = __privtrans->ind_sizes[2];
1364 0           int n_size = __privtrans->ind_sizes[3];
1365 0           int p_size = __privtrans->ind_sizes[4];
1366 0           int q_size = __privtrans->ind_sizes[5];
1367            
1368 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1369 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
1370              
1371 0           poff = p_size/2; mapi += p_size-1;
1372 0           qoff = q_size/2; mapj += q_size-1;
1373 0 0         for ( i = 1-p_size; i< m_size; i++) {
1374 0           i2 = i + poff;
1375 0           switch (opt) {
1376 0           case 1: /* REFLECT */
1377 0 0         if (i2<0)
1378 0           i2 = -i2-1;
1379 0 0         else if (i2 >= m_size)
1380 0           i2 = 2*m_size-(i2+1);
1381 0           break;
1382 0           case 2: /* TRUNCATE */
1383 0 0         if (i2<0 || i2 >= m_size)
    0          
1384 0           i2 = -1;
1385 0           break;
1386 0           case 3: /* REPLICATE */
1387 0 0         if (i2<0)
1388 0           i2 = 0;
1389 0 0         if (i2 >= m_size)
1390 0           i2 = m_size-1;
1391 0           break;
1392 0           default:
1393 0 0         REALMOD(i2,m_size);
    0          
1394             }
1395 0           mapi[i] = i2;
1396             }
1397 0 0         for ( j = 1-q_size; j< n_size; j++) {
1398 0           j2 = j + qoff;
1399 0           switch (opt) {
1400 0           case 1: /* REFLECT */
1401 0 0         if (j2<0)
1402 0           j2 = -j2-1;
1403 0 0         else if (j2 >= n_size)
1404 0           j2 = 2*n_size-(j2+1);
1405 0           break;
1406 0           case 2: /* TRUNCATE */
1407 0 0         if (j2<0 || j2 >= n_size)
    0          
1408 0           j2 = -1;
1409 0           break;
1410 0           case 3: /* REPLICATE */
1411 0 0         if (j2<0)
1412 0           j2 = 0;
1413 0 0         if (j2 >= n_size)
1414 0           j2 = n_size-1;
1415 0           break;
1416 0           default:
1417 0 0         REALMOD(j2,n_size);
    0          
1418             }
1419 0           mapj[j] = j2;
1420             }
1421              
1422             #line 251 "lib/PDL/Image2D.pd"
1423             PDL_BROADCASTLOOP_START_conv2d_readdata
1424             #line 252 "lib/PDL/Image2D.pd"
1425             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1426             #line 253 "lib/PDL/Image2D.pd"
1427             PDL_IF_BAD(int flag = 0;,)
1428             PDL_CLDouble tmp = 0;
1429             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1430             #line 256 "lib/PDL/Image2D.pd"
1431             j2 = mapj[n-q];
1432             if (j2 >= 0) {
1433             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1434             #line 259 "lib/PDL/Image2D.pd"
1435             i2 = mapi[m-p];
1436             if (i2 >= 0) {
1437             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,C,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,C,kern_badval_isnan) ),) {
1438             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1439             PDL_IF_BAD(flag = 1;,)
1440             } /* if: good */
1441             } /* if: i2 >= 0 */
1442             }} /* Close p */
1443             #line 267 "lib/PDL/Image2D.pd"
1444             } /* if: j2 >= 0 */
1445             }} /* Close q */
1446             #line 269 "lib/PDL/Image2D.pd"
1447             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1448             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1449             }} /* Close n */}} /* Close m */
1450             #line 272 "lib/PDL/Image2D.pd"
1451             PDL_BROADCASTLOOP_END_conv2d_readdata
1452             #line 1453 "lib/PDL/Image2D-pp-conv2d.c"
1453             }
1454 0           } break;
1455 0           case PDL_CLD: {
1456 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_CLDouble,H,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1457 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1458 0           int m_size = __privtrans->ind_sizes[2];
1459 0           int n_size = __privtrans->ind_sizes[3];
1460 0           int p_size = __privtrans->ind_sizes[4];
1461 0           int q_size = __privtrans->ind_sizes[5];
1462            
1463 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1464 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
1465              
1466 0           poff = p_size/2; mapi += p_size-1;
1467 0           qoff = q_size/2; mapj += q_size-1;
1468 0 0         for ( i = 1-p_size; i< m_size; i++) {
1469 0           i2 = i + poff;
1470 0           switch (opt) {
1471 0           case 1: /* REFLECT */
1472 0 0         if (i2<0)
1473 0           i2 = -i2-1;
1474 0 0         else if (i2 >= m_size)
1475 0           i2 = 2*m_size-(i2+1);
1476 0           break;
1477 0           case 2: /* TRUNCATE */
1478 0 0         if (i2<0 || i2 >= m_size)
    0          
1479 0           i2 = -1;
1480 0           break;
1481 0           case 3: /* REPLICATE */
1482 0 0         if (i2<0)
1483 0           i2 = 0;
1484 0 0         if (i2 >= m_size)
1485 0           i2 = m_size-1;
1486 0           break;
1487 0           default:
1488 0 0         REALMOD(i2,m_size);
    0          
1489             }
1490 0           mapi[i] = i2;
1491             }
1492 0 0         for ( j = 1-q_size; j< n_size; j++) {
1493 0           j2 = j + qoff;
1494 0           switch (opt) {
1495 0           case 1: /* REFLECT */
1496 0 0         if (j2<0)
1497 0           j2 = -j2-1;
1498 0 0         else if (j2 >= n_size)
1499 0           j2 = 2*n_size-(j2+1);
1500 0           break;
1501 0           case 2: /* TRUNCATE */
1502 0 0         if (j2<0 || j2 >= n_size)
    0          
1503 0           j2 = -1;
1504 0           break;
1505 0           case 3: /* REPLICATE */
1506 0 0         if (j2<0)
1507 0           j2 = 0;
1508 0 0         if (j2 >= n_size)
1509 0           j2 = n_size-1;
1510 0           break;
1511 0           default:
1512 0 0         REALMOD(j2,n_size);
    0          
1513             }
1514 0           mapj[j] = j2;
1515             }
1516              
1517             #line 251 "lib/PDL/Image2D.pd"
1518             PDL_BROADCASTLOOP_START_conv2d_readdata
1519             #line 252 "lib/PDL/Image2D.pd"
1520             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1521             #line 253 "lib/PDL/Image2D.pd"
1522             PDL_IF_BAD(int flag = 0;,)
1523             PDL_CLDouble tmp = 0;
1524             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1525             #line 256 "lib/PDL/Image2D.pd"
1526             j2 = mapj[n-q];
1527             if (j2 >= 0) {
1528             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1529             #line 259 "lib/PDL/Image2D.pd"
1530             i2 = mapi[m-p];
1531             if (i2 >= 0) {
1532             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,H,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,H,kern_badval_isnan) ),) {
1533             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1534             PDL_IF_BAD(flag = 1;,)
1535             } /* if: good */
1536             } /* if: i2 >= 0 */
1537             }} /* Close p */
1538             #line 267 "lib/PDL/Image2D.pd"
1539             } /* if: j2 >= 0 */
1540             }} /* Close q */
1541             #line 269 "lib/PDL/Image2D.pd"
1542             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1543             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1544             }} /* Close n */}} /* Close m */
1545             #line 272 "lib/PDL/Image2D.pd"
1546             PDL_BROADCASTLOOP_END_conv2d_readdata
1547             #line 1548 "lib/PDL/Image2D-pp-conv2d.c"
1548             }
1549 0           } break;
1550 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in conv2d: unhandled datatype(%d), only handles (ABSULKNPQFDEGCH)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
1551             }
1552             #undef PDL_BAD_CODE
1553             #undef PDL_IF_BAD
1554             } else { /* ** else do 'good' Code ** */
1555             #define PDL_IF_BAD(t,f) f
1556 11           switch (__privtrans->__datatype) { /* Start generic switch */
1557 0           case PDL_SB: {
1558 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_SByte,A,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1559 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1560 0           int m_size = __privtrans->ind_sizes[2];
1561 0           int n_size = __privtrans->ind_sizes[3];
1562 0           int p_size = __privtrans->ind_sizes[4];
1563 0           int q_size = __privtrans->ind_sizes[5];
1564            
1565 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1566 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
1567              
1568 0           poff = p_size/2; mapi += p_size-1;
1569 0           qoff = q_size/2; mapj += q_size-1;
1570 0 0         for ( i = 1-p_size; i< m_size; i++) {
1571 0           i2 = i + poff;
1572 0           switch (opt) {
1573 0           case 1: /* REFLECT */
1574 0 0         if (i2<0)
1575 0           i2 = -i2-1;
1576 0 0         else if (i2 >= m_size)
1577 0           i2 = 2*m_size-(i2+1);
1578 0           break;
1579 0           case 2: /* TRUNCATE */
1580 0 0         if (i2<0 || i2 >= m_size)
    0          
1581 0           i2 = -1;
1582 0           break;
1583 0           case 3: /* REPLICATE */
1584 0 0         if (i2<0)
1585 0           i2 = 0;
1586 0 0         if (i2 >= m_size)
1587 0           i2 = m_size-1;
1588 0           break;
1589 0           default:
1590 0 0         REALMOD(i2,m_size);
    0          
1591             }
1592 0           mapi[i] = i2;
1593             }
1594 0 0         for ( j = 1-q_size; j< n_size; j++) {
1595 0           j2 = j + qoff;
1596 0           switch (opt) {
1597 0           case 1: /* REFLECT */
1598 0 0         if (j2<0)
1599 0           j2 = -j2-1;
1600 0 0         else if (j2 >= n_size)
1601 0           j2 = 2*n_size-(j2+1);
1602 0           break;
1603 0           case 2: /* TRUNCATE */
1604 0 0         if (j2<0 || j2 >= n_size)
    0          
1605 0           j2 = -1;
1606 0           break;
1607 0           case 3: /* REPLICATE */
1608 0 0         if (j2<0)
1609 0           j2 = 0;
1610 0 0         if (j2 >= n_size)
1611 0           j2 = n_size-1;
1612 0           break;
1613 0           default:
1614 0 0         REALMOD(j2,n_size);
    0          
1615             }
1616 0           mapj[j] = j2;
1617             }
1618              
1619             #line 251 "lib/PDL/Image2D.pd"
1620             PDL_BROADCASTLOOP_START_conv2d_readdata
1621             #line 252 "lib/PDL/Image2D.pd"
1622             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1623             #line 253 "lib/PDL/Image2D.pd"
1624             PDL_IF_BAD(int flag = 0;,)
1625             PDL_CLDouble tmp = 0;
1626             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1627             #line 256 "lib/PDL/Image2D.pd"
1628             j2 = mapj[n-q];
1629             if (j2 >= 0) {
1630             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1631             #line 259 "lib/PDL/Image2D.pd"
1632             i2 = mapi[m-p];
1633             if (i2 >= 0) {
1634             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,A,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,A,kern_badval_isnan) ),) {
1635             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1636             PDL_IF_BAD(flag = 1;,)
1637             } /* if: good */
1638             } /* if: i2 >= 0 */
1639             }} /* Close p */
1640             #line 267 "lib/PDL/Image2D.pd"
1641             } /* if: j2 >= 0 */
1642             }} /* Close q */
1643             #line 269 "lib/PDL/Image2D.pd"
1644             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1645             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1646             }} /* Close n */}} /* Close m */
1647             #line 272 "lib/PDL/Image2D.pd"
1648             PDL_BROADCASTLOOP_END_conv2d_readdata
1649             #line 1650 "lib/PDL/Image2D-pp-conv2d.c"
1650             }
1651 0           } break;
1652 0           case PDL_B: {
1653 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Byte,B,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1654 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1655 0           int m_size = __privtrans->ind_sizes[2];
1656 0           int n_size = __privtrans->ind_sizes[3];
1657 0           int p_size = __privtrans->ind_sizes[4];
1658 0           int q_size = __privtrans->ind_sizes[5];
1659            
1660 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1661 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
1662              
1663 0           poff = p_size/2; mapi += p_size-1;
1664 0           qoff = q_size/2; mapj += q_size-1;
1665 0 0         for ( i = 1-p_size; i< m_size; i++) {
1666 0           i2 = i + poff;
1667 0           switch (opt) {
1668 0           case 1: /* REFLECT */
1669 0 0         if (i2<0)
1670 0           i2 = -i2-1;
1671 0 0         else if (i2 >= m_size)
1672 0           i2 = 2*m_size-(i2+1);
1673 0           break;
1674 0           case 2: /* TRUNCATE */
1675 0 0         if (i2<0 || i2 >= m_size)
    0          
1676 0           i2 = -1;
1677 0           break;
1678 0           case 3: /* REPLICATE */
1679 0 0         if (i2<0)
1680 0           i2 = 0;
1681 0 0         if (i2 >= m_size)
1682 0           i2 = m_size-1;
1683 0           break;
1684 0           default:
1685 0 0         REALMOD(i2,m_size);
    0          
1686             }
1687 0           mapi[i] = i2;
1688             }
1689 0 0         for ( j = 1-q_size; j< n_size; j++) {
1690 0           j2 = j + qoff;
1691 0           switch (opt) {
1692 0           case 1: /* REFLECT */
1693 0 0         if (j2<0)
1694 0           j2 = -j2-1;
1695 0 0         else if (j2 >= n_size)
1696 0           j2 = 2*n_size-(j2+1);
1697 0           break;
1698 0           case 2: /* TRUNCATE */
1699 0 0         if (j2<0 || j2 >= n_size)
    0          
1700 0           j2 = -1;
1701 0           break;
1702 0           case 3: /* REPLICATE */
1703 0 0         if (j2<0)
1704 0           j2 = 0;
1705 0 0         if (j2 >= n_size)
1706 0           j2 = n_size-1;
1707 0           break;
1708 0           default:
1709 0 0         REALMOD(j2,n_size);
    0          
1710             }
1711 0           mapj[j] = j2;
1712             }
1713              
1714             #line 251 "lib/PDL/Image2D.pd"
1715             PDL_BROADCASTLOOP_START_conv2d_readdata
1716             #line 252 "lib/PDL/Image2D.pd"
1717             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1718             #line 253 "lib/PDL/Image2D.pd"
1719             PDL_IF_BAD(int flag = 0;,)
1720             PDL_CLDouble tmp = 0;
1721             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1722             #line 256 "lib/PDL/Image2D.pd"
1723             j2 = mapj[n-q];
1724             if (j2 >= 0) {
1725             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1726             #line 259 "lib/PDL/Image2D.pd"
1727             i2 = mapi[m-p];
1728             if (i2 >= 0) {
1729             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,B,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,B,kern_badval_isnan) ),) {
1730             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1731             PDL_IF_BAD(flag = 1;,)
1732             } /* if: good */
1733             } /* if: i2 >= 0 */
1734             }} /* Close p */
1735             #line 267 "lib/PDL/Image2D.pd"
1736             } /* if: j2 >= 0 */
1737             }} /* Close q */
1738             #line 269 "lib/PDL/Image2D.pd"
1739             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1740             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1741             }} /* Close n */}} /* Close m */
1742             #line 272 "lib/PDL/Image2D.pd"
1743             PDL_BROADCASTLOOP_END_conv2d_readdata
1744             #line 1745 "lib/PDL/Image2D-pp-conv2d.c"
1745             }
1746 0           } break;
1747 0           case PDL_S: {
1748 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Short,S,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1749 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1750 0           int m_size = __privtrans->ind_sizes[2];
1751 0           int n_size = __privtrans->ind_sizes[3];
1752 0           int p_size = __privtrans->ind_sizes[4];
1753 0           int q_size = __privtrans->ind_sizes[5];
1754            
1755 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1756 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
1757              
1758 0           poff = p_size/2; mapi += p_size-1;
1759 0           qoff = q_size/2; mapj += q_size-1;
1760 0 0         for ( i = 1-p_size; i< m_size; i++) {
1761 0           i2 = i + poff;
1762 0           switch (opt) {
1763 0           case 1: /* REFLECT */
1764 0 0         if (i2<0)
1765 0           i2 = -i2-1;
1766 0 0         else if (i2 >= m_size)
1767 0           i2 = 2*m_size-(i2+1);
1768 0           break;
1769 0           case 2: /* TRUNCATE */
1770 0 0         if (i2<0 || i2 >= m_size)
    0          
1771 0           i2 = -1;
1772 0           break;
1773 0           case 3: /* REPLICATE */
1774 0 0         if (i2<0)
1775 0           i2 = 0;
1776 0 0         if (i2 >= m_size)
1777 0           i2 = m_size-1;
1778 0           break;
1779 0           default:
1780 0 0         REALMOD(i2,m_size);
    0          
1781             }
1782 0           mapi[i] = i2;
1783             }
1784 0 0         for ( j = 1-q_size; j< n_size; j++) {
1785 0           j2 = j + qoff;
1786 0           switch (opt) {
1787 0           case 1: /* REFLECT */
1788 0 0         if (j2<0)
1789 0           j2 = -j2-1;
1790 0 0         else if (j2 >= n_size)
1791 0           j2 = 2*n_size-(j2+1);
1792 0           break;
1793 0           case 2: /* TRUNCATE */
1794 0 0         if (j2<0 || j2 >= n_size)
    0          
1795 0           j2 = -1;
1796 0           break;
1797 0           case 3: /* REPLICATE */
1798 0 0         if (j2<0)
1799 0           j2 = 0;
1800 0 0         if (j2 >= n_size)
1801 0           j2 = n_size-1;
1802 0           break;
1803 0           default:
1804 0 0         REALMOD(j2,n_size);
    0          
1805             }
1806 0           mapj[j] = j2;
1807             }
1808              
1809             #line 251 "lib/PDL/Image2D.pd"
1810             PDL_BROADCASTLOOP_START_conv2d_readdata
1811             #line 252 "lib/PDL/Image2D.pd"
1812             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1813             #line 253 "lib/PDL/Image2D.pd"
1814             PDL_IF_BAD(int flag = 0;,)
1815             PDL_CLDouble tmp = 0;
1816             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1817             #line 256 "lib/PDL/Image2D.pd"
1818             j2 = mapj[n-q];
1819             if (j2 >= 0) {
1820             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1821             #line 259 "lib/PDL/Image2D.pd"
1822             i2 = mapi[m-p];
1823             if (i2 >= 0) {
1824             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,S,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,S,kern_badval_isnan) ),) {
1825             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1826             PDL_IF_BAD(flag = 1;,)
1827             } /* if: good */
1828             } /* if: i2 >= 0 */
1829             }} /* Close p */
1830             #line 267 "lib/PDL/Image2D.pd"
1831             } /* if: j2 >= 0 */
1832             }} /* Close q */
1833             #line 269 "lib/PDL/Image2D.pd"
1834             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1835             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1836             }} /* Close n */}} /* Close m */
1837             #line 272 "lib/PDL/Image2D.pd"
1838             PDL_BROADCASTLOOP_END_conv2d_readdata
1839             #line 1840 "lib/PDL/Image2D-pp-conv2d.c"
1840             }
1841 0           } break;
1842 0           case PDL_US: {
1843 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Ushort,U,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1844 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1845 0           int m_size = __privtrans->ind_sizes[2];
1846 0           int n_size = __privtrans->ind_sizes[3];
1847 0           int p_size = __privtrans->ind_sizes[4];
1848 0           int q_size = __privtrans->ind_sizes[5];
1849            
1850 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1851 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
1852              
1853 0           poff = p_size/2; mapi += p_size-1;
1854 0           qoff = q_size/2; mapj += q_size-1;
1855 0 0         for ( i = 1-p_size; i< m_size; i++) {
1856 0           i2 = i + poff;
1857 0           switch (opt) {
1858 0           case 1: /* REFLECT */
1859 0 0         if (i2<0)
1860 0           i2 = -i2-1;
1861 0 0         else if (i2 >= m_size)
1862 0           i2 = 2*m_size-(i2+1);
1863 0           break;
1864 0           case 2: /* TRUNCATE */
1865 0 0         if (i2<0 || i2 >= m_size)
    0          
1866 0           i2 = -1;
1867 0           break;
1868 0           case 3: /* REPLICATE */
1869 0 0         if (i2<0)
1870 0           i2 = 0;
1871 0 0         if (i2 >= m_size)
1872 0           i2 = m_size-1;
1873 0           break;
1874 0           default:
1875 0 0         REALMOD(i2,m_size);
    0          
1876             }
1877 0           mapi[i] = i2;
1878             }
1879 0 0         for ( j = 1-q_size; j< n_size; j++) {
1880 0           j2 = j + qoff;
1881 0           switch (opt) {
1882 0           case 1: /* REFLECT */
1883 0 0         if (j2<0)
1884 0           j2 = -j2-1;
1885 0 0         else if (j2 >= n_size)
1886 0           j2 = 2*n_size-(j2+1);
1887 0           break;
1888 0           case 2: /* TRUNCATE */
1889 0 0         if (j2<0 || j2 >= n_size)
    0          
1890 0           j2 = -1;
1891 0           break;
1892 0           case 3: /* REPLICATE */
1893 0 0         if (j2<0)
1894 0           j2 = 0;
1895 0 0         if (j2 >= n_size)
1896 0           j2 = n_size-1;
1897 0           break;
1898 0           default:
1899 0 0         REALMOD(j2,n_size);
    0          
1900             }
1901 0           mapj[j] = j2;
1902             }
1903              
1904             #line 251 "lib/PDL/Image2D.pd"
1905             PDL_BROADCASTLOOP_START_conv2d_readdata
1906             #line 252 "lib/PDL/Image2D.pd"
1907             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
1908             #line 253 "lib/PDL/Image2D.pd"
1909             PDL_IF_BAD(int flag = 0;,)
1910             PDL_CLDouble tmp = 0;
1911             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1912             #line 256 "lib/PDL/Image2D.pd"
1913             j2 = mapj[n-q];
1914             if (j2 >= 0) {
1915             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1916             #line 259 "lib/PDL/Image2D.pd"
1917             i2 = mapi[m-p];
1918             if (i2 >= 0) {
1919             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,U,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,U,kern_badval_isnan) ),) {
1920             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
1921             PDL_IF_BAD(flag = 1;,)
1922             } /* if: good */
1923             } /* if: i2 >= 0 */
1924             }} /* Close p */
1925             #line 267 "lib/PDL/Image2D.pd"
1926             } /* if: j2 >= 0 */
1927             }} /* Close q */
1928             #line 269 "lib/PDL/Image2D.pd"
1929             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
1930             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
1931             }} /* Close n */}} /* Close m */
1932             #line 272 "lib/PDL/Image2D.pd"
1933             PDL_BROADCASTLOOP_END_conv2d_readdata
1934             #line 1935 "lib/PDL/Image2D-pp-conv2d.c"
1935             }
1936 0           } break;
1937 0           case PDL_L: {
1938 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Long,L,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1939 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1940 0           int m_size = __privtrans->ind_sizes[2];
1941 0           int n_size = __privtrans->ind_sizes[3];
1942 0           int p_size = __privtrans->ind_sizes[4];
1943 0           int q_size = __privtrans->ind_sizes[5];
1944            
1945 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1946 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
1947              
1948 0           poff = p_size/2; mapi += p_size-1;
1949 0           qoff = q_size/2; mapj += q_size-1;
1950 0 0         for ( i = 1-p_size; i< m_size; i++) {
1951 0           i2 = i + poff;
1952 0           switch (opt) {
1953 0           case 1: /* REFLECT */
1954 0 0         if (i2<0)
1955 0           i2 = -i2-1;
1956 0 0         else if (i2 >= m_size)
1957 0           i2 = 2*m_size-(i2+1);
1958 0           break;
1959 0           case 2: /* TRUNCATE */
1960 0 0         if (i2<0 || i2 >= m_size)
    0          
1961 0           i2 = -1;
1962 0           break;
1963 0           case 3: /* REPLICATE */
1964 0 0         if (i2<0)
1965 0           i2 = 0;
1966 0 0         if (i2 >= m_size)
1967 0           i2 = m_size-1;
1968 0           break;
1969 0           default:
1970 0 0         REALMOD(i2,m_size);
    0          
1971             }
1972 0           mapi[i] = i2;
1973             }
1974 0 0         for ( j = 1-q_size; j< n_size; j++) {
1975 0           j2 = j + qoff;
1976 0           switch (opt) {
1977 0           case 1: /* REFLECT */
1978 0 0         if (j2<0)
1979 0           j2 = -j2-1;
1980 0 0         else if (j2 >= n_size)
1981 0           j2 = 2*n_size-(j2+1);
1982 0           break;
1983 0           case 2: /* TRUNCATE */
1984 0 0         if (j2<0 || j2 >= n_size)
    0          
1985 0           j2 = -1;
1986 0           break;
1987 0           case 3: /* REPLICATE */
1988 0 0         if (j2<0)
1989 0           j2 = 0;
1990 0 0         if (j2 >= n_size)
1991 0           j2 = n_size-1;
1992 0           break;
1993 0           default:
1994 0 0         REALMOD(j2,n_size);
    0          
1995             }
1996 0           mapj[j] = j2;
1997             }
1998              
1999             #line 251 "lib/PDL/Image2D.pd"
2000             PDL_BROADCASTLOOP_START_conv2d_readdata
2001             #line 252 "lib/PDL/Image2D.pd"
2002             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2003             #line 253 "lib/PDL/Image2D.pd"
2004             PDL_IF_BAD(int flag = 0;,)
2005             PDL_CLDouble tmp = 0;
2006             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2007             #line 256 "lib/PDL/Image2D.pd"
2008             j2 = mapj[n-q];
2009             if (j2 >= 0) {
2010             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2011             #line 259 "lib/PDL/Image2D.pd"
2012             i2 = mapi[m-p];
2013             if (i2 >= 0) {
2014             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,L,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,L,kern_badval_isnan) ),) {
2015             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2016             PDL_IF_BAD(flag = 1;,)
2017             } /* if: good */
2018             } /* if: i2 >= 0 */
2019             }} /* Close p */
2020             #line 267 "lib/PDL/Image2D.pd"
2021             } /* if: j2 >= 0 */
2022             }} /* Close q */
2023             #line 269 "lib/PDL/Image2D.pd"
2024             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2025             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2026             }} /* Close n */}} /* Close m */
2027             #line 272 "lib/PDL/Image2D.pd"
2028             PDL_BROADCASTLOOP_END_conv2d_readdata
2029             #line 2030 "lib/PDL/Image2D-pp-conv2d.c"
2030             }
2031 0           } break;
2032 0           case PDL_UL: {
2033 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_ULong,K,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2034 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2035 0           int m_size = __privtrans->ind_sizes[2];
2036 0           int n_size = __privtrans->ind_sizes[3];
2037 0           int p_size = __privtrans->ind_sizes[4];
2038 0           int q_size = __privtrans->ind_sizes[5];
2039            
2040 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2041 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
2042              
2043 0           poff = p_size/2; mapi += p_size-1;
2044 0           qoff = q_size/2; mapj += q_size-1;
2045 0 0         for ( i = 1-p_size; i< m_size; i++) {
2046 0           i2 = i + poff;
2047 0           switch (opt) {
2048 0           case 1: /* REFLECT */
2049 0 0         if (i2<0)
2050 0           i2 = -i2-1;
2051 0 0         else if (i2 >= m_size)
2052 0           i2 = 2*m_size-(i2+1);
2053 0           break;
2054 0           case 2: /* TRUNCATE */
2055 0 0         if (i2<0 || i2 >= m_size)
    0          
2056 0           i2 = -1;
2057 0           break;
2058 0           case 3: /* REPLICATE */
2059 0 0         if (i2<0)
2060 0           i2 = 0;
2061 0 0         if (i2 >= m_size)
2062 0           i2 = m_size-1;
2063 0           break;
2064 0           default:
2065 0 0         REALMOD(i2,m_size);
    0          
2066             }
2067 0           mapi[i] = i2;
2068             }
2069 0 0         for ( j = 1-q_size; j< n_size; j++) {
2070 0           j2 = j + qoff;
2071 0           switch (opt) {
2072 0           case 1: /* REFLECT */
2073 0 0         if (j2<0)
2074 0           j2 = -j2-1;
2075 0 0         else if (j2 >= n_size)
2076 0           j2 = 2*n_size-(j2+1);
2077 0           break;
2078 0           case 2: /* TRUNCATE */
2079 0 0         if (j2<0 || j2 >= n_size)
    0          
2080 0           j2 = -1;
2081 0           break;
2082 0           case 3: /* REPLICATE */
2083 0 0         if (j2<0)
2084 0           j2 = 0;
2085 0 0         if (j2 >= n_size)
2086 0           j2 = n_size-1;
2087 0           break;
2088 0           default:
2089 0 0         REALMOD(j2,n_size);
    0          
2090             }
2091 0           mapj[j] = j2;
2092             }
2093              
2094             #line 251 "lib/PDL/Image2D.pd"
2095             PDL_BROADCASTLOOP_START_conv2d_readdata
2096             #line 252 "lib/PDL/Image2D.pd"
2097             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2098             #line 253 "lib/PDL/Image2D.pd"
2099             PDL_IF_BAD(int flag = 0;,)
2100             PDL_CLDouble tmp = 0;
2101             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2102             #line 256 "lib/PDL/Image2D.pd"
2103             j2 = mapj[n-q];
2104             if (j2 >= 0) {
2105             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2106             #line 259 "lib/PDL/Image2D.pd"
2107             i2 = mapi[m-p];
2108             if (i2 >= 0) {
2109             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,K,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,K,kern_badval_isnan) ),) {
2110             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2111             PDL_IF_BAD(flag = 1;,)
2112             } /* if: good */
2113             } /* if: i2 >= 0 */
2114             }} /* Close p */
2115             #line 267 "lib/PDL/Image2D.pd"
2116             } /* if: j2 >= 0 */
2117             }} /* Close q */
2118             #line 269 "lib/PDL/Image2D.pd"
2119             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2120             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2121             }} /* Close n */}} /* Close m */
2122             #line 272 "lib/PDL/Image2D.pd"
2123             PDL_BROADCASTLOOP_END_conv2d_readdata
2124             #line 2125 "lib/PDL/Image2D-pp-conv2d.c"
2125             }
2126 0           } break;
2127 0           case PDL_IND: {
2128 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Indx,N,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2129 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2130 0           int m_size = __privtrans->ind_sizes[2];
2131 0           int n_size = __privtrans->ind_sizes[3];
2132 0           int p_size = __privtrans->ind_sizes[4];
2133 0           int q_size = __privtrans->ind_sizes[5];
2134            
2135 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2136 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
2137              
2138 0           poff = p_size/2; mapi += p_size-1;
2139 0           qoff = q_size/2; mapj += q_size-1;
2140 0 0         for ( i = 1-p_size; i< m_size; i++) {
2141 0           i2 = i + poff;
2142 0           switch (opt) {
2143 0           case 1: /* REFLECT */
2144 0 0         if (i2<0)
2145 0           i2 = -i2-1;
2146 0 0         else if (i2 >= m_size)
2147 0           i2 = 2*m_size-(i2+1);
2148 0           break;
2149 0           case 2: /* TRUNCATE */
2150 0 0         if (i2<0 || i2 >= m_size)
    0          
2151 0           i2 = -1;
2152 0           break;
2153 0           case 3: /* REPLICATE */
2154 0 0         if (i2<0)
2155 0           i2 = 0;
2156 0 0         if (i2 >= m_size)
2157 0           i2 = m_size-1;
2158 0           break;
2159 0           default:
2160 0 0         REALMOD(i2,m_size);
    0          
2161             }
2162 0           mapi[i] = i2;
2163             }
2164 0 0         for ( j = 1-q_size; j< n_size; j++) {
2165 0           j2 = j + qoff;
2166 0           switch (opt) {
2167 0           case 1: /* REFLECT */
2168 0 0         if (j2<0)
2169 0           j2 = -j2-1;
2170 0 0         else if (j2 >= n_size)
2171 0           j2 = 2*n_size-(j2+1);
2172 0           break;
2173 0           case 2: /* TRUNCATE */
2174 0 0         if (j2<0 || j2 >= n_size)
    0          
2175 0           j2 = -1;
2176 0           break;
2177 0           case 3: /* REPLICATE */
2178 0 0         if (j2<0)
2179 0           j2 = 0;
2180 0 0         if (j2 >= n_size)
2181 0           j2 = n_size-1;
2182 0           break;
2183 0           default:
2184 0 0         REALMOD(j2,n_size);
    0          
2185             }
2186 0           mapj[j] = j2;
2187             }
2188              
2189             #line 251 "lib/PDL/Image2D.pd"
2190             PDL_BROADCASTLOOP_START_conv2d_readdata
2191             #line 252 "lib/PDL/Image2D.pd"
2192             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2193             #line 253 "lib/PDL/Image2D.pd"
2194             PDL_IF_BAD(int flag = 0;,)
2195             PDL_CLDouble tmp = 0;
2196             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2197             #line 256 "lib/PDL/Image2D.pd"
2198             j2 = mapj[n-q];
2199             if (j2 >= 0) {
2200             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2201             #line 259 "lib/PDL/Image2D.pd"
2202             i2 = mapi[m-p];
2203             if (i2 >= 0) {
2204             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,N,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,N,kern_badval_isnan) ),) {
2205             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2206             PDL_IF_BAD(flag = 1;,)
2207             } /* if: good */
2208             } /* if: i2 >= 0 */
2209             }} /* Close p */
2210             #line 267 "lib/PDL/Image2D.pd"
2211             } /* if: j2 >= 0 */
2212             }} /* Close q */
2213             #line 269 "lib/PDL/Image2D.pd"
2214             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2215             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2216             }} /* Close n */}} /* Close m */
2217             #line 272 "lib/PDL/Image2D.pd"
2218             PDL_BROADCASTLOOP_END_conv2d_readdata
2219             #line 2220 "lib/PDL/Image2D-pp-conv2d.c"
2220             }
2221 0           } break;
2222 0           case PDL_ULL: {
2223 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_ULongLong,P,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2224 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2225 0           int m_size = __privtrans->ind_sizes[2];
2226 0           int n_size = __privtrans->ind_sizes[3];
2227 0           int p_size = __privtrans->ind_sizes[4];
2228 0           int q_size = __privtrans->ind_sizes[5];
2229            
2230 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2231 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
2232              
2233 0           poff = p_size/2; mapi += p_size-1;
2234 0           qoff = q_size/2; mapj += q_size-1;
2235 0 0         for ( i = 1-p_size; i< m_size; i++) {
2236 0           i2 = i + poff;
2237 0           switch (opt) {
2238 0           case 1: /* REFLECT */
2239 0 0         if (i2<0)
2240 0           i2 = -i2-1;
2241 0 0         else if (i2 >= m_size)
2242 0           i2 = 2*m_size-(i2+1);
2243 0           break;
2244 0           case 2: /* TRUNCATE */
2245 0 0         if (i2<0 || i2 >= m_size)
    0          
2246 0           i2 = -1;
2247 0           break;
2248 0           case 3: /* REPLICATE */
2249 0 0         if (i2<0)
2250 0           i2 = 0;
2251 0 0         if (i2 >= m_size)
2252 0           i2 = m_size-1;
2253 0           break;
2254 0           default:
2255 0 0         REALMOD(i2,m_size);
    0          
2256             }
2257 0           mapi[i] = i2;
2258             }
2259 0 0         for ( j = 1-q_size; j< n_size; j++) {
2260 0           j2 = j + qoff;
2261 0           switch (opt) {
2262 0           case 1: /* REFLECT */
2263 0 0         if (j2<0)
2264 0           j2 = -j2-1;
2265 0 0         else if (j2 >= n_size)
2266 0           j2 = 2*n_size-(j2+1);
2267 0           break;
2268 0           case 2: /* TRUNCATE */
2269 0 0         if (j2<0 || j2 >= n_size)
    0          
2270 0           j2 = -1;
2271 0           break;
2272 0           case 3: /* REPLICATE */
2273 0 0         if (j2<0)
2274 0           j2 = 0;
2275 0 0         if (j2 >= n_size)
2276 0           j2 = n_size-1;
2277 0           break;
2278 0           default:
2279 0 0         REALMOD(j2,n_size);
    0          
2280             }
2281 0           mapj[j] = j2;
2282             }
2283              
2284             #line 251 "lib/PDL/Image2D.pd"
2285             PDL_BROADCASTLOOP_START_conv2d_readdata
2286             #line 252 "lib/PDL/Image2D.pd"
2287             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2288             #line 253 "lib/PDL/Image2D.pd"
2289             PDL_IF_BAD(int flag = 0;,)
2290             PDL_CLDouble tmp = 0;
2291             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2292             #line 256 "lib/PDL/Image2D.pd"
2293             j2 = mapj[n-q];
2294             if (j2 >= 0) {
2295             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2296             #line 259 "lib/PDL/Image2D.pd"
2297             i2 = mapi[m-p];
2298             if (i2 >= 0) {
2299             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,P,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,P,kern_badval_isnan) ),) {
2300             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2301             PDL_IF_BAD(flag = 1;,)
2302             } /* if: good */
2303             } /* if: i2 >= 0 */
2304             }} /* Close p */
2305             #line 267 "lib/PDL/Image2D.pd"
2306             } /* if: j2 >= 0 */
2307             }} /* Close q */
2308             #line 269 "lib/PDL/Image2D.pd"
2309             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2310             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2311             }} /* Close n */}} /* Close m */
2312             #line 272 "lib/PDL/Image2D.pd"
2313             PDL_BROADCASTLOOP_END_conv2d_readdata
2314             #line 2315 "lib/PDL/Image2D-pp-conv2d.c"
2315             }
2316 0           } break;
2317 0           case PDL_LL: {
2318 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_LongLong,Q,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2319 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2320 0           int m_size = __privtrans->ind_sizes[2];
2321 0           int n_size = __privtrans->ind_sizes[3];
2322 0           int p_size = __privtrans->ind_sizes[4];
2323 0           int q_size = __privtrans->ind_sizes[5];
2324            
2325 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2326 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
2327              
2328 0           poff = p_size/2; mapi += p_size-1;
2329 0           qoff = q_size/2; mapj += q_size-1;
2330 0 0         for ( i = 1-p_size; i< m_size; i++) {
2331 0           i2 = i + poff;
2332 0           switch (opt) {
2333 0           case 1: /* REFLECT */
2334 0 0         if (i2<0)
2335 0           i2 = -i2-1;
2336 0 0         else if (i2 >= m_size)
2337 0           i2 = 2*m_size-(i2+1);
2338 0           break;
2339 0           case 2: /* TRUNCATE */
2340 0 0         if (i2<0 || i2 >= m_size)
    0          
2341 0           i2 = -1;
2342 0           break;
2343 0           case 3: /* REPLICATE */
2344 0 0         if (i2<0)
2345 0           i2 = 0;
2346 0 0         if (i2 >= m_size)
2347 0           i2 = m_size-1;
2348 0           break;
2349 0           default:
2350 0 0         REALMOD(i2,m_size);
    0          
2351             }
2352 0           mapi[i] = i2;
2353             }
2354 0 0         for ( j = 1-q_size; j< n_size; j++) {
2355 0           j2 = j + qoff;
2356 0           switch (opt) {
2357 0           case 1: /* REFLECT */
2358 0 0         if (j2<0)
2359 0           j2 = -j2-1;
2360 0 0         else if (j2 >= n_size)
2361 0           j2 = 2*n_size-(j2+1);
2362 0           break;
2363 0           case 2: /* TRUNCATE */
2364 0 0         if (j2<0 || j2 >= n_size)
    0          
2365 0           j2 = -1;
2366 0           break;
2367 0           case 3: /* REPLICATE */
2368 0 0         if (j2<0)
2369 0           j2 = 0;
2370 0 0         if (j2 >= n_size)
2371 0           j2 = n_size-1;
2372 0           break;
2373 0           default:
2374 0 0         REALMOD(j2,n_size);
    0          
2375             }
2376 0           mapj[j] = j2;
2377             }
2378              
2379             #line 251 "lib/PDL/Image2D.pd"
2380             PDL_BROADCASTLOOP_START_conv2d_readdata
2381             #line 252 "lib/PDL/Image2D.pd"
2382             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2383             #line 253 "lib/PDL/Image2D.pd"
2384             PDL_IF_BAD(int flag = 0;,)
2385             PDL_CLDouble tmp = 0;
2386             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2387             #line 256 "lib/PDL/Image2D.pd"
2388             j2 = mapj[n-q];
2389             if (j2 >= 0) {
2390             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2391             #line 259 "lib/PDL/Image2D.pd"
2392             i2 = mapi[m-p];
2393             if (i2 >= 0) {
2394             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,Q,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,Q,kern_badval_isnan) ),) {
2395             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2396             PDL_IF_BAD(flag = 1;,)
2397             } /* if: good */
2398             } /* if: i2 >= 0 */
2399             }} /* Close p */
2400             #line 267 "lib/PDL/Image2D.pd"
2401             } /* if: j2 >= 0 */
2402             }} /* Close q */
2403             #line 269 "lib/PDL/Image2D.pd"
2404             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2405             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2406             }} /* Close n */}} /* Close m */
2407             #line 272 "lib/PDL/Image2D.pd"
2408             PDL_BROADCASTLOOP_END_conv2d_readdata
2409             #line 2410 "lib/PDL/Image2D-pp-conv2d.c"
2410             }
2411 0           } break;
2412 0           case PDL_F: {
2413 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_Float,F,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2414 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2415 0           int m_size = __privtrans->ind_sizes[2];
2416 0           int n_size = __privtrans->ind_sizes[3];
2417 0           int p_size = __privtrans->ind_sizes[4];
2418 0           int q_size = __privtrans->ind_sizes[5];
2419            
2420 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2421 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
2422              
2423 0           poff = p_size/2; mapi += p_size-1;
2424 0           qoff = q_size/2; mapj += q_size-1;
2425 0 0         for ( i = 1-p_size; i< m_size; i++) {
2426 0           i2 = i + poff;
2427 0           switch (opt) {
2428 0           case 1: /* REFLECT */
2429 0 0         if (i2<0)
2430 0           i2 = -i2-1;
2431 0 0         else if (i2 >= m_size)
2432 0           i2 = 2*m_size-(i2+1);
2433 0           break;
2434 0           case 2: /* TRUNCATE */
2435 0 0         if (i2<0 || i2 >= m_size)
    0          
2436 0           i2 = -1;
2437 0           break;
2438 0           case 3: /* REPLICATE */
2439 0 0         if (i2<0)
2440 0           i2 = 0;
2441 0 0         if (i2 >= m_size)
2442 0           i2 = m_size-1;
2443 0           break;
2444 0           default:
2445 0 0         REALMOD(i2,m_size);
    0          
2446             }
2447 0           mapi[i] = i2;
2448             }
2449 0 0         for ( j = 1-q_size; j< n_size; j++) {
2450 0           j2 = j + qoff;
2451 0           switch (opt) {
2452 0           case 1: /* REFLECT */
2453 0 0         if (j2<0)
2454 0           j2 = -j2-1;
2455 0 0         else if (j2 >= n_size)
2456 0           j2 = 2*n_size-(j2+1);
2457 0           break;
2458 0           case 2: /* TRUNCATE */
2459 0 0         if (j2<0 || j2 >= n_size)
    0          
2460 0           j2 = -1;
2461 0           break;
2462 0           case 3: /* REPLICATE */
2463 0 0         if (j2<0)
2464 0           j2 = 0;
2465 0 0         if (j2 >= n_size)
2466 0           j2 = n_size-1;
2467 0           break;
2468 0           default:
2469 0 0         REALMOD(j2,n_size);
    0          
2470             }
2471 0           mapj[j] = j2;
2472             }
2473              
2474             #line 251 "lib/PDL/Image2D.pd"
2475             PDL_BROADCASTLOOP_START_conv2d_readdata
2476             #line 252 "lib/PDL/Image2D.pd"
2477             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2478             #line 253 "lib/PDL/Image2D.pd"
2479             PDL_IF_BAD(int flag = 0;,)
2480             PDL_CLDouble tmp = 0;
2481             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2482             #line 256 "lib/PDL/Image2D.pd"
2483             j2 = mapj[n-q];
2484             if (j2 >= 0) {
2485             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2486             #line 259 "lib/PDL/Image2D.pd"
2487             i2 = mapi[m-p];
2488             if (i2 >= 0) {
2489             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,F,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,F,kern_badval_isnan) ),) {
2490             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2491             PDL_IF_BAD(flag = 1;,)
2492             } /* if: good */
2493             } /* if: i2 >= 0 */
2494             }} /* Close p */
2495             #line 267 "lib/PDL/Image2D.pd"
2496             } /* if: j2 >= 0 */
2497             }} /* Close q */
2498             #line 269 "lib/PDL/Image2D.pd"
2499             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2500             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2501             }} /* Close n */}} /* Close m */
2502             #line 272 "lib/PDL/Image2D.pd"
2503             PDL_BROADCASTLOOP_END_conv2d_readdata
2504             #line 2505 "lib/PDL/Image2D-pp-conv2d.c"
2505             }
2506 0           } break;
2507 8           case PDL_D: {
2508 8 50         PDL_DECLARE_PARAMS_conv2d_1(PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
2509 8           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2510 8           int m_size = __privtrans->ind_sizes[2];
2511 8           int n_size = __privtrans->ind_sizes[3];
2512 8           int p_size = __privtrans->ind_sizes[4];
2513 8           int q_size = __privtrans->ind_sizes[5];
2514            
2515 8           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2516 8 50         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    50          
2517              
2518 8           poff = p_size/2; mapi += p_size-1;
2519 8           qoff = q_size/2; mapj += q_size-1;
2520 818 100         for ( i = 1-p_size; i< m_size; i++) {
2521 810           i2 = i + poff;
2522 810           switch (opt) {
2523 5           case 1: /* REFLECT */
2524 5 100         if (i2<0)
2525 1           i2 = -i2-1;
2526 4 100         else if (i2 >= m_size)
2527 1           i2 = 2*m_size-(i2+1);
2528 5           break;
2529 5           case 2: /* TRUNCATE */
2530 5 100         if (i2<0 || i2 >= m_size)
    100          
2531 2           i2 = -1;
2532 5           break;
2533 5           case 3: /* REPLICATE */
2534 5 100         if (i2<0)
2535 1           i2 = 0;
2536 5 100         if (i2 >= m_size)
2537 1           i2 = m_size-1;
2538 5           break;
2539 795           default:
2540 806 100         REALMOD(i2,m_size);
    100          
2541             }
2542 810           mapi[i] = i2;
2543             }
2544 815 100         for ( j = 1-q_size; j< n_size; j++) {
2545 807           j2 = j + qoff;
2546 807           switch (opt) {
2547 5           case 1: /* REFLECT */
2548 5 100         if (j2<0)
2549 1           j2 = -j2-1;
2550 4 100         else if (j2 >= n_size)
2551 1           j2 = 2*n_size-(j2+1);
2552 5           break;
2553 5           case 2: /* TRUNCATE */
2554 5 100         if (j2<0 || j2 >= n_size)
    100          
2555 2           j2 = -1;
2556 5           break;
2557 5           case 3: /* REPLICATE */
2558 5 100         if (j2<0)
2559 1           j2 = 0;
2560 5 100         if (j2 >= n_size)
2561 1           j2 = n_size-1;
2562 5           break;
2563 792           default:
2564 807 100         REALMOD(j2,n_size);
    100          
2565             }
2566 807           mapj[j] = j2;
2567             }
2568              
2569             #line 251 "lib/PDL/Image2D.pd"
2570             PDL_BROADCASTLOOP_START_conv2d_readdata
2571             #line 252 "lib/PDL/Image2D.pd"
2572             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2573             #line 253 "lib/PDL/Image2D.pd"
2574             PDL_IF_BAD(int flag = 0;,)
2575             PDL_CLDouble tmp = 0;
2576             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2577             #line 256 "lib/PDL/Image2D.pd"
2578             j2 = mapj[n-q];
2579             if (j2 >= 0) {
2580             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2581             #line 259 "lib/PDL/Image2D.pd"
2582             i2 = mapi[m-p];
2583             if (i2 >= 0) {
2584             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,D,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,D,kern_badval_isnan) ),) {
2585             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2586             PDL_IF_BAD(flag = 1;,)
2587             } /* if: good */
2588             } /* if: i2 >= 0 */
2589             }} /* Close p */
2590             #line 267 "lib/PDL/Image2D.pd"
2591             } /* if: j2 >= 0 */
2592             }} /* Close q */
2593             #line 269 "lib/PDL/Image2D.pd"
2594             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2595             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2596             }} /* Close n */}} /* Close m */
2597             #line 272 "lib/PDL/Image2D.pd"
2598             PDL_BROADCASTLOOP_END_conv2d_readdata
2599             #line 2600 "lib/PDL/Image2D-pp-conv2d.c"
2600             }
2601 8           } break;
2602 0           case PDL_LD: {
2603 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_LDouble,E,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2604 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2605 0           int m_size = __privtrans->ind_sizes[2];
2606 0           int n_size = __privtrans->ind_sizes[3];
2607 0           int p_size = __privtrans->ind_sizes[4];
2608 0           int q_size = __privtrans->ind_sizes[5];
2609            
2610 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2611 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
2612              
2613 0           poff = p_size/2; mapi += p_size-1;
2614 0           qoff = q_size/2; mapj += q_size-1;
2615 0 0         for ( i = 1-p_size; i< m_size; i++) {
2616 0           i2 = i + poff;
2617 0           switch (opt) {
2618 0           case 1: /* REFLECT */
2619 0 0         if (i2<0)
2620 0           i2 = -i2-1;
2621 0 0         else if (i2 >= m_size)
2622 0           i2 = 2*m_size-(i2+1);
2623 0           break;
2624 0           case 2: /* TRUNCATE */
2625 0 0         if (i2<0 || i2 >= m_size)
    0          
2626 0           i2 = -1;
2627 0           break;
2628 0           case 3: /* REPLICATE */
2629 0 0         if (i2<0)
2630 0           i2 = 0;
2631 0 0         if (i2 >= m_size)
2632 0           i2 = m_size-1;
2633 0           break;
2634 0           default:
2635 0 0         REALMOD(i2,m_size);
    0          
2636             }
2637 0           mapi[i] = i2;
2638             }
2639 0 0         for ( j = 1-q_size; j< n_size; j++) {
2640 0           j2 = j + qoff;
2641 0           switch (opt) {
2642 0           case 1: /* REFLECT */
2643 0 0         if (j2<0)
2644 0           j2 = -j2-1;
2645 0 0         else if (j2 >= n_size)
2646 0           j2 = 2*n_size-(j2+1);
2647 0           break;
2648 0           case 2: /* TRUNCATE */
2649 0 0         if (j2<0 || j2 >= n_size)
    0          
2650 0           j2 = -1;
2651 0           break;
2652 0           case 3: /* REPLICATE */
2653 0 0         if (j2<0)
2654 0           j2 = 0;
2655 0 0         if (j2 >= n_size)
2656 0           j2 = n_size-1;
2657 0           break;
2658 0           default:
2659 0 0         REALMOD(j2,n_size);
    0          
2660             }
2661 0           mapj[j] = j2;
2662             }
2663              
2664             #line 251 "lib/PDL/Image2D.pd"
2665             PDL_BROADCASTLOOP_START_conv2d_readdata
2666             #line 252 "lib/PDL/Image2D.pd"
2667             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2668             #line 253 "lib/PDL/Image2D.pd"
2669             PDL_IF_BAD(int flag = 0;,)
2670             PDL_CLDouble tmp = 0;
2671             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2672             #line 256 "lib/PDL/Image2D.pd"
2673             j2 = mapj[n-q];
2674             if (j2 >= 0) {
2675             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2676             #line 259 "lib/PDL/Image2D.pd"
2677             i2 = mapi[m-p];
2678             if (i2 >= 0) {
2679             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,E,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,E,kern_badval_isnan) ),) {
2680             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2681             PDL_IF_BAD(flag = 1;,)
2682             } /* if: good */
2683             } /* if: i2 >= 0 */
2684             }} /* Close p */
2685             #line 267 "lib/PDL/Image2D.pd"
2686             } /* if: j2 >= 0 */
2687             }} /* Close q */
2688             #line 269 "lib/PDL/Image2D.pd"
2689             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2690             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2691             }} /* Close n */}} /* Close m */
2692             #line 272 "lib/PDL/Image2D.pd"
2693             PDL_BROADCASTLOOP_END_conv2d_readdata
2694             #line 2695 "lib/PDL/Image2D-pp-conv2d.c"
2695             }
2696 0           } break;
2697 0           case PDL_CF: {
2698 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_CFloat,G,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2699 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2700 0           int m_size = __privtrans->ind_sizes[2];
2701 0           int n_size = __privtrans->ind_sizes[3];
2702 0           int p_size = __privtrans->ind_sizes[4];
2703 0           int q_size = __privtrans->ind_sizes[5];
2704            
2705 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2706 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
2707              
2708 0           poff = p_size/2; mapi += p_size-1;
2709 0           qoff = q_size/2; mapj += q_size-1;
2710 0 0         for ( i = 1-p_size; i< m_size; i++) {
2711 0           i2 = i + poff;
2712 0           switch (opt) {
2713 0           case 1: /* REFLECT */
2714 0 0         if (i2<0)
2715 0           i2 = -i2-1;
2716 0 0         else if (i2 >= m_size)
2717 0           i2 = 2*m_size-(i2+1);
2718 0           break;
2719 0           case 2: /* TRUNCATE */
2720 0 0         if (i2<0 || i2 >= m_size)
    0          
2721 0           i2 = -1;
2722 0           break;
2723 0           case 3: /* REPLICATE */
2724 0 0         if (i2<0)
2725 0           i2 = 0;
2726 0 0         if (i2 >= m_size)
2727 0           i2 = m_size-1;
2728 0           break;
2729 0           default:
2730 0 0         REALMOD(i2,m_size);
    0          
2731             }
2732 0           mapi[i] = i2;
2733             }
2734 0 0         for ( j = 1-q_size; j< n_size; j++) {
2735 0           j2 = j + qoff;
2736 0           switch (opt) {
2737 0           case 1: /* REFLECT */
2738 0 0         if (j2<0)
2739 0           j2 = -j2-1;
2740 0 0         else if (j2 >= n_size)
2741 0           j2 = 2*n_size-(j2+1);
2742 0           break;
2743 0           case 2: /* TRUNCATE */
2744 0 0         if (j2<0 || j2 >= n_size)
    0          
2745 0           j2 = -1;
2746 0           break;
2747 0           case 3: /* REPLICATE */
2748 0 0         if (j2<0)
2749 0           j2 = 0;
2750 0 0         if (j2 >= n_size)
2751 0           j2 = n_size-1;
2752 0           break;
2753 0           default:
2754 0 0         REALMOD(j2,n_size);
    0          
2755             }
2756 0           mapj[j] = j2;
2757             }
2758              
2759             #line 251 "lib/PDL/Image2D.pd"
2760             PDL_BROADCASTLOOP_START_conv2d_readdata
2761             #line 252 "lib/PDL/Image2D.pd"
2762             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2763             #line 253 "lib/PDL/Image2D.pd"
2764             PDL_IF_BAD(int flag = 0;,)
2765             PDL_CLDouble tmp = 0;
2766             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2767             #line 256 "lib/PDL/Image2D.pd"
2768             j2 = mapj[n-q];
2769             if (j2 >= 0) {
2770             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2771             #line 259 "lib/PDL/Image2D.pd"
2772             i2 = mapi[m-p];
2773             if (i2 >= 0) {
2774             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,G,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,G,kern_badval_isnan) ),) {
2775             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2776             PDL_IF_BAD(flag = 1;,)
2777             } /* if: good */
2778             } /* if: i2 >= 0 */
2779             }} /* Close p */
2780             #line 267 "lib/PDL/Image2D.pd"
2781             } /* if: j2 >= 0 */
2782             }} /* Close q */
2783             #line 269 "lib/PDL/Image2D.pd"
2784             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2785             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2786             }} /* Close n */}} /* Close m */
2787             #line 272 "lib/PDL/Image2D.pd"
2788             PDL_BROADCASTLOOP_END_conv2d_readdata
2789             #line 2790 "lib/PDL/Image2D-pp-conv2d.c"
2790             }
2791 0           } break;
2792 3           case PDL_CD: {
2793 3 50         PDL_DECLARE_PARAMS_conv2d_1(PDL_CDouble,C,PDL_Indx,N,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
2794 3           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2795 3           int m_size = __privtrans->ind_sizes[2];
2796 3           int n_size = __privtrans->ind_sizes[3];
2797 3           int p_size = __privtrans->ind_sizes[4];
2798 3           int q_size = __privtrans->ind_sizes[5];
2799            
2800 3           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2801 3 50         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    50          
2802              
2803 3           poff = p_size/2; mapi += p_size-1;
2804 3           qoff = q_size/2; mapj += q_size-1;
2805 18 100         for ( i = 1-p_size; i< m_size; i++) {
2806 15           i2 = i + poff;
2807 15           switch (opt) {
2808 0           case 1: /* REFLECT */
2809 0 0         if (i2<0)
2810 0           i2 = -i2-1;
2811 0 0         else if (i2 >= m_size)
2812 0           i2 = 2*m_size-(i2+1);
2813 0           break;
2814 0           case 2: /* TRUNCATE */
2815 0 0         if (i2<0 || i2 >= m_size)
    0          
2816 0           i2 = -1;
2817 0           break;
2818 0           case 3: /* REPLICATE */
2819 0 0         if (i2<0)
2820 0           i2 = 0;
2821 0 0         if (i2 >= m_size)
2822 0           i2 = m_size-1;
2823 0           break;
2824 15           default:
2825 21 100         REALMOD(i2,m_size);
    100          
2826             }
2827 15           mapi[i] = i2;
2828             }
2829 18 100         for ( j = 1-q_size; j< n_size; j++) {
2830 15           j2 = j + qoff;
2831 15           switch (opt) {
2832 0           case 1: /* REFLECT */
2833 0 0         if (j2<0)
2834 0           j2 = -j2-1;
2835 0 0         else if (j2 >= n_size)
2836 0           j2 = 2*n_size-(j2+1);
2837 0           break;
2838 0           case 2: /* TRUNCATE */
2839 0 0         if (j2<0 || j2 >= n_size)
    0          
2840 0           j2 = -1;
2841 0           break;
2842 0           case 3: /* REPLICATE */
2843 0 0         if (j2<0)
2844 0           j2 = 0;
2845 0 0         if (j2 >= n_size)
2846 0           j2 = n_size-1;
2847 0           break;
2848 15           default:
2849 21 100         REALMOD(j2,n_size);
    100          
2850             }
2851 15           mapj[j] = j2;
2852             }
2853              
2854             #line 251 "lib/PDL/Image2D.pd"
2855             PDL_BROADCASTLOOP_START_conv2d_readdata
2856             #line 252 "lib/PDL/Image2D.pd"
2857             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2858             #line 253 "lib/PDL/Image2D.pd"
2859             PDL_IF_BAD(int flag = 0;,)
2860             PDL_CLDouble tmp = 0;
2861             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2862             #line 256 "lib/PDL/Image2D.pd"
2863             j2 = mapj[n-q];
2864             if (j2 >= 0) {
2865             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2866             #line 259 "lib/PDL/Image2D.pd"
2867             i2 = mapi[m-p];
2868             if (i2 >= 0) {
2869             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,C,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,C,kern_badval_isnan) ),) {
2870             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2871             PDL_IF_BAD(flag = 1;,)
2872             } /* if: good */
2873             } /* if: i2 >= 0 */
2874             }} /* Close p */
2875             #line 267 "lib/PDL/Image2D.pd"
2876             } /* if: j2 >= 0 */
2877             }} /* Close q */
2878             #line 269 "lib/PDL/Image2D.pd"
2879             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2880             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2881             }} /* Close n */}} /* Close m */
2882             #line 272 "lib/PDL/Image2D.pd"
2883             PDL_BROADCASTLOOP_END_conv2d_readdata
2884             #line 2885 "lib/PDL/Image2D-pp-conv2d.c"
2885             }
2886 3           } break;
2887 0           case PDL_CLD: {
2888 0 0         PDL_DECLARE_PARAMS_conv2d_1(PDL_CLDouble,H,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2889 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2890 0           int m_size = __privtrans->ind_sizes[2];
2891 0           int n_size = __privtrans->ind_sizes[3];
2892 0           int p_size = __privtrans->ind_sizes[4];
2893 0           int q_size = __privtrans->ind_sizes[5];
2894            
2895 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2896 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in conv2d:" "Out of Memory");
    0          
2897              
2898 0           poff = p_size/2; mapi += p_size-1;
2899 0           qoff = q_size/2; mapj += q_size-1;
2900 0 0         for ( i = 1-p_size; i< m_size; i++) {
2901 0           i2 = i + poff;
2902 0           switch (opt) {
2903 0           case 1: /* REFLECT */
2904 0 0         if (i2<0)
2905 0           i2 = -i2-1;
2906 0 0         else if (i2 >= m_size)
2907 0           i2 = 2*m_size-(i2+1);
2908 0           break;
2909 0           case 2: /* TRUNCATE */
2910 0 0         if (i2<0 || i2 >= m_size)
    0          
2911 0           i2 = -1;
2912 0           break;
2913 0           case 3: /* REPLICATE */
2914 0 0         if (i2<0)
2915 0           i2 = 0;
2916 0 0         if (i2 >= m_size)
2917 0           i2 = m_size-1;
2918 0           break;
2919 0           default:
2920 0 0         REALMOD(i2,m_size);
    0          
2921             }
2922 0           mapi[i] = i2;
2923             }
2924 0 0         for ( j = 1-q_size; j< n_size; j++) {
2925 0           j2 = j + qoff;
2926 0           switch (opt) {
2927 0           case 1: /* REFLECT */
2928 0 0         if (j2<0)
2929 0           j2 = -j2-1;
2930 0 0         else if (j2 >= n_size)
2931 0           j2 = 2*n_size-(j2+1);
2932 0           break;
2933 0           case 2: /* TRUNCATE */
2934 0 0         if (j2<0 || j2 >= n_size)
    0          
2935 0           j2 = -1;
2936 0           break;
2937 0           case 3: /* REPLICATE */
2938 0 0         if (j2<0)
2939 0           j2 = 0;
2940 0 0         if (j2 >= n_size)
2941 0           j2 = n_size-1;
2942 0           break;
2943 0           default:
2944 0 0         REALMOD(j2,n_size);
    0          
2945             }
2946 0           mapj[j] = j2;
2947             }
2948              
2949             #line 251 "lib/PDL/Image2D.pd"
2950             PDL_BROADCASTLOOP_START_conv2d_readdata
2951             #line 252 "lib/PDL/Image2D.pd"
2952             {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
2953             #line 253 "lib/PDL/Image2D.pd"
2954             PDL_IF_BAD(int flag = 0;,)
2955             PDL_CLDouble tmp = 0;
2956             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2957             #line 256 "lib/PDL/Image2D.pd"
2958             j2 = mapj[n-q];
2959             if (j2 >= 0) {
2960             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2961             #line 259 "lib/PDL/Image2D.pd"
2962             i2 = mapi[m-p];
2963             if (i2 >= 0) {
2964             PDL_IF_BAD(if ( !PDL_ISBAD2((a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))],a_badval,H,a_badval_isnan) && !PDL_ISBAD2((kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))],kern_badval,H,kern_badval_isnan) ),) {
2965             tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))] * (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))];
2966             PDL_IF_BAD(flag = 1;,)
2967             } /* if: good */
2968             } /* if: i2 >= 0 */
2969             }} /* Close p */
2970             #line 267 "lib/PDL/Image2D.pd"
2971             } /* if: j2 >= 0 */
2972             }} /* Close q */
2973             #line 269 "lib/PDL/Image2D.pd"
2974             PDL_IF_BAD(if ( !flag ) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval; }
2975             else,) { (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp; }
2976             }} /* Close n */}} /* Close m */
2977             #line 272 "lib/PDL/Image2D.pd"
2978             PDL_BROADCASTLOOP_END_conv2d_readdata
2979             #line 2980 "lib/PDL/Image2D-pp-conv2d.c"
2980             }
2981 0           } break;
2982 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in conv2d: unhandled datatype(%d), only handles (ABSULKNPQFDEGCH)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
2983             }
2984             #undef PDL_IF_BAD
2985             }
2986 12           return PDL_err;
2987             }
2988              
2989             static pdl_datatypes pdl_conv2d_vtable_gentypes[] = { PDL_SB, PDL_B, PDL_S, PDL_US, PDL_L, PDL_UL, PDL_IND, PDL_ULL, PDL_LL, PDL_F, PDL_D, PDL_LD, PDL_CF, PDL_CD, PDL_CLD, -1 };
2990             static PDL_Indx pdl_conv2d_vtable_realdims[] = { 2, 2, 2, 1, 1 };
2991             static char *pdl_conv2d_vtable_parnames[] = { "a","kern","b","mapi","mapj" };
2992             static short pdl_conv2d_vtable_parflags[] = {
2993             0,
2994             0,
2995             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE,
2996             PDL_PARAM_ISCREAT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTEMP|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
2997             PDL_PARAM_ISCREAT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTEMP|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
2998             };
2999             static pdl_datatypes pdl_conv2d_vtable_partypes[] = { -1, -1, -1, PDL_IND, PDL_IND };
3000             static PDL_Indx pdl_conv2d_vtable_realdims_starts[] = { 0, 2, 4, 6, 7 };
3001             static PDL_Indx pdl_conv2d_vtable_realdims_ind_ids[] = { 2, 3, 4, 5, 2, 3, 0, 1 };
3002             static char *pdl_conv2d_vtable_indnames[] = { "isize","jsize","m","n","p","q" };
3003             pdl_transvtable pdl_conv2d_vtable = {
3004             PDL_TRANS_DO_BROADCAST|PDL_TRANS_BADPROCESS, 0, pdl_conv2d_vtable_gentypes, 2, 5, NULL /*CORE21*/,
3005             pdl_conv2d_vtable_realdims, pdl_conv2d_vtable_parnames,
3006             pdl_conv2d_vtable_parflags, pdl_conv2d_vtable_partypes,
3007             pdl_conv2d_vtable_realdims_starts, pdl_conv2d_vtable_realdims_ind_ids, 8,
3008             6, pdl_conv2d_vtable_indnames,
3009             pdl_conv2d_redodims, pdl_conv2d_readdata, NULL,
3010             NULL,
3011             sizeof(pdl_params_conv2d),"PDL::Image2D::conv2d"
3012             };
3013              
3014              
3015 12           pdl_error pdl_run_conv2d(pdl *a,pdl *kern,pdl *b,int opt) {
3016 12           pdl_error PDL_err = {0, NULL, 0};
3017 12 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
3018 12           pdl_trans *__privtrans = PDL->create_trans(&pdl_conv2d_vtable);
3019 12 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
3020 12           pdl_params_conv2d *__params = __privtrans->params;
3021 12           __privtrans->pdls[0] = a;
3022 12           __privtrans->pdls[1] = kern;
3023 12           __privtrans->pdls[2] = b;
3024 12 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
3025 12           (__params->opt) = (opt); /* CType.get_copy */
3026 12 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
3027 12           return PDL_err;
3028             }