File Coverage

Cluster.xs
Criterion Covered Total %
statement 613 5731 10.7
branch 544 17090 3.1
condition n/a
subroutine n/a
pod n/a
total 1157 22821 5.0


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 Cluster.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_Cluster
21             extern Core* PDL; /* Structure hold core C functions */
22             #line 23 "Cluster.xs"
23             #include "ccluster.h"
24              
25             //#define CDEBUG 1
26             //#undef CDEBUG
27              
28 0           void print_pp_dbl(int nrows, int ncols, double **pp) {
29             int i,j;
30 0 0         for (i=0; i
31 0           printf(" %d:[ ", i);
32 0 0         for (j=0; j
33 0           printf("%d=%lf ", j, pp[i][j]);
34             }
35 0           printf("]\n");
36             }
37 0           }
38             static
39 57           void **pp_alloc(int nrows)
40             {
41 57           return ((void **)malloc(nrows*sizeof(void**)));
42             }
43             static
44 25           double **p2pp_dbl(int nrows, int ncols, double *p, double **matrix)
45             {
46             int i;
47 25 50         if (!(p && nrows && ncols)) return NULL;
    50          
    50          
48 25 50         if (!matrix) matrix = (double **)pp_alloc(nrows);
49 215 100         for (i=0; i < nrows; i++) {
50 190           matrix[i] = p + (i*ncols);
51             #ifdef CDEBUG
52             printf("p2pp_dbl(nr=%d,nc=%d,p=%p) : (p+%d*%d)=%p\n", nrows,ncols,p, i,ncols,matrix[i]);
53             #endif
54             }
55 25           return matrix;
56             }
57 30           int **p2pp_int(int nrows, int ncols, int *p, int **matrix)
58             {
59             int i;
60 30 50         if (!(p && nrows && ncols)) return NULL;
    50          
    50          
61 30 50         if (!matrix) matrix = (int **)pp_alloc(nrows);
62 230 100         for (i=0; i < nrows; i++) {
63 200           matrix[i] = p + (i*ncols);
64             }
65 30           return matrix;
66             }
67             static
68 2           double **p2pp_dbl_ragged(int nrows, int ncols, double *p, double **matrix)
69             {
70             int i;
71 2 50         if (!(p && nrows && ncols)) return NULL;
    50          
    50          
72 2 50         if (!matrix) matrix = (double **)pp_alloc(nrows);
73 26 100         for (i=0; i < nrows; i++) {
74 24           matrix[i] = p + (i*ncols);
75             }
76 2           return matrix;
77             }
78             static
79 1           void pp2pdl_ragged_dbl(int nrows, int ncols, double **pp, double *p)
80             {
81             int i,j;
82 1 50         if (!(pp && nrows && ncols)) return;
    50          
    50          
83 5 100         for (i=0; i
84 10 100         for (j=0; j
85 6           p[i*ncols+j] = pp[i][j];
86 6           p[j*ncols+i] = pp[i][j];
87             }
88 4           p[i*ncols+i] = 0;
89             }
90             }
91             static
92 0           void pp2pdl_dbl(int nrows, int ncols, double **pp, double *p)
93             {
94             int i,j;
95 0 0         if (!(pp && nrows && ncols)) return;
    0          
    0          
96 0 0         for (i=0; i
97 0 0         for (j=0; j
98 0           p[i*ncols+j] = pp[i][j];
99             }
100             }
101             }
102             static
103 0           Node* p2node(int nnodes, int* tree, double *lnkdist)
104             {
105             int i;
106 0           Node *nod = NULL;
107 0 0         if (!(nnodes && (tree || lnkdist))) return NULL;
    0          
    0          
108 0           nod = (Node*)malloc(nnodes*sizeof(Node));
109 0 0         for (i=0; i < nnodes; ++i) {
110 0 0         nod[i].left = tree ? tree[i*2+0] : 0;
111 0 0         nod[i].right = tree ? tree[i*2+1] : 0;
112 0 0         nod[i].distance = lnkdist ? lnkdist[i] : 0;
113             }
114 0           return nod;
115             }
116              
117 8           void node2p(int nnodes, Node* nod, int* tree, double *lnkdist)
118             {
119             int i;
120 8 50         if (!(nnodes && nod && (tree || lnkdist))) return;
    50          
    50          
    0          
121 68 100         for (i=0; i < nnodes; ++i) {
122 60 50         if (tree) {
123 60           tree[i*2+0] = nod[i].left;
124 60           tree[i*2+1] = nod[i].right;
125             }
126 60 50         if (lnkdist) {
127 60           lnkdist[i] = nod[i].distance;
128             }
129             }
130 8           return;
131             }
132              
133              
134             #line 1857 "lib/PDL/PP.pm"
135             pdl_error pdl_cmean_readdata(pdl_trans *__privtrans) {
136             pdl_error PDL_err = {0, NULL, 0};
137             #line 138 "Cluster.xs"
138 2 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in cmean:" "broadcast.incs NULL");
139             /* broadcastloop declarations */
140             int __brcloopval;
141             register PDL_Indx __tind0,__tind1; /* counters along dim */
142 2           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
143             /* dims here are how many steps along those dims */
144 2           register PDL_Indx __tinc0_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
145 2           register PDL_Indx __tinc0_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
146 2           register PDL_Indx __tinc1_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
147 2           register PDL_Indx __tinc1_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
148             #define PDL_BROADCASTLOOP_START_cmean_readdata PDL_BROADCASTLOOP_START( \
149             readdata, \
150             __privtrans->broadcast, \
151             __privtrans->vtable, \
152             a_datap += __offsp[0]; \
153             b_datap += __offsp[1]; \
154             , \
155             ( ,a_datap += __tinc1_a - __tinc0_a * __tdims0 \
156             ,b_datap += __tinc1_b - __tinc0_b * __tdims0 \
157             ), \
158             ( ,a_datap += __tinc0_a \
159             ,b_datap += __tinc0_b \
160             ) \
161             )
162             #define PDL_BROADCASTLOOP_END_cmean_readdata PDL_BROADCASTLOOP_END( \
163             __privtrans->broadcast, \
164             a_datap -= __tinc1_a * __tdims1 + __offsp[0]; \
165             b_datap -= __tinc1_b * __tdims1 + __offsp[1]; \
166             )
167 2           register PDL_Indx __inc_a_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_a_n;
168             #ifndef PDL_DECLARE_PARAMS_cmean_1
169             #define PDL_DECLARE_PARAMS_cmean_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_a,PDL_PPSYM_PARAM_a,PDL_TYPE_PARAM_b,PDL_PPSYM_PARAM_b) \
170             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_a, a, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_a) \
171             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_b, b, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_b)
172             #endif
173             #define PDL_IF_BAD(t,f) f
174 2 50         switch (__privtrans->__datatype) { /* Start generic switch */
175 2           case PDL_D: {
176 2 50         PDL_DECLARE_PARAMS_cmean_1(PDL_Double,D,PDL_Double,D,PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
177 8 50         PDL_BROADCASTLOOP_START_cmean_readdata {(b_datap)[0] = mean(__privtrans->ind_sizes[0], a_datap);}PDL_BROADCASTLOOP_END_cmean_readdata
    50          
    50          
    50          
    50          
    100          
    100          
    50          
    50          
178 2           } break;
179 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in cmean: unhandled datatype(%d), only handles (D)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
180             }
181             #undef PDL_IF_BAD
182 2           return PDL_err;
183             }
184              
185             static pdl_datatypes pdl_cmean_vtable_gentypes[] = { PDL_D, -1 };
186             static PDL_Indx pdl_cmean_vtable_realdims[] = { 1, 0 };
187             static char *pdl_cmean_vtable_parnames[] = { "a","b" };
188             static short pdl_cmean_vtable_parflags[] = {
189             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
190             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
191             };
192             static pdl_datatypes pdl_cmean_vtable_partypes[] = { PDL_D, PDL_D };
193             static PDL_Indx pdl_cmean_vtable_realdims_starts[] = { 0, 1 };
194             static PDL_Indx pdl_cmean_vtable_realdims_ind_ids[] = { 0 };
195             static char *pdl_cmean_vtable_indnames[] = { "n" };
196             pdl_transvtable pdl_cmean_vtable = {
197             PDL_TRANS_DO_BROADCAST, 0, pdl_cmean_vtable_gentypes, 1, 2, NULL /*CORE21*/,
198             pdl_cmean_vtable_realdims, pdl_cmean_vtable_parnames,
199             pdl_cmean_vtable_parflags, pdl_cmean_vtable_partypes,
200             pdl_cmean_vtable_realdims_starts, pdl_cmean_vtable_realdims_ind_ids, 1,
201             1, pdl_cmean_vtable_indnames,
202             NULL, pdl_cmean_readdata, NULL,
203             NULL,
204             0,"PDL::Cluster::cmean"
205             };
206              
207              
208 2           pdl_error pdl_run_cmean(pdl *a,pdl *b) {
209 2           pdl_error PDL_err = {0, NULL, 0};
210 2 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
211 2           pdl_trans *__privtrans = PDL->create_trans(&pdl_cmean_vtable);
212 2 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
213 2           __privtrans->pdls[0] = a;
214 2           __privtrans->pdls[1] = b;
215 2 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
216 2 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
217 2           return PDL_err;
218             }
219              
220             #line 1857 "lib/PDL/PP.pm"
221             pdl_error pdl_cmedian_readdata(pdl_trans *__privtrans) {
222             pdl_error PDL_err = {0, NULL, 0};
223             #line 224 "Cluster.xs"
224 2 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in cmedian:" "broadcast.incs NULL");
225             /* broadcastloop declarations */
226             int __brcloopval;
227             register PDL_Indx __tind0,__tind1; /* counters along dim */
228 2           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
229             /* dims here are how many steps along those dims */
230 2           register PDL_Indx __tinc0_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
231 2           register PDL_Indx __tinc0_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
232 2           register PDL_Indx __tinc1_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
233 2           register PDL_Indx __tinc1_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
234             #define PDL_BROADCASTLOOP_START_cmedian_readdata PDL_BROADCASTLOOP_START( \
235             readdata, \
236             __privtrans->broadcast, \
237             __privtrans->vtable, \
238             a_datap += __offsp[0]; \
239             b_datap += __offsp[1]; \
240             , \
241             ( ,a_datap += __tinc1_a - __tinc0_a * __tdims0 \
242             ,b_datap += __tinc1_b - __tinc0_b * __tdims0 \
243             ), \
244             ( ,a_datap += __tinc0_a \
245             ,b_datap += __tinc0_b \
246             ) \
247             )
248             #define PDL_BROADCASTLOOP_END_cmedian_readdata PDL_BROADCASTLOOP_END( \
249             __privtrans->broadcast, \
250             a_datap -= __tinc1_a * __tdims1 + __offsp[0]; \
251             b_datap -= __tinc1_b * __tdims1 + __offsp[1]; \
252             )
253 2           register PDL_Indx __inc_a_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_a_n;
254             #ifndef PDL_DECLARE_PARAMS_cmedian_1
255             #define PDL_DECLARE_PARAMS_cmedian_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_a,PDL_PPSYM_PARAM_a,PDL_TYPE_PARAM_b,PDL_PPSYM_PARAM_b) \
256             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_a, a, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_a) \
257             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_b, b, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_b)
258             #endif
259             #define PDL_IF_BAD(t,f) f
260 2 50         switch (__privtrans->__datatype) { /* Start generic switch */
261 2           case PDL_D: {
262 2 50         PDL_DECLARE_PARAMS_cmedian_1(PDL_Double,D,PDL_Double,D,PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
263 8 50         PDL_BROADCASTLOOP_START_cmedian_readdata {(b_datap)[0] = median(__privtrans->ind_sizes[0], a_datap);}PDL_BROADCASTLOOP_END_cmedian_readdata
    50          
    50          
    50          
    50          
    100          
    100          
    50          
    50          
264 2           } break;
265 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in cmedian: unhandled datatype(%d), only handles (D)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
266             }
267             #undef PDL_IF_BAD
268 2           return PDL_err;
269             }
270              
271             static pdl_datatypes pdl_cmedian_vtable_gentypes[] = { PDL_D, -1 };
272             static PDL_Indx pdl_cmedian_vtable_realdims[] = { 1, 0 };
273             static char *pdl_cmedian_vtable_parnames[] = { "a","b" };
274             static short pdl_cmedian_vtable_parflags[] = {
275             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
276             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
277             };
278             static pdl_datatypes pdl_cmedian_vtable_partypes[] = { PDL_D, PDL_D };
279             static PDL_Indx pdl_cmedian_vtable_realdims_starts[] = { 0, 1 };
280             static PDL_Indx pdl_cmedian_vtable_realdims_ind_ids[] = { 0 };
281             static char *pdl_cmedian_vtable_indnames[] = { "n" };
282             pdl_transvtable pdl_cmedian_vtable = {
283             PDL_TRANS_DO_BROADCAST, 0, pdl_cmedian_vtable_gentypes, 1, 2, NULL /*CORE21*/,
284             pdl_cmedian_vtable_realdims, pdl_cmedian_vtable_parnames,
285             pdl_cmedian_vtable_parflags, pdl_cmedian_vtable_partypes,
286             pdl_cmedian_vtable_realdims_starts, pdl_cmedian_vtable_realdims_ind_ids, 1,
287             1, pdl_cmedian_vtable_indnames,
288             NULL, pdl_cmedian_readdata, NULL,
289             NULL,
290             0,"PDL::Cluster::cmedian"
291             };
292              
293              
294 2           pdl_error pdl_run_cmedian(pdl *a,pdl *b) {
295 2           pdl_error PDL_err = {0, NULL, 0};
296 2 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
297 2           pdl_trans *__privtrans = PDL->create_trans(&pdl_cmedian_vtable);
298 2 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
299 2           __privtrans->pdls[0] = a;
300 2           __privtrans->pdls[1] = b;
301 2 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
302 2 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
303 2           return PDL_err;
304             }
305              
306             #line 1846 "lib/PDL/PP.pm"
307             typedef struct pdl_params_calculate_weights {
308             #line 309 "Cluster.xs"
309             char *distFlag;
310             } pdl_params_calculate_weights;
311              
312              
313             #line 1857 "lib/PDL/PP.pm"
314             pdl_error pdl_calculate_weights_readdata(pdl_trans *__privtrans) {
315             pdl_error PDL_err = {0, NULL, 0};
316             #line 317 "Cluster.xs"
317 0           pdl_params_calculate_weights *__params = __privtrans->params; (void)__params;
318 0           register PDL_Indx __d_size = __privtrans->ind_sizes[0];
319 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in calculate_weights:" "broadcast.incs NULL");
320             /* broadcastloop declarations */
321             int __brcloopval;
322             register PDL_Indx __tind0,__tind1; /* counters along dim */
323 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
324             /* dims here are how many steps along those dims */
325 0           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
326 0           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
327 0           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
328 0           register PDL_Indx __tinc0_cutoff = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
329 0           register PDL_Indx __tinc0_exponent = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
330 0           register PDL_Indx __tinc0_oweights = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
331 0           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
332 0           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
333 0           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
334 0           register PDL_Indx __tinc1_cutoff = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
335 0           register PDL_Indx __tinc1_exponent = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
336 0           register PDL_Indx __tinc1_oweights = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
337             #define PDL_BROADCASTLOOP_START_calculate_weights_readdata PDL_BROADCASTLOOP_START( \
338             readdata, \
339             __privtrans->broadcast, \
340             __privtrans->vtable, \
341             data_datap += __offsp[0]; \
342             mask_datap += __offsp[1]; \
343             weight_datap += __offsp[2]; \
344             cutoff_datap += __offsp[3]; \
345             exponent_datap += __offsp[4]; \
346             oweights_datap += __offsp[5]; \
347             , \
348             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
349             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
350             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
351             ,cutoff_datap += __tinc1_cutoff - __tinc0_cutoff * __tdims0 \
352             ,exponent_datap += __tinc1_exponent - __tinc0_exponent * __tdims0 \
353             ,oweights_datap += __tinc1_oweights - __tinc0_oweights * __tdims0 \
354             ), \
355             ( ,data_datap += __tinc0_data \
356             ,mask_datap += __tinc0_mask \
357             ,weight_datap += __tinc0_weight \
358             ,cutoff_datap += __tinc0_cutoff \
359             ,exponent_datap += __tinc0_exponent \
360             ,oweights_datap += __tinc0_oweights \
361             ) \
362             )
363             #define PDL_BROADCASTLOOP_END_calculate_weights_readdata PDL_BROADCASTLOOP_END( \
364             __privtrans->broadcast, \
365             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
366             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
367             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
368             cutoff_datap -= __tinc1_cutoff * __tdims1 + __offsp[3]; \
369             exponent_datap -= __tinc1_exponent * __tdims1 + __offsp[4]; \
370             oweights_datap -= __tinc1_oweights * __tdims1 + __offsp[5]; \
371             )
372 0           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
373 0           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
374 0           register PDL_Indx __inc_oweights_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_oweights_d;
375 0           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
376             #ifndef PDL_DECLARE_PARAMS_calculate_weights_1
377             #define PDL_DECLARE_PARAMS_calculate_weights_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_cutoff,PDL_PPSYM_PARAM_cutoff,PDL_TYPE_PARAM_exponent,PDL_PPSYM_PARAM_exponent,PDL_TYPE_PARAM_oweights,PDL_PPSYM_PARAM_oweights) \
378             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
379             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
380             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
381             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cutoff, cutoff, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_cutoff) \
382             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_exponent, exponent, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_exponent) \
383             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_oweights, oweights, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_oweights)
384             #endif
385             #define PDL_IF_BAD(t,f) f
386 0           switch (__privtrans->__datatype) { /* Start generic switch */
387 0           case PDL_SB: {
388 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
389             {
390 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
391 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
392 0           int transpose=0;
393             int i;
394             double *owp;
395 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
396 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
397 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
398 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
399 0           weight_datap, transpose, *__params->distFlag,
400             (cutoff_datap)[0], (exponent_datap)[0]);
401 0 0         if (owp) {
402 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
403 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
404             }} /* Close d */
405 0           free(owp);
406             }
407 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
408             /*-- cleanup --*/
409 0 0         if (datapp) free(datapp);
410 0 0         if (maskpp) free(maskpp);
411             }
412 0           } break;
413 0           case PDL_B: {
414 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
415             {
416 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
417 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
418 0           int transpose=0;
419             int i;
420             double *owp;
421 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
422 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
423 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
424 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
425 0           weight_datap, transpose, *__params->distFlag,
426             (cutoff_datap)[0], (exponent_datap)[0]);
427 0 0         if (owp) {
428 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
429 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
430             }} /* Close d */
431 0           free(owp);
432             }
433 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
434             /*-- cleanup --*/
435 0 0         if (datapp) free(datapp);
436 0 0         if (maskpp) free(maskpp);
437             }
438 0           } break;
439 0           case PDL_S: {
440 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
441             {
442 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
443 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
444 0           int transpose=0;
445             int i;
446             double *owp;
447 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
448 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
449 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
450 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
451 0           weight_datap, transpose, *__params->distFlag,
452             (cutoff_datap)[0], (exponent_datap)[0]);
453 0 0         if (owp) {
454 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
455 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
456             }} /* Close d */
457 0           free(owp);
458             }
459 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
460             /*-- cleanup --*/
461 0 0         if (datapp) free(datapp);
462 0 0         if (maskpp) free(maskpp);
463             }
464 0           } break;
465 0           case PDL_US: {
466 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
467             {
468 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
469 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
470 0           int transpose=0;
471             int i;
472             double *owp;
473 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
474 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
475 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
476 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
477 0           weight_datap, transpose, *__params->distFlag,
478             (cutoff_datap)[0], (exponent_datap)[0]);
479 0 0         if (owp) {
480 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
481 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
482             }} /* Close d */
483 0           free(owp);
484             }
485 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
486             /*-- cleanup --*/
487 0 0         if (datapp) free(datapp);
488 0 0         if (maskpp) free(maskpp);
489             }
490 0           } break;
491 0           case PDL_L: {
492 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
493             {
494 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
495 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
496 0           int transpose=0;
497             int i;
498             double *owp;
499 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
500 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
501 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
502 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
503 0           weight_datap, transpose, *__params->distFlag,
504             (cutoff_datap)[0], (exponent_datap)[0]);
505 0 0         if (owp) {
506 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
507 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
508             }} /* Close d */
509 0           free(owp);
510             }
511 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
512             /*-- cleanup --*/
513 0 0         if (datapp) free(datapp);
514 0 0         if (maskpp) free(maskpp);
515             }
516 0           } break;
517 0           case PDL_UL: {
518 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
519             {
520 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
521 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
522 0           int transpose=0;
523             int i;
524             double *owp;
525 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
526 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
527 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
528 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
529 0           weight_datap, transpose, *__params->distFlag,
530             (cutoff_datap)[0], (exponent_datap)[0]);
531 0 0         if (owp) {
532 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
533 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
534             }} /* Close d */
535 0           free(owp);
536             }
537 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
538             /*-- cleanup --*/
539 0 0         if (datapp) free(datapp);
540 0 0         if (maskpp) free(maskpp);
541             }
542 0           } break;
543 0           case PDL_IND: {
544 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
545             {
546 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
547 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
548 0           int transpose=0;
549             int i;
550             double *owp;
551 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
552 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
553 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
554 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
555 0           weight_datap, transpose, *__params->distFlag,
556             (cutoff_datap)[0], (exponent_datap)[0]);
557 0 0         if (owp) {
558 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
559 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
560             }} /* Close d */
561 0           free(owp);
562             }
563 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
564             /*-- cleanup --*/
565 0 0         if (datapp) free(datapp);
566 0 0         if (maskpp) free(maskpp);
567             }
568 0           } break;
569 0           case PDL_ULL: {
570 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
571             {
572 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
573 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
574 0           int transpose=0;
575             int i;
576             double *owp;
577 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
578 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
579 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
580 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
581 0           weight_datap, transpose, *__params->distFlag,
582             (cutoff_datap)[0], (exponent_datap)[0]);
583 0 0         if (owp) {
584 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
585 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
586             }} /* Close d */
587 0           free(owp);
588             }
589 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
590             /*-- cleanup --*/
591 0 0         if (datapp) free(datapp);
592 0 0         if (maskpp) free(maskpp);
593             }
594 0           } break;
595 0           case PDL_LL: {
596 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
597             {
598 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
599 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
600 0           int transpose=0;
601             int i;
602             double *owp;
603 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
604 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
605 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
606 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
607 0           weight_datap, transpose, *__params->distFlag,
608             (cutoff_datap)[0], (exponent_datap)[0]);
609 0 0         if (owp) {
610 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
611 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
612             }} /* Close d */
613 0           free(owp);
614             }
615 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
616             /*-- cleanup --*/
617 0 0         if (datapp) free(datapp);
618 0 0         if (maskpp) free(maskpp);
619             }
620 0           } break;
621 0           case PDL_F: {
622 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
623             {
624 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
625 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
626 0           int transpose=0;
627             int i;
628             double *owp;
629 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
630 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
631 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
632 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
633 0           weight_datap, transpose, *__params->distFlag,
634             (cutoff_datap)[0], (exponent_datap)[0]);
635 0 0         if (owp) {
636 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
637 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
638             }} /* Close d */
639 0           free(owp);
640             }
641 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
642             /*-- cleanup --*/
643 0 0         if (datapp) free(datapp);
644 0 0         if (maskpp) free(maskpp);
645             }
646 0           } break;
647 0           case PDL_D: {
648 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
649             {
650 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
651 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
652 0           int transpose=0;
653             int i;
654             double *owp;
655 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
656 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
657 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
658 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
659 0           weight_datap, transpose, *__params->distFlag,
660             (cutoff_datap)[0], (exponent_datap)[0]);
661 0 0         if (owp) {
662 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
663 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
664             }} /* Close d */
665 0           free(owp);
666             }
667 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
668             /*-- cleanup --*/
669 0 0         if (datapp) free(datapp);
670 0 0         if (maskpp) free(maskpp);
671             }
672 0           } break;
673 0           case PDL_LD: {
674 0 0         PDL_DECLARE_PARAMS_calculate_weights_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
675             {
676 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
677 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
678 0           int transpose=0;
679             int i;
680             double *owp;
681 0 0         PDL_BROADCASTLOOP_START_calculate_weights_readdata
    0          
    0          
    0          
    0          
    0          
    0          
682 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
683 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
684 0           owp = calculate_weights(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
685 0           weight_datap, transpose, *__params->distFlag,
686             (cutoff_datap)[0], (exponent_datap)[0]);
687 0 0         if (owp) {
688 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
689 0           (oweights_datap)[0+(__inc_oweights_d*(d))] = owp[d];
690             }} /* Close d */
691 0           free(owp);
692             }
693 0 0         PDL_BROADCASTLOOP_END_calculate_weights_readdata
    0          
694             /*-- cleanup --*/
695 0 0         if (datapp) free(datapp);
696 0 0         if (maskpp) free(maskpp);
697             }
698 0           } break;
699 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in calculate_weights: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
700             }
701             #undef PDL_IF_BAD
702 0           return PDL_err;
703             }
704              
705              
706             #line 1857 "lib/PDL/PP.pm"
707             pdl_error pdl_calculate_weights_free(pdl_trans *__privtrans, char destroy) {
708             pdl_error PDL_err = {0, NULL, 0};
709             #line 710 "Cluster.xs"
710 0           pdl_params_calculate_weights *__params = __privtrans->params; (void)__params;
711 0 0         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
712 0           , ) return PDL_err;
713             }
714              
715             static pdl_datatypes pdl_calculate_weights_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, -1 };
716             static PDL_Indx pdl_calculate_weights_vtable_realdims[] = { 2, 2, 1, 0, 0, 1 };
717             static char *pdl_calculate_weights_vtable_parnames[] = { "data","mask","weight","cutoff","exponent","oweights" };
718             static short pdl_calculate_weights_vtable_parflags[] = {
719             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
720             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
721             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
722             PDL_PARAM_ISTYPED,
723             PDL_PARAM_ISTYPED,
724             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
725             };
726             static pdl_datatypes pdl_calculate_weights_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_D, PDL_D, PDL_D };
727             static PDL_Indx pdl_calculate_weights_vtable_realdims_starts[] = { 0, 2, 4, 5, 5, 5 };
728             static PDL_Indx pdl_calculate_weights_vtable_realdims_ind_ids[] = { 0, 1, 0, 1, 0, 0 };
729             static char *pdl_calculate_weights_vtable_indnames[] = { "d","n" };
730             pdl_transvtable pdl_calculate_weights_vtable = {
731             PDL_TRANS_DO_BROADCAST, 0, pdl_calculate_weights_vtable_gentypes, 5, 6, NULL /*CORE21*/,
732             pdl_calculate_weights_vtable_realdims, pdl_calculate_weights_vtable_parnames,
733             pdl_calculate_weights_vtable_parflags, pdl_calculate_weights_vtable_partypes,
734             pdl_calculate_weights_vtable_realdims_starts, pdl_calculate_weights_vtable_realdims_ind_ids, 6,
735             2, pdl_calculate_weights_vtable_indnames,
736             NULL, pdl_calculate_weights_readdata, NULL,
737             pdl_calculate_weights_free,
738             sizeof(pdl_params_calculate_weights),"PDL::Cluster::calculate_weights"
739             };
740              
741              
742 0           pdl_error pdl_run_calculate_weights(pdl *data,pdl *mask,pdl *weight,pdl *cutoff,pdl *exponent,pdl *oweights,char *distFlag) {
743 0           pdl_error PDL_err = {0, NULL, 0};
744 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
745 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_calculate_weights_vtable);
746 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
747 0           pdl_params_calculate_weights *__params = __privtrans->params;
748 0           __privtrans->pdls[0] = data;
749 0           __privtrans->pdls[1] = mask;
750 0           __privtrans->pdls[2] = weight;
751 0           __privtrans->pdls[3] = cutoff;
752 0           __privtrans->pdls[4] = exponent;
753 0           __privtrans->pdls[5] = oweights;
754 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
755 0           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
756 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
757 0           return PDL_err;
758             }
759              
760             #line 1846 "lib/PDL/PP.pm"
761             typedef struct pdl_params_clusterdistance {
762             #line 763 "Cluster.xs"
763             char *distFlag;
764             char *methodFlag;
765             } pdl_params_clusterdistance;
766              
767              
768             #line 1857 "lib/PDL/PP.pm"
769             pdl_error pdl_clusterdistance_readdata(pdl_trans *__privtrans) {
770             pdl_error PDL_err = {0, NULL, 0};
771             #line 772 "Cluster.xs"
772 6           pdl_params_clusterdistance *__params = __privtrans->params; (void)__params;
773 6 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in clusterdistance:" "broadcast.incs NULL");
774             /* broadcastloop declarations */
775             int __brcloopval;
776             register PDL_Indx __tind0,__tind1; /* counters along dim */
777 6           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
778             /* dims here are how many steps along those dims */
779 6           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
780 6           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
781 6           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
782 6           register PDL_Indx __tinc0_n1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
783 6           register PDL_Indx __tinc0_n2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
784 6           register PDL_Indx __tinc0_index1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
785 6           register PDL_Indx __tinc0_index2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,0);
786 6           register PDL_Indx __tinc0_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,0);
787 6           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
788 6           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
789 6           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
790 6           register PDL_Indx __tinc1_n1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
791 6           register PDL_Indx __tinc1_n2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
792 6           register PDL_Indx __tinc1_index1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
793 6           register PDL_Indx __tinc1_index2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,1);
794 6           register PDL_Indx __tinc1_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,1);
795             #define PDL_BROADCASTLOOP_START_clusterdistance_readdata PDL_BROADCASTLOOP_START( \
796             readdata, \
797             __privtrans->broadcast, \
798             __privtrans->vtable, \
799             data_datap += __offsp[0]; \
800             mask_datap += __offsp[1]; \
801             weight_datap += __offsp[2]; \
802             n1_datap += __offsp[3]; \
803             n2_datap += __offsp[4]; \
804             index1_datap += __offsp[5]; \
805             index2_datap += __offsp[6]; \
806             dist_datap += __offsp[7]; \
807             , \
808             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
809             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
810             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
811             ,n1_datap += __tinc1_n1 - __tinc0_n1 * __tdims0 \
812             ,n2_datap += __tinc1_n2 - __tinc0_n2 * __tdims0 \
813             ,index1_datap += __tinc1_index1 - __tinc0_index1 * __tdims0 \
814             ,index2_datap += __tinc1_index2 - __tinc0_index2 * __tdims0 \
815             ,dist_datap += __tinc1_dist - __tinc0_dist * __tdims0 \
816             ), \
817             ( ,data_datap += __tinc0_data \
818             ,mask_datap += __tinc0_mask \
819             ,weight_datap += __tinc0_weight \
820             ,n1_datap += __tinc0_n1 \
821             ,n2_datap += __tinc0_n2 \
822             ,index1_datap += __tinc0_index1 \
823             ,index2_datap += __tinc0_index2 \
824             ,dist_datap += __tinc0_dist \
825             ) \
826             )
827             #define PDL_BROADCASTLOOP_END_clusterdistance_readdata PDL_BROADCASTLOOP_END( \
828             __privtrans->broadcast, \
829             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
830             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
831             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
832             n1_datap -= __tinc1_n1 * __tdims1 + __offsp[3]; \
833             n2_datap -= __tinc1_n2 * __tdims1 + __offsp[4]; \
834             index1_datap -= __tinc1_index1 * __tdims1 + __offsp[5]; \
835             index2_datap -= __tinc1_index2 * __tdims1 + __offsp[6]; \
836             dist_datap -= __tinc1_dist * __tdims1 + __offsp[7]; \
837             )
838 6           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
839 6           register PDL_Indx __inc_index1_n1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_index1_n1;
840 6           register PDL_Indx __inc_index2_n2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,6,0)]; (void)__inc_index2_n2;
841 6           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
842 6           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
843             #ifndef PDL_DECLARE_PARAMS_clusterdistance_1
844             #define PDL_DECLARE_PARAMS_clusterdistance_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_n1,PDL_PPSYM_PARAM_n1,PDL_TYPE_PARAM_n2,PDL_PPSYM_PARAM_n2,PDL_TYPE_PARAM_index1,PDL_PPSYM_PARAM_index1,PDL_TYPE_PARAM_index2,PDL_PPSYM_PARAM_index2,PDL_TYPE_PARAM_dist,PDL_PPSYM_PARAM_dist) \
845             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
846             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
847             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
848             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_n1, n1, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_n1) \
849             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_n2, n2, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_n2) \
850             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_index1, index1, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_index1) \
851             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_index2, index2, (__privtrans->pdls[6]), 1, PDL_PPSYM_PARAM_index2) \
852             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_dist, dist, (__privtrans->pdls[7]), 1, PDL_PPSYM_PARAM_dist)
853             #endif
854             #define PDL_IF_BAD(t,f) f
855 6           switch (__privtrans->__datatype) { /* Start generic switch */
856 0           case PDL_SB: {
857 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
858             {
859 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
860 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
861 0           int transpose=0;
862             double retval;
863              
864 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
865 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
866 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
867 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
868             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
869 0           *__params->distFlag, *__params->methodFlag, transpose);
870 0           (dist_datap)[0] = retval;
871 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
872              
873             /*-- cleanup --*/
874 0 0         if (datapp) free(datapp);
875 0 0         if (maskpp) free(maskpp);
876             }
877 0           } break;
878 0           case PDL_B: {
879 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
880             {
881 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
882 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
883 0           int transpose=0;
884             double retval;
885              
886 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
887 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
888 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
889 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
890             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
891 0           *__params->distFlag, *__params->methodFlag, transpose);
892 0           (dist_datap)[0] = retval;
893 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
894              
895             /*-- cleanup --*/
896 0 0         if (datapp) free(datapp);
897 0 0         if (maskpp) free(maskpp);
898             }
899 0           } break;
900 0           case PDL_S: {
901 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
902             {
903 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
904 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
905 0           int transpose=0;
906             double retval;
907              
908 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
909 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
910 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
911 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
912             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
913 0           *__params->distFlag, *__params->methodFlag, transpose);
914 0           (dist_datap)[0] = retval;
915 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
916              
917             /*-- cleanup --*/
918 0 0         if (datapp) free(datapp);
919 0 0         if (maskpp) free(maskpp);
920             }
921 0           } break;
922 0           case PDL_US: {
923 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
924             {
925 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
926 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
927 0           int transpose=0;
928             double retval;
929              
930 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
931 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
932 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
933 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
934             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
935 0           *__params->distFlag, *__params->methodFlag, transpose);
936 0           (dist_datap)[0] = retval;
937 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
938              
939             /*-- cleanup --*/
940 0 0         if (datapp) free(datapp);
941 0 0         if (maskpp) free(maskpp);
942             }
943 0           } break;
944 0           case PDL_L: {
945 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
946             {
947 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
948 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
949 0           int transpose=0;
950             double retval;
951              
952 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
953 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
954 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
955 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
956             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
957 0           *__params->distFlag, *__params->methodFlag, transpose);
958 0           (dist_datap)[0] = retval;
959 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
960              
961             /*-- cleanup --*/
962 0 0         if (datapp) free(datapp);
963 0 0         if (maskpp) free(maskpp);
964             }
965 0           } break;
966 0           case PDL_UL: {
967 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
968             {
969 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
970 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
971 0           int transpose=0;
972             double retval;
973              
974 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
975 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
976 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
977 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
978             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
979 0           *__params->distFlag, *__params->methodFlag, transpose);
980 0           (dist_datap)[0] = retval;
981 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
982              
983             /*-- cleanup --*/
984 0 0         if (datapp) free(datapp);
985 0 0         if (maskpp) free(maskpp);
986             }
987 0           } break;
988 0           case PDL_IND: {
989 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
990             {
991 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
992 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
993 0           int transpose=0;
994             double retval;
995              
996 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
997 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
998 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
999 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1000             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
1001 0           *__params->distFlag, *__params->methodFlag, transpose);
1002 0           (dist_datap)[0] = retval;
1003 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
1004              
1005             /*-- cleanup --*/
1006 0 0         if (datapp) free(datapp);
1007 0 0         if (maskpp) free(maskpp);
1008             }
1009 0           } break;
1010 0           case PDL_ULL: {
1011 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1012             {
1013 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1014 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1015 0           int transpose=0;
1016             double retval;
1017              
1018 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1019 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1020 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1021 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1022             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
1023 0           *__params->distFlag, *__params->methodFlag, transpose);
1024 0           (dist_datap)[0] = retval;
1025 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
1026              
1027             /*-- cleanup --*/
1028 0 0         if (datapp) free(datapp);
1029 0 0         if (maskpp) free(maskpp);
1030             }
1031 0           } break;
1032 0           case PDL_LL: {
1033 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1034             {
1035 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1036 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1037 0           int transpose=0;
1038             double retval;
1039              
1040 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1041 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1042 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1043 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1044             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
1045 0           *__params->distFlag, *__params->methodFlag, transpose);
1046 0           (dist_datap)[0] = retval;
1047 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
1048              
1049             /*-- cleanup --*/
1050 0 0         if (datapp) free(datapp);
1051 0 0         if (maskpp) free(maskpp);
1052             }
1053 0           } break;
1054 0           case PDL_F: {
1055 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1056             {
1057 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1058 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1059 0           int transpose=0;
1060             double retval;
1061              
1062 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1063 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1064 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1065 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1066             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
1067 0           *__params->distFlag, *__params->methodFlag, transpose);
1068 0           (dist_datap)[0] = retval;
1069 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
1070              
1071             /*-- cleanup --*/
1072 0 0         if (datapp) free(datapp);
1073 0 0         if (maskpp) free(maskpp);
1074             }
1075 0           } break;
1076 0           case PDL_D: {
1077 0 0         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1078             {
1079 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1080 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1081 0           int transpose=0;
1082             double retval;
1083              
1084 0 0         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1085 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1086 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1087 0           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1088             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
1089 0           *__params->distFlag, *__params->methodFlag, transpose);
1090 0           (dist_datap)[0] = retval;
1091 0 0         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    0          
1092              
1093             /*-- cleanup --*/
1094 0 0         if (datapp) free(datapp);
1095 0 0         if (maskpp) free(maskpp);
1096             }
1097 0           } break;
1098 6           case PDL_LD: {
1099 6 50         PDL_DECLARE_PARAMS_clusterdistance_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1100             {
1101 6           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1102 6           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1103 6           int transpose=0;
1104             double retval;
1105              
1106 24 50         PDL_BROADCASTLOOP_START_clusterdistance_readdata
    50          
    50          
    50          
    50          
    100          
    100          
1107 6           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1108 6           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1109 6           retval = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1110             weight_datap, (n1_datap)[0], (n2_datap)[0], index1_datap, index2_datap,
1111 6           *__params->distFlag, *__params->methodFlag, transpose);
1112 6           (dist_datap)[0] = retval;
1113 6 50         PDL_BROADCASTLOOP_END_clusterdistance_readdata
    50          
1114              
1115             /*-- cleanup --*/
1116 6 50         if (datapp) free(datapp);
1117 6 50         if (maskpp) free(maskpp);
1118             }
1119 6           } break;
1120 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in clusterdistance: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
1121             }
1122             #undef PDL_IF_BAD
1123 6           return PDL_err;
1124             }
1125              
1126              
1127             #line 1857 "lib/PDL/PP.pm"
1128             pdl_error pdl_clusterdistance_free(pdl_trans *__privtrans, char destroy) {
1129             pdl_error PDL_err = {0, NULL, 0};
1130             #line 1131 "Cluster.xs"
1131 6           pdl_params_clusterdistance *__params = __privtrans->params; (void)__params;
1132 6 50         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
1133             free(__params->methodFlag); /* CType.get_free */
1134 6           , ) return PDL_err;
1135             }
1136              
1137             static pdl_datatypes pdl_clusterdistance_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, -1 };
1138             static PDL_Indx pdl_clusterdistance_vtable_realdims[] = { 2, 2, 1, 0, 0, 1, 1, 0 };
1139             static char *pdl_clusterdistance_vtable_parnames[] = { "data","mask","weight","n1","n2","index1","index2","dist" };
1140             static short pdl_clusterdistance_vtable_parflags[] = {
1141             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1142             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1143             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1144             PDL_PARAM_ISTYPED,
1145             PDL_PARAM_ISTYPED,
1146             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1147             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1148             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
1149             };
1150             static pdl_datatypes pdl_clusterdistance_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_L, PDL_L, PDL_L, PDL_L, PDL_D };
1151             static PDL_Indx pdl_clusterdistance_vtable_realdims_starts[] = { 0, 2, 4, 5, 5, 5, 6, 7 };
1152             static PDL_Indx pdl_clusterdistance_vtable_realdims_ind_ids[] = { 0, 1, 0, 1, 0, 2, 3 };
1153             static char *pdl_clusterdistance_vtable_indnames[] = { "d","n","n1","n2" };
1154             pdl_transvtable pdl_clusterdistance_vtable = {
1155             PDL_TRANS_DO_BROADCAST, 0, pdl_clusterdistance_vtable_gentypes, 7, 8, NULL /*CORE21*/,
1156             pdl_clusterdistance_vtable_realdims, pdl_clusterdistance_vtable_parnames,
1157             pdl_clusterdistance_vtable_parflags, pdl_clusterdistance_vtable_partypes,
1158             pdl_clusterdistance_vtable_realdims_starts, pdl_clusterdistance_vtable_realdims_ind_ids, 7,
1159             4, pdl_clusterdistance_vtable_indnames,
1160             NULL, pdl_clusterdistance_readdata, NULL,
1161             pdl_clusterdistance_free,
1162             sizeof(pdl_params_clusterdistance),"PDL::Cluster::clusterdistance"
1163             };
1164              
1165              
1166 6           pdl_error pdl_run_clusterdistance(pdl *data,pdl *mask,pdl *weight,pdl *n1,pdl *n2,pdl *index1,pdl *index2,pdl *dist,char *distFlag,char *methodFlag) {
1167 6           pdl_error PDL_err = {0, NULL, 0};
1168 6 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
1169 6           pdl_trans *__privtrans = PDL->create_trans(&pdl_clusterdistance_vtable);
1170 6 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
1171 6           pdl_params_clusterdistance *__params = __privtrans->params;
1172 6           __privtrans->pdls[0] = data;
1173 6           __privtrans->pdls[1] = mask;
1174 6           __privtrans->pdls[2] = weight;
1175 6           __privtrans->pdls[3] = n1;
1176 6           __privtrans->pdls[4] = n2;
1177 6           __privtrans->pdls[5] = index1;
1178 6           __privtrans->pdls[6] = index2;
1179 6           __privtrans->pdls[7] = dist;
1180 6 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
1181 6           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
1182 6           (__params->methodFlag) = malloc(strlen(methodFlag)+1); strcpy(__params->methodFlag,methodFlag); /* CType.get_copy */
1183 6 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
1184 6           return PDL_err;
1185             }
1186              
1187             #line 1846 "lib/PDL/PP.pm"
1188             typedef struct pdl_params_distancematrix {
1189             #line 1190 "Cluster.xs"
1190             char *distFlag;
1191             } pdl_params_distancematrix;
1192              
1193              
1194             #line 1857 "lib/PDL/PP.pm"
1195             pdl_error pdl_distancematrix_readdata(pdl_trans *__privtrans) {
1196             pdl_error PDL_err = {0, NULL, 0};
1197             #line 1198 "Cluster.xs"
1198 1           pdl_params_distancematrix *__params = __privtrans->params; (void)__params;
1199 1 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in distancematrix:" "broadcast.incs NULL");
1200             /* broadcastloop declarations */
1201             int __brcloopval;
1202             register PDL_Indx __tind0,__tind1; /* counters along dim */
1203 1           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
1204             /* dims here are how many steps along those dims */
1205 1           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
1206 1           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
1207 1           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
1208 1           register PDL_Indx __tinc0_dists = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
1209 1           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
1210 1           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
1211 1           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
1212 1           register PDL_Indx __tinc1_dists = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
1213             #define PDL_BROADCASTLOOP_START_distancematrix_readdata PDL_BROADCASTLOOP_START( \
1214             readdata, \
1215             __privtrans->broadcast, \
1216             __privtrans->vtable, \
1217             data_datap += __offsp[0]; \
1218             mask_datap += __offsp[1]; \
1219             weight_datap += __offsp[2]; \
1220             dists_datap += __offsp[3]; \
1221             , \
1222             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
1223             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
1224             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
1225             ,dists_datap += __tinc1_dists - __tinc0_dists * __tdims0 \
1226             ), \
1227             ( ,data_datap += __tinc0_data \
1228             ,mask_datap += __tinc0_mask \
1229             ,weight_datap += __tinc0_weight \
1230             ,dists_datap += __tinc0_dists \
1231             ) \
1232             )
1233             #define PDL_BROADCASTLOOP_END_distancematrix_readdata PDL_BROADCASTLOOP_END( \
1234             __privtrans->broadcast, \
1235             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
1236             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
1237             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
1238             dists_datap -= __tinc1_dists * __tdims1 + __offsp[3]; \
1239             )
1240 1           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
1241 1           register PDL_Indx __inc_dists_n0 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_dists_n0;register PDL_Indx __inc_dists_n1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,1)]; (void)__inc_dists_n1;
1242 1           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
1243 1           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
1244             #ifndef PDL_DECLARE_PARAMS_distancematrix_1
1245             #define PDL_DECLARE_PARAMS_distancematrix_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_dists,PDL_PPSYM_PARAM_dists) \
1246             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
1247             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
1248             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
1249             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_dists, dists, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_dists)
1250             #endif
1251             #define PDL_IF_BAD(t,f) f
1252 1           switch (__privtrans->__datatype) { /* Start generic switch */
1253 0           case PDL_SB: {
1254 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1255             {
1256 0           int transpose = 0;
1257 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1258 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1259             double **retval;
1260 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1261 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1262 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1263 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1264 0           weight_datap, *__params->distFlag, transpose);
1265 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1266 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1267 0 0         if (retval) free(retval);
1268 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1269             /*-- cleanup --*/
1270 0 0         if (datapp) free(datapp);
1271 0 0         if (maskpp) free(maskpp);
1272             }
1273 0           } break;
1274 0           case PDL_B: {
1275 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1276             {
1277 0           int transpose = 0;
1278 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1279 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1280             double **retval;
1281 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1282 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1283 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1284 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1285 0           weight_datap, *__params->distFlag, transpose);
1286 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1287 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1288 0 0         if (retval) free(retval);
1289 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1290             /*-- cleanup --*/
1291 0 0         if (datapp) free(datapp);
1292 0 0         if (maskpp) free(maskpp);
1293             }
1294 0           } break;
1295 0           case PDL_S: {
1296 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1297             {
1298 0           int transpose = 0;
1299 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1300 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1301             double **retval;
1302 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1303 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1304 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1305 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1306 0           weight_datap, *__params->distFlag, transpose);
1307 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1308 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1309 0 0         if (retval) free(retval);
1310 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1311             /*-- cleanup --*/
1312 0 0         if (datapp) free(datapp);
1313 0 0         if (maskpp) free(maskpp);
1314             }
1315 0           } break;
1316 0           case PDL_US: {
1317 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1318             {
1319 0           int transpose = 0;
1320 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1321 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1322             double **retval;
1323 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1324 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1325 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1326 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1327 0           weight_datap, *__params->distFlag, transpose);
1328 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1329 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1330 0 0         if (retval) free(retval);
1331 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1332             /*-- cleanup --*/
1333 0 0         if (datapp) free(datapp);
1334 0 0         if (maskpp) free(maskpp);
1335             }
1336 0           } break;
1337 0           case PDL_L: {
1338 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1339             {
1340 0           int transpose = 0;
1341 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1342 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1343             double **retval;
1344 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1345 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1346 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1347 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1348 0           weight_datap, *__params->distFlag, transpose);
1349 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1350 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1351 0 0         if (retval) free(retval);
1352 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1353             /*-- cleanup --*/
1354 0 0         if (datapp) free(datapp);
1355 0 0         if (maskpp) free(maskpp);
1356             }
1357 0           } break;
1358 0           case PDL_UL: {
1359 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1360             {
1361 0           int transpose = 0;
1362 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1363 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1364             double **retval;
1365 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1366 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1367 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1368 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1369 0           weight_datap, *__params->distFlag, transpose);
1370 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1371 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1372 0 0         if (retval) free(retval);
1373 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1374             /*-- cleanup --*/
1375 0 0         if (datapp) free(datapp);
1376 0 0         if (maskpp) free(maskpp);
1377             }
1378 0           } break;
1379 0           case PDL_IND: {
1380 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1381             {
1382 0           int transpose = 0;
1383 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1384 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1385             double **retval;
1386 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1387 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1388 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1389 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1390 0           weight_datap, *__params->distFlag, transpose);
1391 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1392 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1393 0 0         if (retval) free(retval);
1394 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1395             /*-- cleanup --*/
1396 0 0         if (datapp) free(datapp);
1397 0 0         if (maskpp) free(maskpp);
1398             }
1399 0           } break;
1400 0           case PDL_ULL: {
1401 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1402             {
1403 0           int transpose = 0;
1404 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1405 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1406             double **retval;
1407 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1408 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1409 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1410 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1411 0           weight_datap, *__params->distFlag, transpose);
1412 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1413 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1414 0 0         if (retval) free(retval);
1415 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1416             /*-- cleanup --*/
1417 0 0         if (datapp) free(datapp);
1418 0 0         if (maskpp) free(maskpp);
1419             }
1420 0           } break;
1421 0           case PDL_LL: {
1422 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1423             {
1424 0           int transpose = 0;
1425 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1426 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1427             double **retval;
1428 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1429 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1430 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1431 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1432 0           weight_datap, *__params->distFlag, transpose);
1433 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1434 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1435 0 0         if (retval) free(retval);
1436 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1437             /*-- cleanup --*/
1438 0 0         if (datapp) free(datapp);
1439 0 0         if (maskpp) free(maskpp);
1440             }
1441 0           } break;
1442 0           case PDL_F: {
1443 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1444             {
1445 0           int transpose = 0;
1446 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1447 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1448             double **retval;
1449 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1450 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1451 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1452 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1453 0           weight_datap, *__params->distFlag, transpose);
1454 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1455 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1456 0 0         if (retval) free(retval);
1457 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1458             /*-- cleanup --*/
1459 0 0         if (datapp) free(datapp);
1460 0 0         if (maskpp) free(maskpp);
1461             }
1462 0           } break;
1463 0           case PDL_D: {
1464 0 0         PDL_DECLARE_PARAMS_distancematrix_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1465             {
1466 0           int transpose = 0;
1467 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1468 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1469             double **retval;
1470 0 0         PDL_BROADCASTLOOP_START_distancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1471 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1472 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1473 0           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1474 0           weight_datap, *__params->distFlag, transpose);
1475 0 0         if (!retval) barf("Cluster matrix allocation failed!");
1476 0           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1477 0 0         if (retval) free(retval);
1478 0 0         PDL_BROADCASTLOOP_END_distancematrix_readdata
    0          
1479             /*-- cleanup --*/
1480 0 0         if (datapp) free(datapp);
1481 0 0         if (maskpp) free(maskpp);
1482             }
1483 0           } break;
1484 1           case PDL_LD: {
1485 1 50         PDL_DECLARE_PARAMS_distancematrix_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1486             {
1487 1           int transpose = 0;
1488 1           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1489 1           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1490             double **retval;
1491 4 50         PDL_BROADCASTLOOP_START_distancematrix_readdata
    50          
    50          
    50          
    50          
    100          
    100          
1492 1           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
1493 1           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
1494 1           retval = distancematrix(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
1495 1           weight_datap, *__params->distFlag, transpose);
1496 1 50         if (!retval) barf("Cluster matrix allocation failed!");
1497 1           pp2pdl_ragged_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], retval, dists_datap);
1498 1 50         if (retval) free(retval);
1499 1 50         PDL_BROADCASTLOOP_END_distancematrix_readdata
    50          
1500             /*-- cleanup --*/
1501 1 50         if (datapp) free(datapp);
1502 1 50         if (maskpp) free(maskpp);
1503             }
1504 1           } break;
1505 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in distancematrix: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
1506             }
1507             #undef PDL_IF_BAD
1508 1           return PDL_err;
1509             }
1510              
1511              
1512             #line 1857 "lib/PDL/PP.pm"
1513             pdl_error pdl_distancematrix_free(pdl_trans *__privtrans, char destroy) {
1514             pdl_error PDL_err = {0, NULL, 0};
1515             #line 1516 "Cluster.xs"
1516 1           pdl_params_distancematrix *__params = __privtrans->params; (void)__params;
1517 1 50         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
1518 1           , ) return PDL_err;
1519             }
1520              
1521             static pdl_datatypes pdl_distancematrix_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, -1 };
1522             static PDL_Indx pdl_distancematrix_vtable_realdims[] = { 2, 2, 1, 2 };
1523             static char *pdl_distancematrix_vtable_parnames[] = { "data","mask","weight","dists" };
1524             static short pdl_distancematrix_vtable_parflags[] = {
1525             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1526             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1527             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1528             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
1529             };
1530             static pdl_datatypes pdl_distancematrix_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_D };
1531             static PDL_Indx pdl_distancematrix_vtable_realdims_starts[] = { 0, 2, 4, 5 };
1532             static PDL_Indx pdl_distancematrix_vtable_realdims_ind_ids[] = { 0, 1, 0, 1, 0, 1, 1 };
1533             static char *pdl_distancematrix_vtable_indnames[] = { "d","n" };
1534             pdl_transvtable pdl_distancematrix_vtable = {
1535             PDL_TRANS_DO_BROADCAST, 0, pdl_distancematrix_vtable_gentypes, 3, 4, NULL /*CORE21*/,
1536             pdl_distancematrix_vtable_realdims, pdl_distancematrix_vtable_parnames,
1537             pdl_distancematrix_vtable_parflags, pdl_distancematrix_vtable_partypes,
1538             pdl_distancematrix_vtable_realdims_starts, pdl_distancematrix_vtable_realdims_ind_ids, 7,
1539             2, pdl_distancematrix_vtable_indnames,
1540             NULL, pdl_distancematrix_readdata, NULL,
1541             pdl_distancematrix_free,
1542             sizeof(pdl_params_distancematrix),"PDL::Cluster::distancematrix"
1543             };
1544              
1545              
1546 1           pdl_error pdl_run_distancematrix(pdl *data,pdl *mask,pdl *weight,pdl *dists,char *distFlag) {
1547 1           pdl_error PDL_err = {0, NULL, 0};
1548 1 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
1549 1           pdl_trans *__privtrans = PDL->create_trans(&pdl_distancematrix_vtable);
1550 1 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
1551 1           pdl_params_distancematrix *__params = __privtrans->params;
1552 1           __privtrans->pdls[0] = data;
1553 1           __privtrans->pdls[1] = mask;
1554 1           __privtrans->pdls[2] = weight;
1555 1           __privtrans->pdls[3] = dists;
1556 1 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
1557 1           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
1558 1 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
1559 1           return PDL_err;
1560             }
1561              
1562             #line 1846 "lib/PDL/PP.pm"
1563             typedef struct pdl_params_getclustercentroids {
1564             #line 1565 "Cluster.xs"
1565             char *ctrMethodFlag;
1566             } pdl_params_getclustercentroids;
1567              
1568              
1569             #line 1857 "lib/PDL/PP.pm"
1570             pdl_error pdl_getclustercentroids_readdata(pdl_trans *__privtrans) {
1571             pdl_error PDL_err = {0, NULL, 0};
1572             #line 1573 "Cluster.xs"
1573 0           pdl_params_getclustercentroids *__params = __privtrans->params; (void)__params;
1574 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in getclustercentroids:" "broadcast.incs NULL");
1575             /* broadcastloop declarations */
1576             int __brcloopval;
1577             register PDL_Indx __tind0,__tind1; /* counters along dim */
1578 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
1579             /* dims here are how many steps along those dims */
1580 0           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
1581 0           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
1582 0           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
1583 0           register PDL_Indx __tinc0_cdata = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
1584 0           register PDL_Indx __tinc0_cmask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
1585 0           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
1586 0           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
1587 0           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
1588 0           register PDL_Indx __tinc1_cdata = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
1589 0           register PDL_Indx __tinc1_cmask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
1590             #define PDL_BROADCASTLOOP_START_getclustercentroids_readdata PDL_BROADCASTLOOP_START( \
1591             readdata, \
1592             __privtrans->broadcast, \
1593             __privtrans->vtable, \
1594             data_datap += __offsp[0]; \
1595             mask_datap += __offsp[1]; \
1596             clusterids_datap += __offsp[2]; \
1597             cdata_datap += __offsp[3]; \
1598             cmask_datap += __offsp[4]; \
1599             , \
1600             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
1601             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
1602             ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
1603             ,cdata_datap += __tinc1_cdata - __tinc0_cdata * __tdims0 \
1604             ,cmask_datap += __tinc1_cmask - __tinc0_cmask * __tdims0 \
1605             ), \
1606             ( ,data_datap += __tinc0_data \
1607             ,mask_datap += __tinc0_mask \
1608             ,clusterids_datap += __tinc0_clusterids \
1609             ,cdata_datap += __tinc0_cdata \
1610             ,cmask_datap += __tinc0_cmask \
1611             ) \
1612             )
1613             #define PDL_BROADCASTLOOP_END_getclustercentroids_readdata PDL_BROADCASTLOOP_END( \
1614             __privtrans->broadcast, \
1615             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
1616             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
1617             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[2]; \
1618             cdata_datap -= __tinc1_cdata * __tdims1 + __offsp[3]; \
1619             cmask_datap -= __tinc1_cmask * __tdims1 + __offsp[4]; \
1620             )
1621 0           register PDL_Indx __inc_cdata_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_cdata_d;register PDL_Indx __inc_cdata_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,1)]; (void)__inc_cdata_k;
1622 0           register PDL_Indx __inc_clusterids_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_clusterids_n;
1623 0           register PDL_Indx __inc_cmask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_cmask_d;register PDL_Indx __inc_cmask_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,1)]; (void)__inc_cmask_k;
1624 0           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
1625 0           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
1626             #ifndef PDL_DECLARE_PARAMS_getclustercentroids_1
1627             #define PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids,PDL_TYPE_PARAM_cdata,PDL_PPSYM_PARAM_cdata,PDL_TYPE_PARAM_cmask,PDL_PPSYM_PARAM_cmask) \
1628             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
1629             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
1630             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_clusterids) \
1631             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cdata, cdata, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_cdata) \
1632             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cmask, cmask, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_cmask)
1633             #endif
1634             #define PDL_IF_BAD(t,f) f
1635 0           switch (__privtrans->__datatype) { /* Start generic switch */
1636 0           case PDL_SB: {
1637 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1638             {
1639 0           int transpose = 0;
1640 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1641 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1642 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1643 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1644              
1645 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1646 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1647 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1648 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1649 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1650              
1651 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1652 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1653 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1654              
1655             /*-- cleanup --*/
1656 0 0         if (datapp) free(datapp);
1657 0 0         if (maskpp) free(maskpp);
1658 0 0         if (cdatapp) free(cdatapp);
1659 0 0         if (cmaskpp) free(cmaskpp);
1660             }
1661 0           } break;
1662 0           case PDL_B: {
1663 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1664             {
1665 0           int transpose = 0;
1666 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1667 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1668 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1669 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1670              
1671 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1672 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1673 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1674 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1675 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1676              
1677 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1678 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1679 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1680              
1681             /*-- cleanup --*/
1682 0 0         if (datapp) free(datapp);
1683 0 0         if (maskpp) free(maskpp);
1684 0 0         if (cdatapp) free(cdatapp);
1685 0 0         if (cmaskpp) free(cmaskpp);
1686             }
1687 0           } break;
1688 0           case PDL_S: {
1689 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1690             {
1691 0           int transpose = 0;
1692 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1693 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1694 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1695 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1696              
1697 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1698 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1699 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1700 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1701 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1702              
1703 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1704 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1705 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1706              
1707             /*-- cleanup --*/
1708 0 0         if (datapp) free(datapp);
1709 0 0         if (maskpp) free(maskpp);
1710 0 0         if (cdatapp) free(cdatapp);
1711 0 0         if (cmaskpp) free(cmaskpp);
1712             }
1713 0           } break;
1714 0           case PDL_US: {
1715 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1716             {
1717 0           int transpose = 0;
1718 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1719 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1720 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1721 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1722              
1723 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1724 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1725 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1726 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1727 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1728              
1729 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1730 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1731 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1732              
1733             /*-- cleanup --*/
1734 0 0         if (datapp) free(datapp);
1735 0 0         if (maskpp) free(maskpp);
1736 0 0         if (cdatapp) free(cdatapp);
1737 0 0         if (cmaskpp) free(cmaskpp);
1738             }
1739 0           } break;
1740 0           case PDL_L: {
1741 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1742             {
1743 0           int transpose = 0;
1744 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1745 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1746 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1747 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1748              
1749 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1750 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1751 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1752 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1753 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1754              
1755 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1756 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1757 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1758              
1759             /*-- cleanup --*/
1760 0 0         if (datapp) free(datapp);
1761 0 0         if (maskpp) free(maskpp);
1762 0 0         if (cdatapp) free(cdatapp);
1763 0 0         if (cmaskpp) free(cmaskpp);
1764             }
1765 0           } break;
1766 0           case PDL_UL: {
1767 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1768             {
1769 0           int transpose = 0;
1770 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1771 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1772 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1773 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1774              
1775 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1776 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1777 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1778 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1779 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1780              
1781 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1782 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1783 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1784              
1785             /*-- cleanup --*/
1786 0 0         if (datapp) free(datapp);
1787 0 0         if (maskpp) free(maskpp);
1788 0 0         if (cdatapp) free(cdatapp);
1789 0 0         if (cmaskpp) free(cmaskpp);
1790             }
1791 0           } break;
1792 0           case PDL_IND: {
1793 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1794             {
1795 0           int transpose = 0;
1796 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1797 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1798 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1799 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1800              
1801 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1802 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1803 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1804 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1805 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1806              
1807 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1808 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1809 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1810              
1811             /*-- cleanup --*/
1812 0 0         if (datapp) free(datapp);
1813 0 0         if (maskpp) free(maskpp);
1814 0 0         if (cdatapp) free(cdatapp);
1815 0 0         if (cmaskpp) free(cmaskpp);
1816             }
1817 0           } break;
1818 0           case PDL_ULL: {
1819 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1820             {
1821 0           int transpose = 0;
1822 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1823 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1824 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1825 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1826              
1827 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1828 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1829 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1830 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1831 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1832              
1833 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1834 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1835 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1836              
1837             /*-- cleanup --*/
1838 0 0         if (datapp) free(datapp);
1839 0 0         if (maskpp) free(maskpp);
1840 0 0         if (cdatapp) free(cdatapp);
1841 0 0         if (cmaskpp) free(cmaskpp);
1842             }
1843 0           } break;
1844 0           case PDL_LL: {
1845 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1846             {
1847 0           int transpose = 0;
1848 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1849 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1850 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1851 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1852              
1853 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1854 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1855 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1856 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1857 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1858              
1859 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1860 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1861 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1862              
1863             /*-- cleanup --*/
1864 0 0         if (datapp) free(datapp);
1865 0 0         if (maskpp) free(maskpp);
1866 0 0         if (cdatapp) free(cdatapp);
1867 0 0         if (cmaskpp) free(cmaskpp);
1868             }
1869 0           } break;
1870 0           case PDL_F: {
1871 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1872             {
1873 0           int transpose = 0;
1874 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1875 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1876 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1877 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1878              
1879 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1880 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1881 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1882 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1883 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1884              
1885 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1886 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1887 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1888              
1889             /*-- cleanup --*/
1890 0 0         if (datapp) free(datapp);
1891 0 0         if (maskpp) free(maskpp);
1892 0 0         if (cdatapp) free(cdatapp);
1893 0 0         if (cmaskpp) free(cmaskpp);
1894             }
1895 0           } break;
1896 0           case PDL_D: {
1897 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1898             {
1899 0           int transpose = 0;
1900 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1901 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1902 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1903 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1904              
1905 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1906 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1907 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1908 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1909 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1910              
1911 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1912 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1913 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1914              
1915             /*-- cleanup --*/
1916 0 0         if (datapp) free(datapp);
1917 0 0         if (maskpp) free(maskpp);
1918 0 0         if (cdatapp) free(cdatapp);
1919 0 0         if (cmaskpp) free(cmaskpp);
1920             }
1921 0           } break;
1922 0           case PDL_LD: {
1923 0 0         PDL_DECLARE_PARAMS_getclustercentroids_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1924             {
1925 0           int transpose = 0;
1926 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
1927 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
1928 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
1929 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
1930              
1931 0 0         PDL_BROADCASTLOOP_START_getclustercentroids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1932 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
1933 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
1934 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
1935 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
1936              
1937 0           getclustercentroids(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], __privtrans->ind_sizes[0], datapp, maskpp,
1938 0           clusterids_datap, cdatapp, cmaskpp, transpose, *__params->ctrMethodFlag);
1939 0 0         PDL_BROADCASTLOOP_END_getclustercentroids_readdata
    0          
1940              
1941             /*-- cleanup --*/
1942 0 0         if (datapp) free(datapp);
1943 0 0         if (maskpp) free(maskpp);
1944 0 0         if (cdatapp) free(cdatapp);
1945 0 0         if (cmaskpp) free(cmaskpp);
1946             }
1947 0           } break;
1948 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in getclustercentroids: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
1949             }
1950             #undef PDL_IF_BAD
1951 0           return PDL_err;
1952             }
1953              
1954              
1955             #line 1857 "lib/PDL/PP.pm"
1956             pdl_error pdl_getclustercentroids_free(pdl_trans *__privtrans, char destroy) {
1957             pdl_error PDL_err = {0, NULL, 0};
1958             #line 1959 "Cluster.xs"
1959 0           pdl_params_getclustercentroids *__params = __privtrans->params; (void)__params;
1960 0 0         PDL_FREE_CODE(__privtrans, destroy, free(__params->ctrMethodFlag); /* CType.get_free */
1961 0           , ) return PDL_err;
1962             }
1963              
1964             static pdl_datatypes pdl_getclustercentroids_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, -1 };
1965             static PDL_Indx pdl_getclustercentroids_vtable_realdims[] = { 2, 2, 1, 2, 2 };
1966             static char *pdl_getclustercentroids_vtable_parnames[] = { "data","mask","clusterids","cdata","cmask" };
1967             static short pdl_getclustercentroids_vtable_parflags[] = {
1968             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1969             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1970             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
1971             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
1972             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
1973             };
1974             static pdl_datatypes pdl_getclustercentroids_vtable_partypes[] = { PDL_D, PDL_L, PDL_L, PDL_D, PDL_L };
1975             static PDL_Indx pdl_getclustercentroids_vtable_realdims_starts[] = { 0, 2, 4, 5, 7 };
1976             static PDL_Indx pdl_getclustercentroids_vtable_realdims_ind_ids[] = { 0, 2, 0, 2, 2, 0, 1, 0, 1 };
1977             static char *pdl_getclustercentroids_vtable_indnames[] = { "d","k","n" };
1978             pdl_transvtable pdl_getclustercentroids_vtable = {
1979             PDL_TRANS_DO_BROADCAST, 0, pdl_getclustercentroids_vtable_gentypes, 3, 5, NULL /*CORE21*/,
1980             pdl_getclustercentroids_vtable_realdims, pdl_getclustercentroids_vtable_parnames,
1981             pdl_getclustercentroids_vtable_parflags, pdl_getclustercentroids_vtable_partypes,
1982             pdl_getclustercentroids_vtable_realdims_starts, pdl_getclustercentroids_vtable_realdims_ind_ids, 9,
1983             3, pdl_getclustercentroids_vtable_indnames,
1984             NULL, pdl_getclustercentroids_readdata, NULL,
1985             pdl_getclustercentroids_free,
1986             sizeof(pdl_params_getclustercentroids),"PDL::Cluster::getclustercentroids"
1987             };
1988              
1989              
1990 0           pdl_error pdl_run_getclustercentroids(pdl *data,pdl *mask,pdl *clusterids,pdl *cdata,pdl *cmask,char *ctrMethodFlag) {
1991 0           pdl_error PDL_err = {0, NULL, 0};
1992 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
1993 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_getclustercentroids_vtable);
1994 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
1995 0           pdl_params_getclustercentroids *__params = __privtrans->params;
1996 0           __privtrans->pdls[0] = data;
1997 0           __privtrans->pdls[1] = mask;
1998 0           __privtrans->pdls[2] = clusterids;
1999 0           __privtrans->pdls[3] = cdata;
2000 0           __privtrans->pdls[4] = cmask;
2001 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
2002 0           (__params->ctrMethodFlag) = malloc(strlen(ctrMethodFlag)+1); strcpy(__params->ctrMethodFlag,ctrMethodFlag); /* CType.get_copy */
2003 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
2004 0           return PDL_err;
2005             }
2006              
2007             #line 1857 "lib/PDL/PP.pm"
2008             pdl_error pdl_getclustermedoids_readdata(pdl_trans *__privtrans) {
2009             pdl_error PDL_err = {0, NULL, 0};
2010             #line 2011 "Cluster.xs"
2011 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in getclustermedoids:" "broadcast.incs NULL");
2012             /* broadcastloop declarations */
2013             int __brcloopval;
2014             register PDL_Indx __tind0,__tind1; /* counters along dim */
2015 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
2016             /* dims here are how many steps along those dims */
2017 0           register PDL_Indx __tinc0_distance = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
2018 0           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
2019 0           register PDL_Indx __tinc0_centroids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
2020 0           register PDL_Indx __tinc0_errors = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
2021 0           register PDL_Indx __tinc1_distance = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
2022 0           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
2023 0           register PDL_Indx __tinc1_centroids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
2024 0           register PDL_Indx __tinc1_errors = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
2025             #define PDL_BROADCASTLOOP_START_getclustermedoids_readdata PDL_BROADCASTLOOP_START( \
2026             readdata, \
2027             __privtrans->broadcast, \
2028             __privtrans->vtable, \
2029             distance_datap += __offsp[0]; \
2030             clusterids_datap += __offsp[1]; \
2031             centroids_datap += __offsp[2]; \
2032             errors_datap += __offsp[3]; \
2033             , \
2034             ( ,distance_datap += __tinc1_distance - __tinc0_distance * __tdims0 \
2035             ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
2036             ,centroids_datap += __tinc1_centroids - __tinc0_centroids * __tdims0 \
2037             ,errors_datap += __tinc1_errors - __tinc0_errors * __tdims0 \
2038             ), \
2039             ( ,distance_datap += __tinc0_distance \
2040             ,clusterids_datap += __tinc0_clusterids \
2041             ,centroids_datap += __tinc0_centroids \
2042             ,errors_datap += __tinc0_errors \
2043             ) \
2044             )
2045             #define PDL_BROADCASTLOOP_END_getclustermedoids_readdata PDL_BROADCASTLOOP_END( \
2046             __privtrans->broadcast, \
2047             distance_datap -= __tinc1_distance * __tdims1 + __offsp[0]; \
2048             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[1]; \
2049             centroids_datap -= __tinc1_centroids * __tdims1 + __offsp[2]; \
2050             errors_datap -= __tinc1_errors * __tdims1 + __offsp[3]; \
2051             )
2052 0           register PDL_Indx __inc_centroids_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_centroids_k;
2053 0           register PDL_Indx __inc_clusterids_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_clusterids_n;
2054 0           register PDL_Indx __inc_distance_n0 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_distance_n0;register PDL_Indx __inc_distance_n1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_distance_n1;
2055 0           register PDL_Indx __inc_errors_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_errors_k;
2056             #ifndef PDL_DECLARE_PARAMS_getclustermedoids_1
2057             #define PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_distance,PDL_PPSYM_PARAM_distance,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids,PDL_TYPE_PARAM_centroids,PDL_PPSYM_PARAM_centroids,PDL_TYPE_PARAM_errors,PDL_PPSYM_PARAM_errors) \
2058             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_distance, distance, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_distance) \
2059             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_clusterids) \
2060             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_centroids, centroids, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_centroids) \
2061             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_errors, errors, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_errors)
2062             #endif
2063             #define PDL_IF_BAD(t,f) f
2064 0           switch (__privtrans->__datatype) { /* Start generic switch */
2065 0           case PDL_SB: {
2066 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2067             {
2068 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2069 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2070 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2071 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2072             clusterids_datap, centroids_datap, errors_datap);
2073 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2074             /*-- cleanup --*/
2075 0 0         if (distpp) free(distpp);
2076             }
2077 0           } break;
2078 0           case PDL_B: {
2079 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2080             {
2081 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2082 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2083 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2084 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2085             clusterids_datap, centroids_datap, errors_datap);
2086 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2087             /*-- cleanup --*/
2088 0 0         if (distpp) free(distpp);
2089             }
2090 0           } break;
2091 0           case PDL_S: {
2092 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2093             {
2094 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2095 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2096 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2097 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2098             clusterids_datap, centroids_datap, errors_datap);
2099 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2100             /*-- cleanup --*/
2101 0 0         if (distpp) free(distpp);
2102             }
2103 0           } break;
2104 0           case PDL_US: {
2105 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2106             {
2107 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2108 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2109 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2110 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2111             clusterids_datap, centroids_datap, errors_datap);
2112 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2113             /*-- cleanup --*/
2114 0 0         if (distpp) free(distpp);
2115             }
2116 0           } break;
2117 0           case PDL_L: {
2118 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2119             {
2120 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2121 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2122 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2123 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2124             clusterids_datap, centroids_datap, errors_datap);
2125 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2126             /*-- cleanup --*/
2127 0 0         if (distpp) free(distpp);
2128             }
2129 0           } break;
2130 0           case PDL_UL: {
2131 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2132             {
2133 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2134 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2135 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2136 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2137             clusterids_datap, centroids_datap, errors_datap);
2138 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2139             /*-- cleanup --*/
2140 0 0         if (distpp) free(distpp);
2141             }
2142 0           } break;
2143 0           case PDL_IND: {
2144 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2145             {
2146 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2147 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2148 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2149 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2150             clusterids_datap, centroids_datap, errors_datap);
2151 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2152             /*-- cleanup --*/
2153 0 0         if (distpp) free(distpp);
2154             }
2155 0           } break;
2156 0           case PDL_ULL: {
2157 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2158             {
2159 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2160 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2161 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2162 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2163             clusterids_datap, centroids_datap, errors_datap);
2164 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2165             /*-- cleanup --*/
2166 0 0         if (distpp) free(distpp);
2167             }
2168 0           } break;
2169 0           case PDL_LL: {
2170 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2171             {
2172 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2173 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2174 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2175 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2176             clusterids_datap, centroids_datap, errors_datap);
2177 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2178             /*-- cleanup --*/
2179 0 0         if (distpp) free(distpp);
2180             }
2181 0           } break;
2182 0           case PDL_F: {
2183 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2184             {
2185 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2186 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2187 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2188 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2189             clusterids_datap, centroids_datap, errors_datap);
2190 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2191             /*-- cleanup --*/
2192 0 0         if (distpp) free(distpp);
2193             }
2194 0           } break;
2195 0           case PDL_D: {
2196 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2197             {
2198 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2199 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2200 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2201 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2202             clusterids_datap, centroids_datap, errors_datap);
2203 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2204             /*-- cleanup --*/
2205 0 0         if (distpp) free(distpp);
2206             }
2207 0           } break;
2208 0           case PDL_LD: {
2209 0 0         PDL_DECLARE_PARAMS_getclustermedoids_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2210             {
2211 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2212 0 0         PDL_BROADCASTLOOP_START_getclustermedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2213 0           p2pp_dbl_ragged(__privtrans->ind_sizes[1], __privtrans->ind_sizes[1], distance_datap, distpp);
2214 0           getclustermedoids(__privtrans->ind_sizes[0], __privtrans->ind_sizes[1], distpp,
2215             clusterids_datap, centroids_datap, errors_datap);
2216 0 0         PDL_BROADCASTLOOP_END_getclustermedoids_readdata
    0          
2217             /*-- cleanup --*/
2218 0 0         if (distpp) free(distpp);
2219             }
2220 0           } break;
2221 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in getclustermedoids: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
2222             }
2223             #undef PDL_IF_BAD
2224 0           return PDL_err;
2225             }
2226              
2227             static pdl_datatypes pdl_getclustermedoids_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, -1 };
2228             static PDL_Indx pdl_getclustermedoids_vtable_realdims[] = { 2, 1, 1, 1 };
2229             static char *pdl_getclustermedoids_vtable_parnames[] = { "distance","clusterids","centroids","errors" };
2230             static short pdl_getclustermedoids_vtable_parflags[] = {
2231             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
2232             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
2233             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
2234             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
2235             };
2236             static pdl_datatypes pdl_getclustermedoids_vtable_partypes[] = { PDL_D, PDL_L, PDL_L, PDL_D };
2237             static PDL_Indx pdl_getclustermedoids_vtable_realdims_starts[] = { 0, 2, 3, 4 };
2238             static PDL_Indx pdl_getclustermedoids_vtable_realdims_ind_ids[] = { 1, 1, 1, 0, 0 };
2239             static char *pdl_getclustermedoids_vtable_indnames[] = { "k","n" };
2240             pdl_transvtable pdl_getclustermedoids_vtable = {
2241             PDL_TRANS_DO_BROADCAST, 0, pdl_getclustermedoids_vtable_gentypes, 2, 4, NULL /*CORE21*/,
2242             pdl_getclustermedoids_vtable_realdims, pdl_getclustermedoids_vtable_parnames,
2243             pdl_getclustermedoids_vtable_parflags, pdl_getclustermedoids_vtable_partypes,
2244             pdl_getclustermedoids_vtable_realdims_starts, pdl_getclustermedoids_vtable_realdims_ind_ids, 5,
2245             2, pdl_getclustermedoids_vtable_indnames,
2246             NULL, pdl_getclustermedoids_readdata, NULL,
2247             NULL,
2248             0,"PDL::Cluster::getclustermedoids"
2249             };
2250              
2251              
2252 0           pdl_error pdl_run_getclustermedoids(pdl *distance,pdl *clusterids,pdl *centroids,pdl *errors) {
2253 0           pdl_error PDL_err = {0, NULL, 0};
2254 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
2255 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_getclustermedoids_vtable);
2256 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
2257 0           __privtrans->pdls[0] = distance;
2258 0           __privtrans->pdls[1] = clusterids;
2259 0           __privtrans->pdls[2] = centroids;
2260 0           __privtrans->pdls[3] = errors;
2261 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
2262 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
2263 0           return PDL_err;
2264             }
2265              
2266             #line 1846 "lib/PDL/PP.pm"
2267             typedef struct pdl_params_kcluster {
2268             #line 2269 "Cluster.xs"
2269             char *distFlag;
2270             char *ctrMethodFlag;
2271             } pdl_params_kcluster;
2272              
2273              
2274             #line 1857 "lib/PDL/PP.pm"
2275             pdl_error pdl_kcluster_readdata(pdl_trans *__privtrans) {
2276             pdl_error PDL_err = {0, NULL, 0};
2277             #line 2278 "Cluster.xs"
2278 3           pdl_params_kcluster *__params = __privtrans->params; (void)__params;
2279 3 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in kcluster:" "broadcast.incs NULL");
2280             /* broadcastloop declarations */
2281             int __brcloopval;
2282             register PDL_Indx __tind0,__tind1; /* counters along dim */
2283 3           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
2284             /* dims here are how many steps along those dims */
2285 3           register PDL_Indx __tinc0_nclusters = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
2286 3           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
2287 3           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
2288 3           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
2289 3           register PDL_Indx __tinc0_npass = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
2290 3           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
2291 3           register PDL_Indx __tinc0_error = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,0);
2292 3           register PDL_Indx __tinc0_nfound = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,0);
2293 3           register PDL_Indx __tinc1_nclusters = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
2294 3           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
2295 3           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
2296 3           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
2297 3           register PDL_Indx __tinc1_npass = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
2298 3           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
2299 3           register PDL_Indx __tinc1_error = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,1);
2300 3           register PDL_Indx __tinc1_nfound = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,1);
2301             #define PDL_BROADCASTLOOP_START_kcluster_readdata PDL_BROADCASTLOOP_START( \
2302             readdata, \
2303             __privtrans->broadcast, \
2304             __privtrans->vtable, \
2305             nclusters_datap += __offsp[0]; \
2306             data_datap += __offsp[1]; \
2307             mask_datap += __offsp[2]; \
2308             weight_datap += __offsp[3]; \
2309             npass_datap += __offsp[4]; \
2310             clusterids_datap += __offsp[5]; \
2311             error_datap += __offsp[6]; \
2312             nfound_datap += __offsp[7]; \
2313             , \
2314             ( ,nclusters_datap += __tinc1_nclusters - __tinc0_nclusters * __tdims0 \
2315             ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
2316             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
2317             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
2318             ,npass_datap += __tinc1_npass - __tinc0_npass * __tdims0 \
2319             ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
2320             ,error_datap += __tinc1_error - __tinc0_error * __tdims0 \
2321             ,nfound_datap += __tinc1_nfound - __tinc0_nfound * __tdims0 \
2322             ), \
2323             ( ,nclusters_datap += __tinc0_nclusters \
2324             ,data_datap += __tinc0_data \
2325             ,mask_datap += __tinc0_mask \
2326             ,weight_datap += __tinc0_weight \
2327             ,npass_datap += __tinc0_npass \
2328             ,clusterids_datap += __tinc0_clusterids \
2329             ,error_datap += __tinc0_error \
2330             ,nfound_datap += __tinc0_nfound \
2331             ) \
2332             )
2333             #define PDL_BROADCASTLOOP_END_kcluster_readdata PDL_BROADCASTLOOP_END( \
2334             __privtrans->broadcast, \
2335             nclusters_datap -= __tinc1_nclusters * __tdims1 + __offsp[0]; \
2336             data_datap -= __tinc1_data * __tdims1 + __offsp[1]; \
2337             mask_datap -= __tinc1_mask * __tdims1 + __offsp[2]; \
2338             weight_datap -= __tinc1_weight * __tdims1 + __offsp[3]; \
2339             npass_datap -= __tinc1_npass * __tdims1 + __offsp[4]; \
2340             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[5]; \
2341             error_datap -= __tinc1_error * __tdims1 + __offsp[6]; \
2342             nfound_datap -= __tinc1_nfound * __tdims1 + __offsp[7]; \
2343             )
2344 3           register PDL_Indx __inc_clusterids_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_clusterids_n;
2345 3           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_data_n;
2346 3           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,1)]; (void)__inc_mask_n;
2347 3           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_weight_d;
2348             #ifndef PDL_DECLARE_PARAMS_kcluster_1
2349             #define PDL_DECLARE_PARAMS_kcluster_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_nclusters,PDL_PPSYM_PARAM_nclusters,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_npass,PDL_PPSYM_PARAM_npass,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids,PDL_TYPE_PARAM_error,PDL_PPSYM_PARAM_error,PDL_TYPE_PARAM_nfound,PDL_PPSYM_PARAM_nfound) \
2350             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_nclusters, nclusters, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_nclusters) \
2351             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_data) \
2352             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_mask) \
2353             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_weight) \
2354             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_npass, npass, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_npass) \
2355             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_clusterids) \
2356             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_error, error, (__privtrans->pdls[6]), 1, PDL_PPSYM_PARAM_error) \
2357             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_nfound, nfound, (__privtrans->pdls[7]), 1, PDL_PPSYM_PARAM_nfound)
2358             #endif
2359             #define PDL_IF_BAD(t,f) f
2360 3           switch (__privtrans->__datatype) { /* Start generic switch */
2361 0           case PDL_SB: {
2362 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_SByte,A,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2363             {
2364 0           int transpose = 0;
2365 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2366 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2367 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2368 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2369 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2370 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2371 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2372             clusterids_datap, error_datap, nfound_datap);
2373 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2374             /*-- cleanup --*/
2375 0 0         if (datapp) free(datapp);
2376 0 0         if (maskpp) free(maskpp);
2377             }
2378 0           } break;
2379 0           case PDL_B: {
2380 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_Byte,B,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2381             {
2382 0           int transpose = 0;
2383 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2384 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2385 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2386 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2387 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2388 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2389 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2390             clusterids_datap, error_datap, nfound_datap);
2391 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2392             /*-- cleanup --*/
2393 0 0         if (datapp) free(datapp);
2394 0 0         if (maskpp) free(maskpp);
2395             }
2396 0           } break;
2397 0           case PDL_S: {
2398 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_Short,S,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2399             {
2400 0           int transpose = 0;
2401 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2402 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2403 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2404 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2405 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2406 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2407 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2408             clusterids_datap, error_datap, nfound_datap);
2409 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2410             /*-- cleanup --*/
2411 0 0         if (datapp) free(datapp);
2412 0 0         if (maskpp) free(maskpp);
2413             }
2414 0           } break;
2415 0           case PDL_US: {
2416 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_Ushort,U,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2417             {
2418 0           int transpose = 0;
2419 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2420 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2421 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2422 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2423 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2424 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2425 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2426             clusterids_datap, error_datap, nfound_datap);
2427 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2428             /*-- cleanup --*/
2429 0 0         if (datapp) free(datapp);
2430 0 0         if (maskpp) free(maskpp);
2431             }
2432 0           } break;
2433 0           case PDL_L: {
2434 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2435             {
2436 0           int transpose = 0;
2437 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2438 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2439 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2440 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2441 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2442 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2443 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2444             clusterids_datap, error_datap, nfound_datap);
2445 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2446             /*-- cleanup --*/
2447 0 0         if (datapp) free(datapp);
2448 0 0         if (maskpp) free(maskpp);
2449             }
2450 0           } break;
2451 0           case PDL_UL: {
2452 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_ULong,K,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2453             {
2454 0           int transpose = 0;
2455 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2456 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2457 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2458 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2459 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2460 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2461 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2462             clusterids_datap, error_datap, nfound_datap);
2463 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2464             /*-- cleanup --*/
2465 0 0         if (datapp) free(datapp);
2466 0 0         if (maskpp) free(maskpp);
2467             }
2468 0           } break;
2469 0           case PDL_IND: {
2470 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_Indx,N,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2471             {
2472 0           int transpose = 0;
2473 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2474 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2475 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2476 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2477 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2478 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2479 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2480             clusterids_datap, error_datap, nfound_datap);
2481 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2482             /*-- cleanup --*/
2483 0 0         if (datapp) free(datapp);
2484 0 0         if (maskpp) free(maskpp);
2485             }
2486 0           } break;
2487 0           case PDL_ULL: {
2488 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_ULongLong,P,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2489             {
2490 0           int transpose = 0;
2491 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2492 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2493 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2494 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2495 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2496 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2497 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2498             clusterids_datap, error_datap, nfound_datap);
2499 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2500             /*-- cleanup --*/
2501 0 0         if (datapp) free(datapp);
2502 0 0         if (maskpp) free(maskpp);
2503             }
2504 0           } break;
2505 0           case PDL_LL: {
2506 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_LongLong,Q,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2507             {
2508 0           int transpose = 0;
2509 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2510 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2511 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2512 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2513 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2514 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2515 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2516             clusterids_datap, error_datap, nfound_datap);
2517 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2518             /*-- cleanup --*/
2519 0 0         if (datapp) free(datapp);
2520 0 0         if (maskpp) free(maskpp);
2521             }
2522 0           } break;
2523 0           case PDL_F: {
2524 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_Float,F,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2525             {
2526 0           int transpose = 0;
2527 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2528 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2529 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2530 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2531 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2532 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2533 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2534             clusterids_datap, error_datap, nfound_datap);
2535 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2536             /*-- cleanup --*/
2537 0 0         if (datapp) free(datapp);
2538 0 0         if (maskpp) free(maskpp);
2539             }
2540 0           } break;
2541 0           case PDL_D: {
2542 0 0         PDL_DECLARE_PARAMS_kcluster_1(PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2543             {
2544 0           int transpose = 0;
2545 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2546 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2547 0 0         PDL_BROADCASTLOOP_START_kcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2548 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2549 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2550 0           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2551 0           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2552             clusterids_datap, error_datap, nfound_datap);
2553 0 0         PDL_BROADCASTLOOP_END_kcluster_readdata
    0          
2554             /*-- cleanup --*/
2555 0 0         if (datapp) free(datapp);
2556 0 0         if (maskpp) free(maskpp);
2557             }
2558 0           } break;
2559 3           case PDL_LD: {
2560 3 50         PDL_DECLARE_PARAMS_kcluster_1(PDL_LDouble,E,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
2561             {
2562 3           int transpose = 0;
2563 3           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
2564 3           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
2565 12 50         PDL_BROADCASTLOOP_START_kcluster_readdata
    50          
    50          
    50          
    50          
    100          
    100          
2566 3           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
2567 3           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
2568 3           kcluster((nclusters_datap)[0], __privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp,
2569 3           weight_datap, transpose, (npass_datap)[0], *__params->ctrMethodFlag, *__params->distFlag,
2570             clusterids_datap, error_datap, nfound_datap);
2571 3 50         PDL_BROADCASTLOOP_END_kcluster_readdata
    50          
2572             /*-- cleanup --*/
2573 3 50         if (datapp) free(datapp);
2574 3 50         if (maskpp) free(maskpp);
2575             }
2576 3           } break;
2577 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in kcluster: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
2578             }
2579             #undef PDL_IF_BAD
2580 3           return PDL_err;
2581             }
2582              
2583              
2584             #line 1857 "lib/PDL/PP.pm"
2585             pdl_error pdl_kcluster_free(pdl_trans *__privtrans, char destroy) {
2586             pdl_error PDL_err = {0, NULL, 0};
2587             #line 2588 "Cluster.xs"
2588 3           pdl_params_kcluster *__params = __privtrans->params; (void)__params;
2589 3 50         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
2590             free(__params->ctrMethodFlag); /* CType.get_free */
2591 3           , ) return PDL_err;
2592             }
2593              
2594             static pdl_datatypes pdl_kcluster_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, -1 };
2595             static PDL_Indx pdl_kcluster_vtable_realdims[] = { 0, 2, 2, 1, 0, 1, 0, 0 };
2596             static char *pdl_kcluster_vtable_parnames[] = { "nclusters","data","mask","weight","npass","clusterids","error","nfound" };
2597             static short pdl_kcluster_vtable_parflags[] = {
2598             PDL_PARAM_ISTYPED,
2599             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
2600             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
2601             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
2602             PDL_PARAM_ISTYPED,
2603             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
2604             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
2605             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
2606             };
2607             static pdl_datatypes pdl_kcluster_vtable_partypes[] = { PDL_L, PDL_D, PDL_L, PDL_D, PDL_L, PDL_L, PDL_D, PDL_L };
2608             static PDL_Indx pdl_kcluster_vtable_realdims_starts[] = { 0, 0, 2, 4, 5, 5, 6, 6 };
2609             static PDL_Indx pdl_kcluster_vtable_realdims_ind_ids[] = { 0, 1, 0, 1, 0, 1 };
2610             static char *pdl_kcluster_vtable_indnames[] = { "d","n" };
2611             pdl_transvtable pdl_kcluster_vtable = {
2612             PDL_TRANS_DO_BROADCAST, 0, pdl_kcluster_vtable_gentypes, 5, 8, NULL /*CORE21*/,
2613             pdl_kcluster_vtable_realdims, pdl_kcluster_vtable_parnames,
2614             pdl_kcluster_vtable_parflags, pdl_kcluster_vtable_partypes,
2615             pdl_kcluster_vtable_realdims_starts, pdl_kcluster_vtable_realdims_ind_ids, 6,
2616             2, pdl_kcluster_vtable_indnames,
2617             NULL, pdl_kcluster_readdata, NULL,
2618             pdl_kcluster_free,
2619             sizeof(pdl_params_kcluster),"PDL::Cluster::kcluster"
2620             };
2621              
2622              
2623 3           pdl_error pdl_run_kcluster(pdl *nclusters,pdl *data,pdl *mask,pdl *weight,pdl *npass,pdl *clusterids,pdl *error,pdl *nfound,char *distFlag,char *ctrMethodFlag) {
2624 3           pdl_error PDL_err = {0, NULL, 0};
2625 3 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
2626 3           pdl_trans *__privtrans = PDL->create_trans(&pdl_kcluster_vtable);
2627 3 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
2628 3           pdl_params_kcluster *__params = __privtrans->params;
2629 3           __privtrans->pdls[0] = nclusters;
2630 3           __privtrans->pdls[1] = data;
2631 3           __privtrans->pdls[2] = mask;
2632 3           __privtrans->pdls[3] = weight;
2633 3           __privtrans->pdls[4] = npass;
2634 3           __privtrans->pdls[5] = clusterids;
2635 3           __privtrans->pdls[6] = error;
2636 3           __privtrans->pdls[7] = nfound;
2637 3 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
2638 3           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
2639 3           (__params->ctrMethodFlag) = malloc(strlen(ctrMethodFlag)+1); strcpy(__params->ctrMethodFlag,ctrMethodFlag); /* CType.get_copy */
2640 3 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
2641 3           return PDL_err;
2642             }
2643              
2644             #line 1857 "lib/PDL/PP.pm"
2645             pdl_error pdl_kmedoids_readdata(pdl_trans *__privtrans) {
2646             pdl_error PDL_err = {0, NULL, 0};
2647             #line 2648 "Cluster.xs"
2648 2 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in kmedoids:" "broadcast.incs NULL");
2649             /* broadcastloop declarations */
2650             int __brcloopval;
2651             register PDL_Indx __tind0,__tind1; /* counters along dim */
2652 2           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
2653             /* dims here are how many steps along those dims */
2654 2           register PDL_Indx __tinc0_nclusters = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
2655 2           register PDL_Indx __tinc0_distance = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
2656 2           register PDL_Indx __tinc0_npass = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
2657 2           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
2658 2           register PDL_Indx __tinc0_error = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
2659 2           register PDL_Indx __tinc0_nfound = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
2660 2           register PDL_Indx __tinc1_nclusters = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
2661 2           register PDL_Indx __tinc1_distance = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
2662 2           register PDL_Indx __tinc1_npass = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
2663 2           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
2664 2           register PDL_Indx __tinc1_error = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
2665 2           register PDL_Indx __tinc1_nfound = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
2666             #define PDL_BROADCASTLOOP_START_kmedoids_readdata PDL_BROADCASTLOOP_START( \
2667             readdata, \
2668             __privtrans->broadcast, \
2669             __privtrans->vtable, \
2670             nclusters_datap += __offsp[0]; \
2671             distance_datap += __offsp[1]; \
2672             npass_datap += __offsp[2]; \
2673             clusterids_datap += __offsp[3]; \
2674             error_datap += __offsp[4]; \
2675             nfound_datap += __offsp[5]; \
2676             , \
2677             ( ,nclusters_datap += __tinc1_nclusters - __tinc0_nclusters * __tdims0 \
2678             ,distance_datap += __tinc1_distance - __tinc0_distance * __tdims0 \
2679             ,npass_datap += __tinc1_npass - __tinc0_npass * __tdims0 \
2680             ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
2681             ,error_datap += __tinc1_error - __tinc0_error * __tdims0 \
2682             ,nfound_datap += __tinc1_nfound - __tinc0_nfound * __tdims0 \
2683             ), \
2684             ( ,nclusters_datap += __tinc0_nclusters \
2685             ,distance_datap += __tinc0_distance \
2686             ,npass_datap += __tinc0_npass \
2687             ,clusterids_datap += __tinc0_clusterids \
2688             ,error_datap += __tinc0_error \
2689             ,nfound_datap += __tinc0_nfound \
2690             ) \
2691             )
2692             #define PDL_BROADCASTLOOP_END_kmedoids_readdata PDL_BROADCASTLOOP_END( \
2693             __privtrans->broadcast, \
2694             nclusters_datap -= __tinc1_nclusters * __tdims1 + __offsp[0]; \
2695             distance_datap -= __tinc1_distance * __tdims1 + __offsp[1]; \
2696             npass_datap -= __tinc1_npass * __tdims1 + __offsp[2]; \
2697             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[3]; \
2698             error_datap -= __tinc1_error * __tdims1 + __offsp[4]; \
2699             nfound_datap -= __tinc1_nfound * __tdims1 + __offsp[5]; \
2700             )
2701 2           register PDL_Indx __inc_clusterids_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_clusterids_n;
2702 2           register PDL_Indx __inc_distance_n0 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_distance_n0;register PDL_Indx __inc_distance_n1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_distance_n1;
2703             #ifndef PDL_DECLARE_PARAMS_kmedoids_1
2704             #define PDL_DECLARE_PARAMS_kmedoids_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_nclusters,PDL_PPSYM_PARAM_nclusters,PDL_TYPE_PARAM_distance,PDL_PPSYM_PARAM_distance,PDL_TYPE_PARAM_npass,PDL_PPSYM_PARAM_npass,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids,PDL_TYPE_PARAM_error,PDL_PPSYM_PARAM_error,PDL_TYPE_PARAM_nfound,PDL_PPSYM_PARAM_nfound) \
2705             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_nclusters, nclusters, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_nclusters) \
2706             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_distance, distance, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_distance) \
2707             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_npass, npass, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_npass) \
2708             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_clusterids) \
2709             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_error, error, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_error) \
2710             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_nfound, nfound, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_nfound)
2711             #endif
2712             #define PDL_IF_BAD(t,f) f
2713 2           switch (__privtrans->__datatype) { /* Start generic switch */
2714 0           case PDL_SB: {
2715 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_SByte,A,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2716             {
2717 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2718 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2719 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2720 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2721             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2722 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2723             /*-- cleanup --*/
2724 0 0         if (distpp) free(distpp);
2725             }
2726 0           } break;
2727 0           case PDL_B: {
2728 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_Byte,B,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2729             {
2730 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2731 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2732 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2733 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2734             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2735 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2736             /*-- cleanup --*/
2737 0 0         if (distpp) free(distpp);
2738             }
2739 0           } break;
2740 0           case PDL_S: {
2741 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_Short,S,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2742             {
2743 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2744 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2745 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2746 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2747             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2748 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2749             /*-- cleanup --*/
2750 0 0         if (distpp) free(distpp);
2751             }
2752 0           } break;
2753 0           case PDL_US: {
2754 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_Ushort,U,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2755             {
2756 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2757 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2758 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2759 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2760             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2761 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2762             /*-- cleanup --*/
2763 0 0         if (distpp) free(distpp);
2764             }
2765 0           } break;
2766 0           case PDL_L: {
2767 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2768             {
2769 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2770 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2771 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2772 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2773             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2774 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2775             /*-- cleanup --*/
2776 0 0         if (distpp) free(distpp);
2777             }
2778 0           } break;
2779 0           case PDL_UL: {
2780 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_ULong,K,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2781             {
2782 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2783 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2784 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2785 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2786             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2787 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2788             /*-- cleanup --*/
2789 0 0         if (distpp) free(distpp);
2790             }
2791 0           } break;
2792 0           case PDL_IND: {
2793 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_Indx,N,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2794             {
2795 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2796 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2797 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2798 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2799             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2800 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2801             /*-- cleanup --*/
2802 0 0         if (distpp) free(distpp);
2803             }
2804 0           } break;
2805 0           case PDL_ULL: {
2806 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_ULongLong,P,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2807             {
2808 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2809 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2810 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2811 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2812             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2813 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2814             /*-- cleanup --*/
2815 0 0         if (distpp) free(distpp);
2816             }
2817 0           } break;
2818 0           case PDL_LL: {
2819 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_LongLong,Q,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2820             {
2821 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2822 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2823 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2824 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2825             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2826 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2827             /*-- cleanup --*/
2828 0 0         if (distpp) free(distpp);
2829             }
2830 0           } break;
2831 0           case PDL_F: {
2832 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_Float,F,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2833             {
2834 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2835 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2836 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2837 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2838             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2839 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2840             /*-- cleanup --*/
2841 0 0         if (distpp) free(distpp);
2842             }
2843 0           } break;
2844 0           case PDL_D: {
2845 0 0         PDL_DECLARE_PARAMS_kmedoids_1(PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2846             {
2847 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2848 0 0         PDL_BROADCASTLOOP_START_kmedoids_readdata
    0          
    0          
    0          
    0          
    0          
    0          
2849 0           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2850 0           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2851             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2852 0 0         PDL_BROADCASTLOOP_END_kmedoids_readdata
    0          
2853             /*-- cleanup --*/
2854 0 0         if (distpp) free(distpp);
2855             }
2856 0           } break;
2857 2           case PDL_LD: {
2858 2 50         PDL_DECLARE_PARAMS_kmedoids_1(PDL_LDouble,E,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
2859             {
2860 2           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
2861 8 50         PDL_BROADCASTLOOP_START_kmedoids_readdata
    50          
    50          
    50          
    50          
    100          
    100          
2862 2           p2pp_dbl_ragged(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], distance_datap, distpp);
2863 2           kmedoids((nclusters_datap)[0], __privtrans->ind_sizes[0], distpp,
2864             (npass_datap)[0], clusterids_datap, error_datap, nfound_datap);
2865 2 50         PDL_BROADCASTLOOP_END_kmedoids_readdata
    50          
2866             /*-- cleanup --*/
2867 2 50         if (distpp) free(distpp);
2868             }
2869 2           } break;
2870 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in kmedoids: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
2871             }
2872             #undef PDL_IF_BAD
2873 2           return PDL_err;
2874             }
2875              
2876             static pdl_datatypes pdl_kmedoids_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, -1 };
2877             static PDL_Indx pdl_kmedoids_vtable_realdims[] = { 0, 2, 0, 1, 0, 0 };
2878             static char *pdl_kmedoids_vtable_parnames[] = { "nclusters","distance","npass","clusterids","error","nfound" };
2879             static short pdl_kmedoids_vtable_parflags[] = {
2880             PDL_PARAM_ISTYPED,
2881             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
2882             PDL_PARAM_ISTYPED,
2883             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
2884             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
2885             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
2886             };
2887             static pdl_datatypes pdl_kmedoids_vtable_partypes[] = { PDL_L, PDL_D, PDL_L, PDL_L, PDL_D, PDL_L };
2888             static PDL_Indx pdl_kmedoids_vtable_realdims_starts[] = { 0, 0, 2, 2, 3, 3 };
2889             static PDL_Indx pdl_kmedoids_vtable_realdims_ind_ids[] = { 0, 0, 0 };
2890             static char *pdl_kmedoids_vtable_indnames[] = { "n" };
2891             pdl_transvtable pdl_kmedoids_vtable = {
2892             PDL_TRANS_DO_BROADCAST, 0, pdl_kmedoids_vtable_gentypes, 3, 6, NULL /*CORE21*/,
2893             pdl_kmedoids_vtable_realdims, pdl_kmedoids_vtable_parnames,
2894             pdl_kmedoids_vtable_parflags, pdl_kmedoids_vtable_partypes,
2895             pdl_kmedoids_vtable_realdims_starts, pdl_kmedoids_vtable_realdims_ind_ids, 3,
2896             1, pdl_kmedoids_vtable_indnames,
2897             NULL, pdl_kmedoids_readdata, NULL,
2898             NULL,
2899             0,"PDL::Cluster::kmedoids"
2900             };
2901              
2902              
2903 2           pdl_error pdl_run_kmedoids(pdl *nclusters,pdl *distance,pdl *npass,pdl *clusterids,pdl *error,pdl *nfound) {
2904 2           pdl_error PDL_err = {0, NULL, 0};
2905 2 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
2906 2           pdl_trans *__privtrans = PDL->create_trans(&pdl_kmedoids_vtable);
2907 2 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
2908 2           __privtrans->pdls[0] = nclusters;
2909 2           __privtrans->pdls[1] = distance;
2910 2           __privtrans->pdls[2] = npass;
2911 2           __privtrans->pdls[3] = clusterids;
2912 2           __privtrans->pdls[4] = error;
2913 2           __privtrans->pdls[5] = nfound;
2914 2 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
2915 2 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
2916 2           return PDL_err;
2917             }
2918              
2919             #line 1846 "lib/PDL/PP.pm"
2920             typedef struct pdl_params_treecluster {
2921             #line 2922 "Cluster.xs"
2922             char *distFlag;
2923             char *methodFlag;
2924             } pdl_params_treecluster;
2925              
2926              
2927             #line 1857 "lib/PDL/PP.pm"
2928             pdl_error pdl_treecluster_readdata(pdl_trans *__privtrans) {
2929             pdl_error PDL_err = {0, NULL, 0};
2930             #line 2931 "Cluster.xs"
2931 8           pdl_params_treecluster *__params = __privtrans->params; (void)__params;
2932 8 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in treecluster:" "broadcast.incs NULL");
2933             /* broadcastloop declarations */
2934             int __brcloopval;
2935             register PDL_Indx __tind0,__tind1; /* counters along dim */
2936 8           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
2937             /* dims here are how many steps along those dims */
2938 8           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
2939 8           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
2940 8           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
2941 8           register PDL_Indx __tinc0_tree = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
2942 8           register PDL_Indx __tinc0_lnkdist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
2943 8           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
2944 8           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
2945 8           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
2946 8           register PDL_Indx __tinc1_tree = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
2947 8           register PDL_Indx __tinc1_lnkdist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
2948             #define PDL_BROADCASTLOOP_START_treecluster_readdata PDL_BROADCASTLOOP_START( \
2949             readdata, \
2950             __privtrans->broadcast, \
2951             __privtrans->vtable, \
2952             data_datap += __offsp[0]; \
2953             mask_datap += __offsp[1]; \
2954             weight_datap += __offsp[2]; \
2955             tree_datap += __offsp[3]; \
2956             lnkdist_datap += __offsp[4]; \
2957             , \
2958             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
2959             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
2960             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
2961             ,tree_datap += __tinc1_tree - __tinc0_tree * __tdims0 \
2962             ,lnkdist_datap += __tinc1_lnkdist - __tinc0_lnkdist * __tdims0 \
2963             ), \
2964             ( ,data_datap += __tinc0_data \
2965             ,mask_datap += __tinc0_mask \
2966             ,weight_datap += __tinc0_weight \
2967             ,tree_datap += __tinc0_tree \
2968             ,lnkdist_datap += __tinc0_lnkdist \
2969             ) \
2970             )
2971             #define PDL_BROADCASTLOOP_END_treecluster_readdata PDL_BROADCASTLOOP_END( \
2972             __privtrans->broadcast, \
2973             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
2974             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
2975             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
2976             tree_datap -= __tinc1_tree * __tdims1 + __offsp[3]; \
2977             lnkdist_datap -= __tinc1_lnkdist * __tdims1 + __offsp[4]; \
2978             )
2979 8           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
2980 8           register PDL_Indx __inc_lnkdist_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_lnkdist_n;
2981 8           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
2982 8           register PDL_Indx __inc_tree_2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_tree_2;register PDL_Indx __inc_tree_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,1)]; (void)__inc_tree_n;
2983 8           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
2984             #ifndef PDL_DECLARE_PARAMS_treecluster_1
2985             #define PDL_DECLARE_PARAMS_treecluster_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_tree,PDL_PPSYM_PARAM_tree,PDL_TYPE_PARAM_lnkdist,PDL_PPSYM_PARAM_lnkdist) \
2986             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
2987             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
2988             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
2989             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_tree, tree, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_tree) \
2990             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_lnkdist, lnkdist, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_lnkdist)
2991             #endif
2992             #define PDL_IF_BAD(t,f) f
2993 8           switch (__privtrans->__datatype) { /* Start generic switch */
2994 0           case PDL_SB: {
2995 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2996             {
2997 0           int transpose = 0;
2998 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
2999 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3000 0           double **distpp = NULL;
3001 0           Node *nod = NULL;
3002 0           int nmax = __privtrans->ind_sizes[2]-1;
3003 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3004 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3005 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3006 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3007 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3008             NULL);
3009              
3010 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3011 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3012 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3013 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3014 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3015             /*-- cleanup --*/
3016 0 0         if (datapp) free(datapp);
3017 0 0         if (maskpp) free(maskpp);
3018 0 0         if (nod) free(nod);
3019             }
3020 0           } break;
3021 0           case PDL_B: {
3022 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3023             {
3024 0           int transpose = 0;
3025 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3026 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3027 0           double **distpp = NULL;
3028 0           Node *nod = NULL;
3029 0           int nmax = __privtrans->ind_sizes[2]-1;
3030 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3031 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3032 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3033 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3034 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3035             NULL);
3036              
3037 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3038 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3039 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3040 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3041 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3042             /*-- cleanup --*/
3043 0 0         if (datapp) free(datapp);
3044 0 0         if (maskpp) free(maskpp);
3045 0 0         if (nod) free(nod);
3046             }
3047 0           } break;
3048 0           case PDL_S: {
3049 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3050             {
3051 0           int transpose = 0;
3052 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3053 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3054 0           double **distpp = NULL;
3055 0           Node *nod = NULL;
3056 0           int nmax = __privtrans->ind_sizes[2]-1;
3057 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3058 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3059 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3060 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3061 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3062             NULL);
3063              
3064 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3065 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3066 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3067 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3068 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3069             /*-- cleanup --*/
3070 0 0         if (datapp) free(datapp);
3071 0 0         if (maskpp) free(maskpp);
3072 0 0         if (nod) free(nod);
3073             }
3074 0           } break;
3075 0           case PDL_US: {
3076 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3077             {
3078 0           int transpose = 0;
3079 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3080 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3081 0           double **distpp = NULL;
3082 0           Node *nod = NULL;
3083 0           int nmax = __privtrans->ind_sizes[2]-1;
3084 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3085 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3086 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3087 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3088 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3089             NULL);
3090              
3091 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3092 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3093 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3094 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3095 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3096             /*-- cleanup --*/
3097 0 0         if (datapp) free(datapp);
3098 0 0         if (maskpp) free(maskpp);
3099 0 0         if (nod) free(nod);
3100             }
3101 0           } break;
3102 0           case PDL_L: {
3103 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3104             {
3105 0           int transpose = 0;
3106 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3107 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3108 0           double **distpp = NULL;
3109 0           Node *nod = NULL;
3110 0           int nmax = __privtrans->ind_sizes[2]-1;
3111 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3112 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3113 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3114 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3115 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3116             NULL);
3117              
3118 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3119 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3120 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3121 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3122 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3123             /*-- cleanup --*/
3124 0 0         if (datapp) free(datapp);
3125 0 0         if (maskpp) free(maskpp);
3126 0 0         if (nod) free(nod);
3127             }
3128 0           } break;
3129 0           case PDL_UL: {
3130 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3131             {
3132 0           int transpose = 0;
3133 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3134 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3135 0           double **distpp = NULL;
3136 0           Node *nod = NULL;
3137 0           int nmax = __privtrans->ind_sizes[2]-1;
3138 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3139 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3140 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3141 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3142 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3143             NULL);
3144              
3145 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3146 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3147 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3148 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3149 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3150             /*-- cleanup --*/
3151 0 0         if (datapp) free(datapp);
3152 0 0         if (maskpp) free(maskpp);
3153 0 0         if (nod) free(nod);
3154             }
3155 0           } break;
3156 0           case PDL_IND: {
3157 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3158             {
3159 0           int transpose = 0;
3160 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3161 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3162 0           double **distpp = NULL;
3163 0           Node *nod = NULL;
3164 0           int nmax = __privtrans->ind_sizes[2]-1;
3165 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3166 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3167 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3168 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3169 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3170             NULL);
3171              
3172 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3173 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3174 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3175 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3176 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3177             /*-- cleanup --*/
3178 0 0         if (datapp) free(datapp);
3179 0 0         if (maskpp) free(maskpp);
3180 0 0         if (nod) free(nod);
3181             }
3182 0           } break;
3183 0           case PDL_ULL: {
3184 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3185             {
3186 0           int transpose = 0;
3187 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3188 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3189 0           double **distpp = NULL;
3190 0           Node *nod = NULL;
3191 0           int nmax = __privtrans->ind_sizes[2]-1;
3192 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3193 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3194 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3195 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3196 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3197             NULL);
3198              
3199 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3200 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3201 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3202 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3203 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3204             /*-- cleanup --*/
3205 0 0         if (datapp) free(datapp);
3206 0 0         if (maskpp) free(maskpp);
3207 0 0         if (nod) free(nod);
3208             }
3209 0           } break;
3210 0           case PDL_LL: {
3211 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3212             {
3213 0           int transpose = 0;
3214 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3215 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3216 0           double **distpp = NULL;
3217 0           Node *nod = NULL;
3218 0           int nmax = __privtrans->ind_sizes[2]-1;
3219 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3220 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3221 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3222 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3223 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3224             NULL);
3225              
3226 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3227 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3228 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3229 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3230 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3231             /*-- cleanup --*/
3232 0 0         if (datapp) free(datapp);
3233 0 0         if (maskpp) free(maskpp);
3234 0 0         if (nod) free(nod);
3235             }
3236 0           } break;
3237 0           case PDL_F: {
3238 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3239             {
3240 0           int transpose = 0;
3241 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3242 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3243 0           double **distpp = NULL;
3244 0           Node *nod = NULL;
3245 0           int nmax = __privtrans->ind_sizes[2]-1;
3246 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3247 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3248 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3249 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3250 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3251             NULL);
3252              
3253 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3254 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3255 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3256 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3257 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3258             /*-- cleanup --*/
3259 0 0         if (datapp) free(datapp);
3260 0 0         if (maskpp) free(maskpp);
3261 0 0         if (nod) free(nod);
3262             }
3263 0           } break;
3264 0           case PDL_D: {
3265 0 0         PDL_DECLARE_PARAMS_treecluster_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3266             {
3267 0           int transpose = 0;
3268 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3269 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3270 0           double **distpp = NULL;
3271 0           Node *nod = NULL;
3272 0           int nmax = __privtrans->ind_sizes[2]-1;
3273 0 0         PDL_BROADCASTLOOP_START_treecluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3274 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3275 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3276 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3277 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3278             NULL);
3279              
3280 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3281 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3282 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3283 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3284 0 0         PDL_BROADCASTLOOP_END_treecluster_readdata
    0          
3285             /*-- cleanup --*/
3286 0 0         if (datapp) free(datapp);
3287 0 0         if (maskpp) free(maskpp);
3288 0 0         if (nod) free(nod);
3289             }
3290 0           } break;
3291 8           case PDL_LD: {
3292 8 50         PDL_DECLARE_PARAMS_treecluster_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
3293             {
3294 8           int transpose = 0;
3295 8           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3296 8           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3297 8           double **distpp = NULL;
3298 8           Node *nod = NULL;
3299 8           int nmax = __privtrans->ind_sizes[2]-1;
3300 32 50         PDL_BROADCASTLOOP_START_treecluster_readdata
    50          
    50          
    50          
    50          
    100          
    100          
3301 8           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3302 8           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3303 8           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3304 8           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3305             NULL);
3306              
3307 8           node2p(nmax, nod, tree_datap, lnkdist_datap);
3308 8           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3309 8           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3310 8           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3311 8 50         PDL_BROADCASTLOOP_END_treecluster_readdata
    50          
3312             /*-- cleanup --*/
3313 8 50         if (datapp) free(datapp);
3314 8 50         if (maskpp) free(maskpp);
3315 8 50         if (nod) free(nod);
3316             }
3317 8           } break;
3318 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in treecluster: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
3319             }
3320             #undef PDL_IF_BAD
3321 8           return PDL_err;
3322             }
3323              
3324              
3325             #line 1857 "lib/PDL/PP.pm"
3326             pdl_error pdl_treecluster_free(pdl_trans *__privtrans, char destroy) {
3327             pdl_error PDL_err = {0, NULL, 0};
3328             #line 3329 "Cluster.xs"
3329 8           pdl_params_treecluster *__params = __privtrans->params; (void)__params;
3330 8 50         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
3331             free(__params->methodFlag); /* CType.get_free */
3332 8           , ) return PDL_err;
3333             }
3334              
3335             static pdl_datatypes pdl_treecluster_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, -1 };
3336             static PDL_Indx pdl_treecluster_vtable_realdims[] = { 2, 2, 1, 2, 1 };
3337             static char *pdl_treecluster_vtable_parnames[] = { "data","mask","weight","tree","lnkdist" };
3338             static short pdl_treecluster_vtable_parflags[] = {
3339             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
3340             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
3341             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
3342             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
3343             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
3344             };
3345             static pdl_datatypes pdl_treecluster_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_L, PDL_D };
3346             static PDL_Indx pdl_treecluster_vtable_realdims_starts[] = { 0, 2, 4, 5, 7 };
3347             static PDL_Indx pdl_treecluster_vtable_realdims_ind_ids[] = { 1, 2, 1, 2, 1, 0, 2, 2 };
3348             static char *pdl_treecluster_vtable_indnames[] = { "2","d","n" };
3349             pdl_transvtable pdl_treecluster_vtable = {
3350             PDL_TRANS_DO_BROADCAST, 0, pdl_treecluster_vtable_gentypes, 3, 5, NULL /*CORE21*/,
3351             pdl_treecluster_vtable_realdims, pdl_treecluster_vtable_parnames,
3352             pdl_treecluster_vtable_parflags, pdl_treecluster_vtable_partypes,
3353             pdl_treecluster_vtable_realdims_starts, pdl_treecluster_vtable_realdims_ind_ids, 8,
3354             3, pdl_treecluster_vtable_indnames,
3355             NULL, pdl_treecluster_readdata, NULL,
3356             pdl_treecluster_free,
3357             sizeof(pdl_params_treecluster),"PDL::Cluster::treecluster"
3358             };
3359              
3360              
3361 8           pdl_error pdl_run_treecluster(pdl *data,pdl *mask,pdl *weight,pdl *tree,pdl *lnkdist,char *distFlag,char *methodFlag) {
3362 8           pdl_error PDL_err = {0, NULL, 0};
3363 8 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
3364 8           pdl_trans *__privtrans = PDL->create_trans(&pdl_treecluster_vtable);
3365 8 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
3366 8           pdl_params_treecluster *__params = __privtrans->params;
3367 8           __privtrans->pdls[0] = data;
3368 8           __privtrans->pdls[1] = mask;
3369 8           __privtrans->pdls[2] = weight;
3370 8           __privtrans->pdls[3] = tree;
3371 8           __privtrans->pdls[4] = lnkdist;
3372 8 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
3373 8           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
3374 8           (__params->methodFlag) = malloc(strlen(methodFlag)+1); strcpy(__params->methodFlag,methodFlag); /* CType.get_copy */
3375 8 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
3376 8           return PDL_err;
3377             }
3378              
3379             #line 1846 "lib/PDL/PP.pm"
3380             typedef struct pdl_params_treeclusterd {
3381             #line 3382 "Cluster.xs"
3382             char *distFlag;
3383             char *methodFlag;
3384             } pdl_params_treeclusterd;
3385              
3386              
3387             #line 1857 "lib/PDL/PP.pm"
3388             pdl_error pdl_treeclusterd_readdata(pdl_trans *__privtrans) {
3389             pdl_error PDL_err = {0, NULL, 0};
3390             #line 3391 "Cluster.xs"
3391 0           pdl_params_treeclusterd *__params = __privtrans->params; (void)__params;
3392 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in treeclusterd:" "broadcast.incs NULL");
3393             /* broadcastloop declarations */
3394             int __brcloopval;
3395             register PDL_Indx __tind0,__tind1; /* counters along dim */
3396 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
3397             /* dims here are how many steps along those dims */
3398 0           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
3399 0           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
3400 0           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
3401 0           register PDL_Indx __tinc0_distances = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
3402 0           register PDL_Indx __tinc0_tree = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
3403 0           register PDL_Indx __tinc0_lnkdist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
3404 0           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
3405 0           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
3406 0           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
3407 0           register PDL_Indx __tinc1_distances = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
3408 0           register PDL_Indx __tinc1_tree = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
3409 0           register PDL_Indx __tinc1_lnkdist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
3410             #define PDL_BROADCASTLOOP_START_treeclusterd_readdata PDL_BROADCASTLOOP_START( \
3411             readdata, \
3412             __privtrans->broadcast, \
3413             __privtrans->vtable, \
3414             data_datap += __offsp[0]; \
3415             mask_datap += __offsp[1]; \
3416             weight_datap += __offsp[2]; \
3417             distances_datap += __offsp[3]; \
3418             tree_datap += __offsp[4]; \
3419             lnkdist_datap += __offsp[5]; \
3420             , \
3421             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
3422             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
3423             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
3424             ,distances_datap += __tinc1_distances - __tinc0_distances * __tdims0 \
3425             ,tree_datap += __tinc1_tree - __tinc0_tree * __tdims0 \
3426             ,lnkdist_datap += __tinc1_lnkdist - __tinc0_lnkdist * __tdims0 \
3427             ), \
3428             ( ,data_datap += __tinc0_data \
3429             ,mask_datap += __tinc0_mask \
3430             ,weight_datap += __tinc0_weight \
3431             ,distances_datap += __tinc0_distances \
3432             ,tree_datap += __tinc0_tree \
3433             ,lnkdist_datap += __tinc0_lnkdist \
3434             ) \
3435             )
3436             #define PDL_BROADCASTLOOP_END_treeclusterd_readdata PDL_BROADCASTLOOP_END( \
3437             __privtrans->broadcast, \
3438             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
3439             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
3440             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
3441             distances_datap -= __tinc1_distances * __tdims1 + __offsp[3]; \
3442             tree_datap -= __tinc1_tree * __tdims1 + __offsp[4]; \
3443             lnkdist_datap -= __tinc1_lnkdist * __tdims1 + __offsp[5]; \
3444             )
3445 0           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
3446 0           register PDL_Indx __inc_distances_n0 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_distances_n0;register PDL_Indx __inc_distances_n1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,1)]; (void)__inc_distances_n1;
3447 0           register PDL_Indx __inc_lnkdist_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_lnkdist_n;
3448 0           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
3449 0           register PDL_Indx __inc_tree_2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_tree_2;register PDL_Indx __inc_tree_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,1)]; (void)__inc_tree_n;
3450 0           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
3451             #ifndef PDL_DECLARE_PARAMS_treeclusterd_1
3452             #define PDL_DECLARE_PARAMS_treeclusterd_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_distances,PDL_PPSYM_PARAM_distances,PDL_TYPE_PARAM_tree,PDL_PPSYM_PARAM_tree,PDL_TYPE_PARAM_lnkdist,PDL_PPSYM_PARAM_lnkdist) \
3453             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
3454             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
3455             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
3456             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_distances, distances, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_distances) \
3457             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_tree, tree, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_tree) \
3458             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_lnkdist, lnkdist, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_lnkdist)
3459             #endif
3460             #define PDL_IF_BAD(t,f) f
3461 0           switch (__privtrans->__datatype) { /* Start generic switch */
3462 0           case PDL_SB: {
3463 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3464             {
3465 0           int transpose = 0;
3466 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3467 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3468 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3469 0           Node *nod = NULL;
3470 0           int nmax = __privtrans->ind_sizes[2]-1;
3471 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3472 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3473 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3474 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3475 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3476 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3477             distpp);
3478              
3479 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3480 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3481 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3482 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3483 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3484             /*-- cleanup --*/
3485 0 0         if (datapp) free(datapp);
3486 0 0         if (maskpp) free(maskpp);
3487 0 0         if (distpp) free(distpp);
3488 0 0         if (nod) free(nod);
3489             }
3490 0           } break;
3491 0           case PDL_B: {
3492 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3493             {
3494 0           int transpose = 0;
3495 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3496 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3497 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3498 0           Node *nod = NULL;
3499 0           int nmax = __privtrans->ind_sizes[2]-1;
3500 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3501 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3502 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3503 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3504 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3505 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3506             distpp);
3507              
3508 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3509 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3510 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3511 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3512 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3513             /*-- cleanup --*/
3514 0 0         if (datapp) free(datapp);
3515 0 0         if (maskpp) free(maskpp);
3516 0 0         if (distpp) free(distpp);
3517 0 0         if (nod) free(nod);
3518             }
3519 0           } break;
3520 0           case PDL_S: {
3521 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3522             {
3523 0           int transpose = 0;
3524 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3525 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3526 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3527 0           Node *nod = NULL;
3528 0           int nmax = __privtrans->ind_sizes[2]-1;
3529 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3530 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3531 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3532 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3533 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3534 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3535             distpp);
3536              
3537 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3538 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3539 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3540 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3541 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3542             /*-- cleanup --*/
3543 0 0         if (datapp) free(datapp);
3544 0 0         if (maskpp) free(maskpp);
3545 0 0         if (distpp) free(distpp);
3546 0 0         if (nod) free(nod);
3547             }
3548 0           } break;
3549 0           case PDL_US: {
3550 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3551             {
3552 0           int transpose = 0;
3553 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3554 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3555 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3556 0           Node *nod = NULL;
3557 0           int nmax = __privtrans->ind_sizes[2]-1;
3558 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3559 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3560 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3561 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3562 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3563 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3564             distpp);
3565              
3566 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3567 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3568 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3569 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3570 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3571             /*-- cleanup --*/
3572 0 0         if (datapp) free(datapp);
3573 0 0         if (maskpp) free(maskpp);
3574 0 0         if (distpp) free(distpp);
3575 0 0         if (nod) free(nod);
3576             }
3577 0           } break;
3578 0           case PDL_L: {
3579 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3580             {
3581 0           int transpose = 0;
3582 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3583 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3584 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3585 0           Node *nod = NULL;
3586 0           int nmax = __privtrans->ind_sizes[2]-1;
3587 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3588 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3589 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3590 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3591 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3592 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3593             distpp);
3594              
3595 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3596 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3597 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3598 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3599 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3600             /*-- cleanup --*/
3601 0 0         if (datapp) free(datapp);
3602 0 0         if (maskpp) free(maskpp);
3603 0 0         if (distpp) free(distpp);
3604 0 0         if (nod) free(nod);
3605             }
3606 0           } break;
3607 0           case PDL_UL: {
3608 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3609             {
3610 0           int transpose = 0;
3611 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3612 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3613 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3614 0           Node *nod = NULL;
3615 0           int nmax = __privtrans->ind_sizes[2]-1;
3616 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3617 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3618 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3619 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3620 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3621 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3622             distpp);
3623              
3624 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3625 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3626 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3627 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3628 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3629             /*-- cleanup --*/
3630 0 0         if (datapp) free(datapp);
3631 0 0         if (maskpp) free(maskpp);
3632 0 0         if (distpp) free(distpp);
3633 0 0         if (nod) free(nod);
3634             }
3635 0           } break;
3636 0           case PDL_IND: {
3637 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3638             {
3639 0           int transpose = 0;
3640 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3641 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3642 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3643 0           Node *nod = NULL;
3644 0           int nmax = __privtrans->ind_sizes[2]-1;
3645 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3646 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3647 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3648 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3649 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3650 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3651             distpp);
3652              
3653 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3654 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3655 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3656 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3657 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3658             /*-- cleanup --*/
3659 0 0         if (datapp) free(datapp);
3660 0 0         if (maskpp) free(maskpp);
3661 0 0         if (distpp) free(distpp);
3662 0 0         if (nod) free(nod);
3663             }
3664 0           } break;
3665 0           case PDL_ULL: {
3666 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3667             {
3668 0           int transpose = 0;
3669 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3670 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3671 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3672 0           Node *nod = NULL;
3673 0           int nmax = __privtrans->ind_sizes[2]-1;
3674 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3675 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3676 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3677 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3678 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3679 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3680             distpp);
3681              
3682 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3683 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3684 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3685 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3686 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3687             /*-- cleanup --*/
3688 0 0         if (datapp) free(datapp);
3689 0 0         if (maskpp) free(maskpp);
3690 0 0         if (distpp) free(distpp);
3691 0 0         if (nod) free(nod);
3692             }
3693 0           } break;
3694 0           case PDL_LL: {
3695 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3696             {
3697 0           int transpose = 0;
3698 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3699 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3700 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3701 0           Node *nod = NULL;
3702 0           int nmax = __privtrans->ind_sizes[2]-1;
3703 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3704 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3705 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3706 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3707 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3708 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3709             distpp);
3710              
3711 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3712 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3713 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3714 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3715 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3716             /*-- cleanup --*/
3717 0 0         if (datapp) free(datapp);
3718 0 0         if (maskpp) free(maskpp);
3719 0 0         if (distpp) free(distpp);
3720 0 0         if (nod) free(nod);
3721             }
3722 0           } break;
3723 0           case PDL_F: {
3724 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3725             {
3726 0           int transpose = 0;
3727 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3728 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3729 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3730 0           Node *nod = NULL;
3731 0           int nmax = __privtrans->ind_sizes[2]-1;
3732 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3733 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3734 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3735 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3736 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3737 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3738             distpp);
3739              
3740 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3741 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3742 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3743 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3744 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3745             /*-- cleanup --*/
3746 0 0         if (datapp) free(datapp);
3747 0 0         if (maskpp) free(maskpp);
3748 0 0         if (distpp) free(distpp);
3749 0 0         if (nod) free(nod);
3750             }
3751 0           } break;
3752 0           case PDL_D: {
3753 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3754             {
3755 0           int transpose = 0;
3756 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3757 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3758 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3759 0           Node *nod = NULL;
3760 0           int nmax = __privtrans->ind_sizes[2]-1;
3761 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3762 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3763 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3764 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3765 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3766 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3767             distpp);
3768              
3769 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3770 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3771 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3772 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3773 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3774             /*-- cleanup --*/
3775 0 0         if (datapp) free(datapp);
3776 0 0         if (maskpp) free(maskpp);
3777 0 0         if (distpp) free(distpp);
3778 0 0         if (nod) free(nod);
3779             }
3780 0           } break;
3781 0           case PDL_LD: {
3782 0 0         PDL_DECLARE_PARAMS_treeclusterd_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3783             {
3784 0           int transpose = 0;
3785 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3786 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
3787 0           double **distpp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
3788 0           Node *nod = NULL;
3789 0           int nmax = __privtrans->ind_sizes[2]-1;
3790 0 0         PDL_BROADCASTLOOP_START_treeclusterd_readdata
    0          
    0          
    0          
    0          
    0          
    0          
3791 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
3792 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
3793 0           p2pp_dbl_ragged(__privtrans->ind_sizes[2], __privtrans->ind_sizes[2], distances_datap, distpp);
3794 0           nod = treecluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
3795 0           weight_datap, transpose, *__params->distFlag, *__params->methodFlag,
3796             distpp);
3797              
3798 0           node2p(nmax, nod, tree_datap, lnkdist_datap);
3799 0           (tree_datap)[0+(__inc_tree_2*(0))+(__inc_tree_n*(nmax))] = 0;
3800 0           (tree_datap)[0+(__inc_tree_2*(1))+(__inc_tree_n*(nmax))] = 0;
3801 0           (lnkdist_datap)[0+(__inc_lnkdist_n*(nmax))] = 0;
3802 0 0         PDL_BROADCASTLOOP_END_treeclusterd_readdata
    0          
3803             /*-- cleanup --*/
3804 0 0         if (datapp) free(datapp);
3805 0 0         if (maskpp) free(maskpp);
3806 0 0         if (distpp) free(distpp);
3807 0 0         if (nod) free(nod);
3808             }
3809 0           } break;
3810 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in treeclusterd: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
3811             }
3812             #undef PDL_IF_BAD
3813 0           return PDL_err;
3814             }
3815              
3816              
3817             #line 1857 "lib/PDL/PP.pm"
3818             pdl_error pdl_treeclusterd_free(pdl_trans *__privtrans, char destroy) {
3819             pdl_error PDL_err = {0, NULL, 0};
3820             #line 3821 "Cluster.xs"
3821 0           pdl_params_treeclusterd *__params = __privtrans->params; (void)__params;
3822 0 0         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
3823             free(__params->methodFlag); /* CType.get_free */
3824 0           , ) return PDL_err;
3825             }
3826              
3827             static pdl_datatypes pdl_treeclusterd_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, -1 };
3828             static PDL_Indx pdl_treeclusterd_vtable_realdims[] = { 2, 2, 1, 2, 2, 1 };
3829             static char *pdl_treeclusterd_vtable_parnames[] = { "data","mask","weight","distances","tree","lnkdist" };
3830             static short pdl_treeclusterd_vtable_parflags[] = {
3831             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
3832             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
3833             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
3834             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
3835             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
3836             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
3837             };
3838             static pdl_datatypes pdl_treeclusterd_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_D, PDL_L, PDL_D };
3839             static PDL_Indx pdl_treeclusterd_vtable_realdims_starts[] = { 0, 2, 4, 5, 7, 9 };
3840             static PDL_Indx pdl_treeclusterd_vtable_realdims_ind_ids[] = { 1, 2, 1, 2, 1, 2, 2, 0, 2, 2 };
3841             static char *pdl_treeclusterd_vtable_indnames[] = { "2","d","n" };
3842             pdl_transvtable pdl_treeclusterd_vtable = {
3843             PDL_TRANS_DO_BROADCAST, 0, pdl_treeclusterd_vtable_gentypes, 4, 6, NULL /*CORE21*/,
3844             pdl_treeclusterd_vtable_realdims, pdl_treeclusterd_vtable_parnames,
3845             pdl_treeclusterd_vtable_parflags, pdl_treeclusterd_vtable_partypes,
3846             pdl_treeclusterd_vtable_realdims_starts, pdl_treeclusterd_vtable_realdims_ind_ids, 10,
3847             3, pdl_treeclusterd_vtable_indnames,
3848             NULL, pdl_treeclusterd_readdata, NULL,
3849             pdl_treeclusterd_free,
3850             sizeof(pdl_params_treeclusterd),"PDL::Cluster::treeclusterd"
3851             };
3852              
3853              
3854 0           pdl_error pdl_run_treeclusterd(pdl *data,pdl *mask,pdl *weight,pdl *distances,pdl *tree,pdl *lnkdist,char *distFlag,char *methodFlag) {
3855 0           pdl_error PDL_err = {0, NULL, 0};
3856 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
3857 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_treeclusterd_vtable);
3858 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
3859 0           pdl_params_treeclusterd *__params = __privtrans->params;
3860 0           __privtrans->pdls[0] = data;
3861 0           __privtrans->pdls[1] = mask;
3862 0           __privtrans->pdls[2] = weight;
3863 0           __privtrans->pdls[3] = distances;
3864 0           __privtrans->pdls[4] = tree;
3865 0           __privtrans->pdls[5] = lnkdist;
3866 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
3867 0           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
3868 0           (__params->methodFlag) = malloc(strlen(methodFlag)+1); strcpy(__params->methodFlag,methodFlag); /* CType.get_copy */
3869 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
3870 0           return PDL_err;
3871             }
3872              
3873             #line 1857 "lib/PDL/PP.pm"
3874             pdl_error pdl_cuttree_readdata(pdl_trans *__privtrans) {
3875             pdl_error PDL_err = {0, NULL, 0};
3876             #line 3877 "Cluster.xs"
3877 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in cuttree:" "broadcast.incs NULL");
3878             /* broadcastloop declarations */
3879             int __brcloopval;
3880             register PDL_Indx __tind0,__tind1; /* counters along dim */
3881 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
3882             /* dims here are how many steps along those dims */
3883 0           register PDL_Indx __tinc0_tree = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
3884 0           register PDL_Indx __tinc0_nclusters = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
3885 0           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
3886 0           register PDL_Indx __tinc1_tree = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
3887 0           register PDL_Indx __tinc1_nclusters = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
3888 0           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
3889             #define PDL_BROADCASTLOOP_START_cuttree_readdata PDL_BROADCASTLOOP_START( \
3890             readdata, \
3891             __privtrans->broadcast, \
3892             __privtrans->vtable, \
3893             tree_datap += __offsp[0]; \
3894             nclusters_datap += __offsp[1]; \
3895             clusterids_datap += __offsp[2]; \
3896             , \
3897             ( ,tree_datap += __tinc1_tree - __tinc0_tree * __tdims0 \
3898             ,nclusters_datap += __tinc1_nclusters - __tinc0_nclusters * __tdims0 \
3899             ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
3900             ), \
3901             ( ,tree_datap += __tinc0_tree \
3902             ,nclusters_datap += __tinc0_nclusters \
3903             ,clusterids_datap += __tinc0_clusterids \
3904             ) \
3905             )
3906             #define PDL_BROADCASTLOOP_END_cuttree_readdata PDL_BROADCASTLOOP_END( \
3907             __privtrans->broadcast, \
3908             tree_datap -= __tinc1_tree * __tdims1 + __offsp[0]; \
3909             nclusters_datap -= __tinc1_nclusters * __tdims1 + __offsp[1]; \
3910             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[2]; \
3911             )
3912 0           register PDL_Indx __inc_clusterids_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_clusterids_n;
3913 0           register PDL_Indx __inc_tree_2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_tree_2;register PDL_Indx __inc_tree_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_tree_n;
3914             #ifndef PDL_DECLARE_PARAMS_cuttree_1
3915             #define PDL_DECLARE_PARAMS_cuttree_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_tree,PDL_PPSYM_PARAM_tree,PDL_TYPE_PARAM_nclusters,PDL_PPSYM_PARAM_nclusters,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids) \
3916             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_tree, tree, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_tree) \
3917             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_nclusters, nclusters, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_nclusters) \
3918             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_clusterids)
3919             #endif
3920             #define PDL_IF_BAD(t,f) f
3921 0           switch (__privtrans->__datatype) { /* Start generic switch */
3922 0           case PDL_SB: {
3923 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_SByte,A,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3924 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3925 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3926 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3927 0 0         if (nod) free(nod);
3928 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
3929 0           } break;
3930 0           case PDL_B: {
3931 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_Byte,B,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3932 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3933 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3934 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3935 0 0         if (nod) free(nod);
3936 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
3937 0           } break;
3938 0           case PDL_S: {
3939 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_Short,S,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3940 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3941 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3942 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3943 0 0         if (nod) free(nod);
3944 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
3945 0           } break;
3946 0           case PDL_US: {
3947 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_Ushort,U,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3948 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3949 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3950 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3951 0 0         if (nod) free(nod);
3952 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
3953 0           } break;
3954 0           case PDL_L: {
3955 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3956 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3957 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3958 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3959 0 0         if (nod) free(nod);
3960 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
3961 0           } break;
3962 0           case PDL_UL: {
3963 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_ULong,K,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3964 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3965 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3966 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3967 0 0         if (nod) free(nod);
3968 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
3969 0           } break;
3970 0           case PDL_IND: {
3971 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_Indx,N,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3972 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3973 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3974 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3975 0 0         if (nod) free(nod);
3976 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
3977 0           } break;
3978 0           case PDL_ULL: {
3979 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_ULongLong,P,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3980 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3981 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3982 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3983 0 0         if (nod) free(nod);
3984 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
3985 0           } break;
3986 0           case PDL_LL: {
3987 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_LongLong,Q,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3988 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3989 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3990 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3991 0 0         if (nod) free(nod);
3992 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
3993 0           } break;
3994 0           case PDL_F: {
3995 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_Float,F,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
3996 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
3997 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
3998 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
3999 0 0         if (nod) free(nod);
4000 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
4001 0           } break;
4002 0           case PDL_D: {
4003 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4004 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
4005 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
4006 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
4007 0 0         if (nod) free(nod);
4008 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
4009 0           } break;
4010 0           case PDL_LD: {
4011 0 0         PDL_DECLARE_PARAMS_cuttree_1(PDL_LDouble,E,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4012 0 0         PDL_BROADCASTLOOP_START_cuttree_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
4013 0           Node *nod = p2node(__privtrans->ind_sizes[1]-1,tree_datap,NULL);
4014 0           cuttree(__privtrans->ind_sizes[1], nod, (nclusters_datap)[0], clusterids_datap);
4015 0 0         if (nod) free(nod);
4016 0 0         }PDL_BROADCASTLOOP_END_cuttree_readdata
    0          
4017 0           } break;
4018 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in cuttree: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
4019             }
4020             #undef PDL_IF_BAD
4021 0           return PDL_err;
4022             }
4023              
4024             static pdl_datatypes pdl_cuttree_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, -1 };
4025             static PDL_Indx pdl_cuttree_vtable_realdims[] = { 2, 0, 1 };
4026             static char *pdl_cuttree_vtable_parnames[] = { "tree","nclusters","clusterids" };
4027             static short pdl_cuttree_vtable_parflags[] = {
4028             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
4029             PDL_PARAM_ISTYPED,
4030             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
4031             };
4032             static pdl_datatypes pdl_cuttree_vtable_partypes[] = { PDL_L, PDL_L, PDL_L };
4033             static PDL_Indx pdl_cuttree_vtable_realdims_starts[] = { 0, 2, 2 };
4034             static PDL_Indx pdl_cuttree_vtable_realdims_ind_ids[] = { 0, 1, 1 };
4035             static char *pdl_cuttree_vtable_indnames[] = { "2","n" };
4036             pdl_transvtable pdl_cuttree_vtable = {
4037             PDL_TRANS_DO_BROADCAST, 0, pdl_cuttree_vtable_gentypes, 2, 3, NULL /*CORE21*/,
4038             pdl_cuttree_vtable_realdims, pdl_cuttree_vtable_parnames,
4039             pdl_cuttree_vtable_parflags, pdl_cuttree_vtable_partypes,
4040             pdl_cuttree_vtable_realdims_starts, pdl_cuttree_vtable_realdims_ind_ids, 3,
4041             2, pdl_cuttree_vtable_indnames,
4042             NULL, pdl_cuttree_readdata, NULL,
4043             NULL,
4044             0,"PDL::Cluster::cuttree"
4045             };
4046              
4047              
4048 0           pdl_error pdl_run_cuttree(pdl *tree,pdl *nclusters,pdl *clusterids) {
4049 0           pdl_error PDL_err = {0, NULL, 0};
4050 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
4051 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_cuttree_vtable);
4052 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
4053 0           __privtrans->pdls[0] = tree;
4054 0           __privtrans->pdls[1] = nclusters;
4055 0           __privtrans->pdls[2] = clusterids;
4056 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
4057 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
4058 0           return PDL_err;
4059             }
4060              
4061             #line 1846 "lib/PDL/PP.pm"
4062             typedef struct pdl_params_somcluster {
4063             #line 4064 "Cluster.xs"
4064             char *distFlag;
4065             } pdl_params_somcluster;
4066              
4067              
4068             #line 1857 "lib/PDL/PP.pm"
4069             pdl_error pdl_somcluster_readdata(pdl_trans *__privtrans) {
4070             pdl_error PDL_err = {0, NULL, 0};
4071             #line 4072 "Cluster.xs"
4072 2           pdl_params_somcluster *__params = __privtrans->params; (void)__params;
4073 2 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in somcluster:" "broadcast.incs NULL");
4074             /* broadcastloop declarations */
4075             int __brcloopval;
4076             register PDL_Indx __tind0,__tind1; /* counters along dim */
4077 2           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
4078             /* dims here are how many steps along those dims */
4079 2           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
4080 2           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
4081 2           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
4082 2           register PDL_Indx __tinc0_nxnodes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
4083 2           register PDL_Indx __tinc0_nynodes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
4084 2           register PDL_Indx __tinc0_inittau = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
4085 2           register PDL_Indx __tinc0_niter = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,0);
4086 2           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,0);
4087 2           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
4088 2           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
4089 2           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
4090 2           register PDL_Indx __tinc1_nxnodes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
4091 2           register PDL_Indx __tinc1_nynodes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
4092 2           register PDL_Indx __tinc1_inittau = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
4093 2           register PDL_Indx __tinc1_niter = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,1);
4094 2           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,1);
4095             #define PDL_BROADCASTLOOP_START_somcluster_readdata PDL_BROADCASTLOOP_START( \
4096             readdata, \
4097             __privtrans->broadcast, \
4098             __privtrans->vtable, \
4099             data_datap += __offsp[0]; \
4100             mask_datap += __offsp[1]; \
4101             weight_datap += __offsp[2]; \
4102             nxnodes_datap += __offsp[3]; \
4103             nynodes_datap += __offsp[4]; \
4104             inittau_datap += __offsp[5]; \
4105             niter_datap += __offsp[6]; \
4106             clusterids_datap += __offsp[7]; \
4107             , \
4108             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
4109             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
4110             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
4111             ,nxnodes_datap += __tinc1_nxnodes - __tinc0_nxnodes * __tdims0 \
4112             ,nynodes_datap += __tinc1_nynodes - __tinc0_nynodes * __tdims0 \
4113             ,inittau_datap += __tinc1_inittau - __tinc0_inittau * __tdims0 \
4114             ,niter_datap += __tinc1_niter - __tinc0_niter * __tdims0 \
4115             ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
4116             ), \
4117             ( ,data_datap += __tinc0_data \
4118             ,mask_datap += __tinc0_mask \
4119             ,weight_datap += __tinc0_weight \
4120             ,nxnodes_datap += __tinc0_nxnodes \
4121             ,nynodes_datap += __tinc0_nynodes \
4122             ,inittau_datap += __tinc0_inittau \
4123             ,niter_datap += __tinc0_niter \
4124             ,clusterids_datap += __tinc0_clusterids \
4125             ) \
4126             )
4127             #define PDL_BROADCASTLOOP_END_somcluster_readdata PDL_BROADCASTLOOP_END( \
4128             __privtrans->broadcast, \
4129             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
4130             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
4131             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
4132             nxnodes_datap -= __tinc1_nxnodes * __tdims1 + __offsp[3]; \
4133             nynodes_datap -= __tinc1_nynodes * __tdims1 + __offsp[4]; \
4134             inittau_datap -= __tinc1_inittau * __tdims1 + __offsp[5]; \
4135             niter_datap -= __tinc1_niter * __tdims1 + __offsp[6]; \
4136             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[7]; \
4137             )
4138 2           register PDL_Indx __inc_clusterids_2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,7,0)]; (void)__inc_clusterids_2;register PDL_Indx __inc_clusterids_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,7,1)]; (void)__inc_clusterids_n;
4139 2           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
4140 2           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
4141 2           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
4142             #ifndef PDL_DECLARE_PARAMS_somcluster_1
4143             #define PDL_DECLARE_PARAMS_somcluster_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_nxnodes,PDL_PPSYM_PARAM_nxnodes,PDL_TYPE_PARAM_nynodes,PDL_PPSYM_PARAM_nynodes,PDL_TYPE_PARAM_inittau,PDL_PPSYM_PARAM_inittau,PDL_TYPE_PARAM_niter,PDL_PPSYM_PARAM_niter,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids) \
4144             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
4145             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
4146             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
4147             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_nxnodes, nxnodes, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_nxnodes) \
4148             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_nynodes, nynodes, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_nynodes) \
4149             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_inittau, inittau, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_inittau) \
4150             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_niter, niter, (__privtrans->pdls[6]), 1, PDL_PPSYM_PARAM_niter) \
4151             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[7]), 1, PDL_PPSYM_PARAM_clusterids)
4152             #endif
4153             #define PDL_IF_BAD(t,f) f
4154 2           switch (__privtrans->__datatype) { /* Start generic switch */
4155 0           case PDL_SB: {
4156 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4157             {
4158 0           int transpose = 0;
4159 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4160 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4161 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4162 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4163 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4164 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4165             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4166 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4167             (int (*)[2])(clusterids_datap));
4168 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4169             /*-- cleanup --*/
4170 0 0         if (datapp) free(datapp);
4171 0 0         if (maskpp) free(maskpp);
4172             }
4173 0           } break;
4174 0           case PDL_B: {
4175 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4176             {
4177 0           int transpose = 0;
4178 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4179 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4180 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4181 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4182 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4183 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4184             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4185 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4186             (int (*)[2])(clusterids_datap));
4187 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4188             /*-- cleanup --*/
4189 0 0         if (datapp) free(datapp);
4190 0 0         if (maskpp) free(maskpp);
4191             }
4192 0           } break;
4193 0           case PDL_S: {
4194 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4195             {
4196 0           int transpose = 0;
4197 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4198 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4199 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4200 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4201 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4202 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4203             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4204 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4205             (int (*)[2])(clusterids_datap));
4206 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4207             /*-- cleanup --*/
4208 0 0         if (datapp) free(datapp);
4209 0 0         if (maskpp) free(maskpp);
4210             }
4211 0           } break;
4212 0           case PDL_US: {
4213 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4214             {
4215 0           int transpose = 0;
4216 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4217 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4218 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4219 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4220 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4221 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4222             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4223 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4224             (int (*)[2])(clusterids_datap));
4225 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4226             /*-- cleanup --*/
4227 0 0         if (datapp) free(datapp);
4228 0 0         if (maskpp) free(maskpp);
4229             }
4230 0           } break;
4231 0           case PDL_L: {
4232 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4233             {
4234 0           int transpose = 0;
4235 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4236 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4237 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4238 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4239 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4240 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4241             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4242 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4243             (int (*)[2])(clusterids_datap));
4244 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4245             /*-- cleanup --*/
4246 0 0         if (datapp) free(datapp);
4247 0 0         if (maskpp) free(maskpp);
4248             }
4249 0           } break;
4250 0           case PDL_UL: {
4251 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4252             {
4253 0           int transpose = 0;
4254 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4255 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4256 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4257 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4258 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4259 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4260             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4261 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4262             (int (*)[2])(clusterids_datap));
4263 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4264             /*-- cleanup --*/
4265 0 0         if (datapp) free(datapp);
4266 0 0         if (maskpp) free(maskpp);
4267             }
4268 0           } break;
4269 0           case PDL_IND: {
4270 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4271             {
4272 0           int transpose = 0;
4273 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4274 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4275 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4276 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4277 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4278 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4279             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4280 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4281             (int (*)[2])(clusterids_datap));
4282 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4283             /*-- cleanup --*/
4284 0 0         if (datapp) free(datapp);
4285 0 0         if (maskpp) free(maskpp);
4286             }
4287 0           } break;
4288 0           case PDL_ULL: {
4289 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4290             {
4291 0           int transpose = 0;
4292 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4293 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4294 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4295 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4296 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4297 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4298             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4299 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4300             (int (*)[2])(clusterids_datap));
4301 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4302             /*-- cleanup --*/
4303 0 0         if (datapp) free(datapp);
4304 0 0         if (maskpp) free(maskpp);
4305             }
4306 0           } break;
4307 0           case PDL_LL: {
4308 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4309             {
4310 0           int transpose = 0;
4311 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4312 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4313 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4314 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4315 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4316 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4317             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4318 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4319             (int (*)[2])(clusterids_datap));
4320 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4321             /*-- cleanup --*/
4322 0 0         if (datapp) free(datapp);
4323 0 0         if (maskpp) free(maskpp);
4324             }
4325 0           } break;
4326 0           case PDL_F: {
4327 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4328             {
4329 0           int transpose = 0;
4330 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4331 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4332 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4333 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4334 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4335 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4336             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4337 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4338             (int (*)[2])(clusterids_datap));
4339 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4340             /*-- cleanup --*/
4341 0 0         if (datapp) free(datapp);
4342 0 0         if (maskpp) free(maskpp);
4343             }
4344 0           } break;
4345 0           case PDL_D: {
4346 0 0         PDL_DECLARE_PARAMS_somcluster_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4347             {
4348 0           int transpose = 0;
4349 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4350 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4351 0 0         PDL_BROADCASTLOOP_START_somcluster_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4352 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4353 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4354 0           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4355             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4356 0           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4357             (int (*)[2])(clusterids_datap));
4358 0 0         PDL_BROADCASTLOOP_END_somcluster_readdata
    0          
4359             /*-- cleanup --*/
4360 0 0         if (datapp) free(datapp);
4361 0 0         if (maskpp) free(maskpp);
4362             }
4363 0           } break;
4364 2           case PDL_LD: {
4365 2 50         PDL_DECLARE_PARAMS_somcluster_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
4366             {
4367 2           int transpose = 0;
4368 2           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
4369 2           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
4370 8 50         PDL_BROADCASTLOOP_START_somcluster_readdata
    50          
    50          
    50          
    50          
    100          
    100          
4371 2           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], data_datap, datapp);
4372 2           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], mask_datap, maskpp);
4373 2           somcluster(__privtrans->ind_sizes[2], __privtrans->ind_sizes[1], datapp, maskpp,
4374             weight_datap, transpose, (nxnodes_datap)[0], (nynodes_datap)[0],
4375 2           (inittau_datap)[0], (niter_datap)[0], *__params->distFlag, NULL,
4376             (int (*)[2])(clusterids_datap));
4377 2 50         PDL_BROADCASTLOOP_END_somcluster_readdata
    50          
4378             /*-- cleanup --*/
4379 2 50         if (datapp) free(datapp);
4380 2 50         if (maskpp) free(maskpp);
4381             }
4382 2           } break;
4383 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in somcluster: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
4384             }
4385             #undef PDL_IF_BAD
4386 2           return PDL_err;
4387             }
4388              
4389              
4390             #line 1857 "lib/PDL/PP.pm"
4391             pdl_error pdl_somcluster_free(pdl_trans *__privtrans, char destroy) {
4392             pdl_error PDL_err = {0, NULL, 0};
4393             #line 4394 "Cluster.xs"
4394 2           pdl_params_somcluster *__params = __privtrans->params; (void)__params;
4395 2 50         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
4396 2           , ) return PDL_err;
4397             }
4398              
4399             static pdl_datatypes pdl_somcluster_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, -1 };
4400             static PDL_Indx pdl_somcluster_vtable_realdims[] = { 2, 2, 1, 0, 0, 0, 0, 2 };
4401             static char *pdl_somcluster_vtable_parnames[] = { "data","mask","weight","nxnodes","nynodes","inittau","niter","clusterids" };
4402             static short pdl_somcluster_vtable_parflags[] = {
4403             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
4404             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
4405             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
4406             PDL_PARAM_ISTYPED,
4407             PDL_PARAM_ISTYPED,
4408             PDL_PARAM_ISTYPED,
4409             PDL_PARAM_ISTYPED,
4410             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
4411             };
4412             static pdl_datatypes pdl_somcluster_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_L, PDL_L, PDL_D, PDL_L, PDL_L };
4413             static PDL_Indx pdl_somcluster_vtable_realdims_starts[] = { 0, 2, 4, 5, 5, 5, 5, 5 };
4414             static PDL_Indx pdl_somcluster_vtable_realdims_ind_ids[] = { 1, 2, 1, 2, 1, 0, 2 };
4415             static char *pdl_somcluster_vtable_indnames[] = { "2","d","n" };
4416             pdl_transvtable pdl_somcluster_vtable = {
4417             PDL_TRANS_DO_BROADCAST, 0, pdl_somcluster_vtable_gentypes, 7, 8, NULL /*CORE21*/,
4418             pdl_somcluster_vtable_realdims, pdl_somcluster_vtable_parnames,
4419             pdl_somcluster_vtable_parflags, pdl_somcluster_vtable_partypes,
4420             pdl_somcluster_vtable_realdims_starts, pdl_somcluster_vtable_realdims_ind_ids, 7,
4421             3, pdl_somcluster_vtable_indnames,
4422             NULL, pdl_somcluster_readdata, NULL,
4423             pdl_somcluster_free,
4424             sizeof(pdl_params_somcluster),"PDL::Cluster::somcluster"
4425             };
4426              
4427              
4428 2           pdl_error pdl_run_somcluster(pdl *data,pdl *mask,pdl *weight,pdl *nxnodes,pdl *nynodes,pdl *inittau,pdl *niter,pdl *clusterids,char *distFlag) {
4429 2           pdl_error PDL_err = {0, NULL, 0};
4430 2 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
4431 2           pdl_trans *__privtrans = PDL->create_trans(&pdl_somcluster_vtable);
4432 2 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
4433 2           pdl_params_somcluster *__params = __privtrans->params;
4434 2           __privtrans->pdls[0] = data;
4435 2           __privtrans->pdls[1] = mask;
4436 2           __privtrans->pdls[2] = weight;
4437 2           __privtrans->pdls[3] = nxnodes;
4438 2           __privtrans->pdls[4] = nynodes;
4439 2           __privtrans->pdls[5] = inittau;
4440 2           __privtrans->pdls[6] = niter;
4441 2           __privtrans->pdls[7] = clusterids;
4442 2 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
4443 2           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
4444 2 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
4445 2           return PDL_err;
4446             }
4447              
4448             #line 1857 "lib/PDL/PP.pm"
4449             pdl_error pdl_pca_readdata(pdl_trans *__privtrans) {
4450             pdl_error PDL_err = {0, NULL, 0};
4451             #line 4452 "Cluster.xs"
4452 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in pca:" "broadcast.incs NULL");
4453             /* broadcastloop declarations */
4454             int __brcloopval;
4455             register PDL_Indx __tind0,__tind1; /* counters along dim */
4456 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
4457             /* dims here are how many steps along those dims */
4458 0           register PDL_Indx __tinc0_U = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
4459 0           register PDL_Indx __tinc0_S = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
4460 0           register PDL_Indx __tinc0_V = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
4461 0           register PDL_Indx __tinc1_U = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
4462 0           register PDL_Indx __tinc1_S = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
4463 0           register PDL_Indx __tinc1_V = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
4464             #define PDL_BROADCASTLOOP_START_pca_readdata PDL_BROADCASTLOOP_START( \
4465             readdata, \
4466             __privtrans->broadcast, \
4467             __privtrans->vtable, \
4468             U_datap += __offsp[0]; \
4469             S_datap += __offsp[1]; \
4470             V_datap += __offsp[2]; \
4471             , \
4472             ( ,U_datap += __tinc1_U - __tinc0_U * __tdims0 \
4473             ,S_datap += __tinc1_S - __tinc0_S * __tdims0 \
4474             ,V_datap += __tinc1_V - __tinc0_V * __tdims0 \
4475             ), \
4476             ( ,U_datap += __tinc0_U \
4477             ,S_datap += __tinc0_S \
4478             ,V_datap += __tinc0_V \
4479             ) \
4480             )
4481             #define PDL_BROADCASTLOOP_END_pca_readdata PDL_BROADCASTLOOP_END( \
4482             __privtrans->broadcast, \
4483             U_datap -= __tinc1_U * __tdims1 + __offsp[0]; \
4484             S_datap -= __tinc1_S * __tdims1 + __offsp[1]; \
4485             V_datap -= __tinc1_V * __tdims1 + __offsp[2]; \
4486             )
4487 0           register PDL_Indx __inc_S_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_S_d;
4488 0           register PDL_Indx __inc_U_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_U_d;register PDL_Indx __inc_U_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_U_n;
4489 0           register PDL_Indx __inc_V_d0 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_V_d0;register PDL_Indx __inc_V_d1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,1)]; (void)__inc_V_d1;
4490             #ifndef PDL_DECLARE_PARAMS_pca_1
4491             #define PDL_DECLARE_PARAMS_pca_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_U,PDL_PPSYM_PARAM_U,PDL_TYPE_PARAM_S,PDL_PPSYM_PARAM_S,PDL_TYPE_PARAM_V,PDL_PPSYM_PARAM_V) \
4492             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_U, U, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_U) \
4493             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_S, S, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_S) \
4494             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_V, V, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_V)
4495             #endif
4496             #define PDL_IF_BAD(t,f) f
4497 0           switch (__privtrans->__datatype) { /* Start generic switch */
4498 0           case PDL_SB: {
4499 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_SByte,A,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4500             {
4501 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4502 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4503 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4504 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4505             }
4506 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4507 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4508 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4509 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4510 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4511             /*-- cleanup --*/
4512 0 0         if (Upp) free(Upp);
4513 0 0         if (Vpp) free(Vpp);
4514             }
4515 0           } break;
4516 0           case PDL_B: {
4517 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_Byte,B,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4518             {
4519 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4520 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4521 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4522 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4523             }
4524 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4525 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4526 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4527 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4528 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4529             /*-- cleanup --*/
4530 0 0         if (Upp) free(Upp);
4531 0 0         if (Vpp) free(Vpp);
4532             }
4533 0           } break;
4534 0           case PDL_S: {
4535 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_Short,S,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4536             {
4537 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4538 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4539 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4540 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4541             }
4542 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4543 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4544 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4545 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4546 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4547             /*-- cleanup --*/
4548 0 0         if (Upp) free(Upp);
4549 0 0         if (Vpp) free(Vpp);
4550             }
4551 0           } break;
4552 0           case PDL_US: {
4553 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_Ushort,U,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4554             {
4555 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4556 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4557 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4558 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4559             }
4560 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4561 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4562 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4563 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4564 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4565             /*-- cleanup --*/
4566 0 0         if (Upp) free(Upp);
4567 0 0         if (Vpp) free(Vpp);
4568             }
4569 0           } break;
4570 0           case PDL_L: {
4571 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4572             {
4573 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4574 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4575 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4576 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4577             }
4578 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4579 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4580 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4581 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4582 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4583             /*-- cleanup --*/
4584 0 0         if (Upp) free(Upp);
4585 0 0         if (Vpp) free(Vpp);
4586             }
4587 0           } break;
4588 0           case PDL_UL: {
4589 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_ULong,K,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4590             {
4591 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4592 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4593 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4594 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4595             }
4596 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4597 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4598 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4599 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4600 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4601             /*-- cleanup --*/
4602 0 0         if (Upp) free(Upp);
4603 0 0         if (Vpp) free(Vpp);
4604             }
4605 0           } break;
4606 0           case PDL_IND: {
4607 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_Indx,N,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4608             {
4609 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4610 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4611 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4612 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4613             }
4614 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4615 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4616 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4617 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4618 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4619             /*-- cleanup --*/
4620 0 0         if (Upp) free(Upp);
4621 0 0         if (Vpp) free(Vpp);
4622             }
4623 0           } break;
4624 0           case PDL_ULL: {
4625 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_ULongLong,P,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4626             {
4627 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4628 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4629 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4630 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4631             }
4632 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4633 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4634 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4635 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4636 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4637             /*-- cleanup --*/
4638 0 0         if (Upp) free(Upp);
4639 0 0         if (Vpp) free(Vpp);
4640             }
4641 0           } break;
4642 0           case PDL_LL: {
4643 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_LongLong,Q,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4644             {
4645 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4646 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4647 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4648 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4649             }
4650 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4651 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4652 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4653 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4654 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4655             /*-- cleanup --*/
4656 0 0         if (Upp) free(Upp);
4657 0 0         if (Vpp) free(Vpp);
4658             }
4659 0           } break;
4660 0           case PDL_F: {
4661 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_Float,F,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4662             {
4663 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4664 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4665 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4666 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4667             }
4668 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4669 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4670 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4671 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4672 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4673             /*-- cleanup --*/
4674 0 0         if (Upp) free(Upp);
4675 0 0         if (Vpp) free(Vpp);
4676             }
4677 0           } break;
4678 0           case PDL_D: {
4679 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_Double,D,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4680             {
4681 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4682 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4683 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4684 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4685             }
4686 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4687 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4688 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4689 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4690 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4691             /*-- cleanup --*/
4692 0 0         if (Upp) free(Upp);
4693 0 0         if (Vpp) free(Vpp);
4694             }
4695 0           } break;
4696 0           case PDL_LD: {
4697 0 0         PDL_DECLARE_PARAMS_pca_1(PDL_LDouble,E,PDL_Double,D,PDL_Double,D,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4698             {
4699 0           double **Upp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4700 0           double **Vpp = (double **)pp_alloc(__privtrans->ind_sizes[0]);
4701 0 0         if (__privtrans->ind_sizes[1] < __privtrans->ind_sizes[0]) {
4702 0           barf("svd(): Number of rows (=%d) must be >= number of columns (=%d)!\n", __privtrans->ind_sizes[1], __privtrans->ind_sizes[0]);
4703             }
4704 0 0         PDL_BROADCASTLOOP_START_pca_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4705 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], U_datap, Upp);
4706 0           p2pp_dbl(__privtrans->ind_sizes[0], __privtrans->ind_sizes[0], V_datap, Vpp);
4707 0           pca(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], Upp, Vpp, S_datap);
4708 0 0         PDL_BROADCASTLOOP_END_pca_readdata
    0          
4709             /*-- cleanup --*/
4710 0 0         if (Upp) free(Upp);
4711 0 0         if (Vpp) free(Vpp);
4712             }
4713 0           } break;
4714 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in pca: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
4715             }
4716             #undef PDL_IF_BAD
4717 0           return PDL_err;
4718             }
4719              
4720             static pdl_datatypes pdl_pca_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, -1 };
4721             static PDL_Indx pdl_pca_vtable_realdims[] = { 2, 1, 2 };
4722             static char *pdl_pca_vtable_parnames[] = { "U","S","V" };
4723             static short pdl_pca_vtable_parflags[] = {
4724             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
4725             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
4726             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
4727             };
4728             static pdl_datatypes pdl_pca_vtable_partypes[] = { PDL_D, PDL_D, PDL_D };
4729             static PDL_Indx pdl_pca_vtable_realdims_starts[] = { 0, 2, 3 };
4730             static PDL_Indx pdl_pca_vtable_realdims_ind_ids[] = { 0, 1, 0, 0, 0 };
4731             static char *pdl_pca_vtable_indnames[] = { "d","n" };
4732             pdl_transvtable pdl_pca_vtable = {
4733             PDL_TRANS_DO_BROADCAST, 0, pdl_pca_vtable_gentypes, 0, 3, NULL /*CORE21*/,
4734             pdl_pca_vtable_realdims, pdl_pca_vtable_parnames,
4735             pdl_pca_vtable_parflags, pdl_pca_vtable_partypes,
4736             pdl_pca_vtable_realdims_starts, pdl_pca_vtable_realdims_ind_ids, 5,
4737             2, pdl_pca_vtable_indnames,
4738             NULL, pdl_pca_readdata, NULL,
4739             NULL,
4740             0,"PDL::Cluster::pca"
4741             };
4742              
4743              
4744 0           pdl_error pdl_run_pca(pdl *U,pdl *S,pdl *V) {
4745 0           pdl_error PDL_err = {0, NULL, 0};
4746 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
4747 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_pca_vtable);
4748 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
4749 0           __privtrans->pdls[0] = U;
4750 0           __privtrans->pdls[1] = S;
4751 0           __privtrans->pdls[2] = V;
4752 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
4753 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
4754 0           return PDL_err;
4755             }
4756              
4757             #line 1846 "lib/PDL/PP.pm"
4758             typedef struct pdl_params_rowdistances {
4759             #line 4760 "Cluster.xs"
4760             char *distFlag;
4761             } pdl_params_rowdistances;
4762              
4763              
4764             #line 1857 "lib/PDL/PP.pm"
4765             pdl_error pdl_rowdistances_readdata(pdl_trans *__privtrans) {
4766             pdl_error PDL_err = {0, NULL, 0};
4767             #line 4768 "Cluster.xs"
4768 0           pdl_params_rowdistances *__params = __privtrans->params; (void)__params;
4769 0           register PDL_Indx __ncmps_size = __privtrans->ind_sizes[2];
4770 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in rowdistances:" "broadcast.incs NULL");
4771             /* broadcastloop declarations */
4772             int __brcloopval;
4773             register PDL_Indx __tind0,__tind1; /* counters along dim */
4774 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
4775             /* dims here are how many steps along those dims */
4776 0           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
4777 0           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
4778 0           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
4779 0           register PDL_Indx __tinc0_rowids1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
4780 0           register PDL_Indx __tinc0_rowids2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
4781 0           register PDL_Indx __tinc0_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
4782 0           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
4783 0           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
4784 0           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
4785 0           register PDL_Indx __tinc1_rowids1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
4786 0           register PDL_Indx __tinc1_rowids2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
4787 0           register PDL_Indx __tinc1_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
4788             #define PDL_BROADCASTLOOP_START_rowdistances_readdata PDL_BROADCASTLOOP_START( \
4789             readdata, \
4790             __privtrans->broadcast, \
4791             __privtrans->vtable, \
4792             data_datap += __offsp[0]; \
4793             mask_datap += __offsp[1]; \
4794             weight_datap += __offsp[2]; \
4795             rowids1_datap += __offsp[3]; \
4796             rowids2_datap += __offsp[4]; \
4797             dist_datap += __offsp[5]; \
4798             , \
4799             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
4800             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
4801             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
4802             ,rowids1_datap += __tinc1_rowids1 - __tinc0_rowids1 * __tdims0 \
4803             ,rowids2_datap += __tinc1_rowids2 - __tinc0_rowids2 * __tdims0 \
4804             ,dist_datap += __tinc1_dist - __tinc0_dist * __tdims0 \
4805             ), \
4806             ( ,data_datap += __tinc0_data \
4807             ,mask_datap += __tinc0_mask \
4808             ,weight_datap += __tinc0_weight \
4809             ,rowids1_datap += __tinc0_rowids1 \
4810             ,rowids2_datap += __tinc0_rowids2 \
4811             ,dist_datap += __tinc0_dist \
4812             ) \
4813             )
4814             #define PDL_BROADCASTLOOP_END_rowdistances_readdata PDL_BROADCASTLOOP_END( \
4815             __privtrans->broadcast, \
4816             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
4817             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
4818             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
4819             rowids1_datap -= __tinc1_rowids1 * __tdims1 + __offsp[3]; \
4820             rowids2_datap -= __tinc1_rowids2 * __tdims1 + __offsp[4]; \
4821             dist_datap -= __tinc1_dist * __tdims1 + __offsp[5]; \
4822             )
4823 0           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
4824 0           register PDL_Indx __inc_dist_ncmps = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_dist_ncmps;
4825 0           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
4826 0           register PDL_Indx __inc_rowids1_ncmps = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_rowids1_ncmps;
4827 0           register PDL_Indx __inc_rowids2_ncmps = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_rowids2_ncmps;
4828 0           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
4829             #ifndef PDL_DECLARE_PARAMS_rowdistances_1
4830             #define PDL_DECLARE_PARAMS_rowdistances_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_rowids1,PDL_PPSYM_PARAM_rowids1,PDL_TYPE_PARAM_rowids2,PDL_PPSYM_PARAM_rowids2,PDL_TYPE_PARAM_dist,PDL_PPSYM_PARAM_dist) \
4831             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
4832             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
4833             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
4834             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_rowids1, rowids1, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_rowids1) \
4835             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_rowids2, rowids2, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_rowids2) \
4836             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_dist, dist, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_dist)
4837             #endif
4838             #define PDL_IF_BAD(t,f) f
4839 0           switch (__privtrans->__datatype) { /* Start generic switch */
4840 0           case PDL_SB: {
4841 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4842             {
4843 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4844 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
4845             int rowid1, rowid2;
4846 0           char methodChar = 'x'; /*-- doesnt matter --*/
4847 0           int transpose=0;
4848 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4849 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
4850 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
4851 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
4852 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
4853 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
4854 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
4855             1, 1,
4856             &rowid1, &rowid2,
4857 0           *__params->distFlag, methodChar, transpose);
4858             }} /* Close ncmps */
4859 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
4860             /*-- cleanup --*/
4861 0 0         if (datapp) free(datapp);
4862 0 0         if (maskpp) free(maskpp);
4863             }
4864 0           } break;
4865 0           case PDL_B: {
4866 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4867             {
4868 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4869 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
4870             int rowid1, rowid2;
4871 0           char methodChar = 'x'; /*-- doesnt matter --*/
4872 0           int transpose=0;
4873 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4874 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
4875 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
4876 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
4877 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
4878 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
4879 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
4880             1, 1,
4881             &rowid1, &rowid2,
4882 0           *__params->distFlag, methodChar, transpose);
4883             }} /* Close ncmps */
4884 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
4885             /*-- cleanup --*/
4886 0 0         if (datapp) free(datapp);
4887 0 0         if (maskpp) free(maskpp);
4888             }
4889 0           } break;
4890 0           case PDL_S: {
4891 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4892             {
4893 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4894 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
4895             int rowid1, rowid2;
4896 0           char methodChar = 'x'; /*-- doesnt matter --*/
4897 0           int transpose=0;
4898 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4899 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
4900 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
4901 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
4902 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
4903 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
4904 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
4905             1, 1,
4906             &rowid1, &rowid2,
4907 0           *__params->distFlag, methodChar, transpose);
4908             }} /* Close ncmps */
4909 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
4910             /*-- cleanup --*/
4911 0 0         if (datapp) free(datapp);
4912 0 0         if (maskpp) free(maskpp);
4913             }
4914 0           } break;
4915 0           case PDL_US: {
4916 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4917             {
4918 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4919 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
4920             int rowid1, rowid2;
4921 0           char methodChar = 'x'; /*-- doesnt matter --*/
4922 0           int transpose=0;
4923 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4924 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
4925 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
4926 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
4927 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
4928 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
4929 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
4930             1, 1,
4931             &rowid1, &rowid2,
4932 0           *__params->distFlag, methodChar, transpose);
4933             }} /* Close ncmps */
4934 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
4935             /*-- cleanup --*/
4936 0 0         if (datapp) free(datapp);
4937 0 0         if (maskpp) free(maskpp);
4938             }
4939 0           } break;
4940 0           case PDL_L: {
4941 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4942             {
4943 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4944 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
4945             int rowid1, rowid2;
4946 0           char methodChar = 'x'; /*-- doesnt matter --*/
4947 0           int transpose=0;
4948 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4949 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
4950 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
4951 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
4952 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
4953 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
4954 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
4955             1, 1,
4956             &rowid1, &rowid2,
4957 0           *__params->distFlag, methodChar, transpose);
4958             }} /* Close ncmps */
4959 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
4960             /*-- cleanup --*/
4961 0 0         if (datapp) free(datapp);
4962 0 0         if (maskpp) free(maskpp);
4963             }
4964 0           } break;
4965 0           case PDL_UL: {
4966 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4967             {
4968 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4969 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
4970             int rowid1, rowid2;
4971 0           char methodChar = 'x'; /*-- doesnt matter --*/
4972 0           int transpose=0;
4973 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4974 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
4975 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
4976 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
4977 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
4978 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
4979 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
4980             1, 1,
4981             &rowid1, &rowid2,
4982 0           *__params->distFlag, methodChar, transpose);
4983             }} /* Close ncmps */
4984 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
4985             /*-- cleanup --*/
4986 0 0         if (datapp) free(datapp);
4987 0 0         if (maskpp) free(maskpp);
4988             }
4989 0           } break;
4990 0           case PDL_IND: {
4991 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
4992             {
4993 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
4994 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
4995             int rowid1, rowid2;
4996 0           char methodChar = 'x'; /*-- doesnt matter --*/
4997 0           int transpose=0;
4998 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
4999 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5000 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5001 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
5002 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
5003 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
5004 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5005             1, 1,
5006             &rowid1, &rowid2,
5007 0           *__params->distFlag, methodChar, transpose);
5008             }} /* Close ncmps */
5009 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
5010             /*-- cleanup --*/
5011 0 0         if (datapp) free(datapp);
5012 0 0         if (maskpp) free(maskpp);
5013             }
5014 0           } break;
5015 0           case PDL_ULL: {
5016 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5017             {
5018 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5019 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5020             int rowid1, rowid2;
5021 0           char methodChar = 'x'; /*-- doesnt matter --*/
5022 0           int transpose=0;
5023 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5024 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5025 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5026 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
5027 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
5028 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
5029 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5030             1, 1,
5031             &rowid1, &rowid2,
5032 0           *__params->distFlag, methodChar, transpose);
5033             }} /* Close ncmps */
5034 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
5035             /*-- cleanup --*/
5036 0 0         if (datapp) free(datapp);
5037 0 0         if (maskpp) free(maskpp);
5038             }
5039 0           } break;
5040 0           case PDL_LL: {
5041 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5042             {
5043 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5044 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5045             int rowid1, rowid2;
5046 0           char methodChar = 'x'; /*-- doesnt matter --*/
5047 0           int transpose=0;
5048 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5049 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5050 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5051 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
5052 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
5053 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
5054 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5055             1, 1,
5056             &rowid1, &rowid2,
5057 0           *__params->distFlag, methodChar, transpose);
5058             }} /* Close ncmps */
5059 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
5060             /*-- cleanup --*/
5061 0 0         if (datapp) free(datapp);
5062 0 0         if (maskpp) free(maskpp);
5063             }
5064 0           } break;
5065 0           case PDL_F: {
5066 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5067             {
5068 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5069 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5070             int rowid1, rowid2;
5071 0           char methodChar = 'x'; /*-- doesnt matter --*/
5072 0           int transpose=0;
5073 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5074 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5075 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5076 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
5077 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
5078 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
5079 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5080             1, 1,
5081             &rowid1, &rowid2,
5082 0           *__params->distFlag, methodChar, transpose);
5083             }} /* Close ncmps */
5084 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
5085             /*-- cleanup --*/
5086 0 0         if (datapp) free(datapp);
5087 0 0         if (maskpp) free(maskpp);
5088             }
5089 0           } break;
5090 0           case PDL_D: {
5091 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5092             {
5093 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5094 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5095             int rowid1, rowid2;
5096 0           char methodChar = 'x'; /*-- doesnt matter --*/
5097 0           int transpose=0;
5098 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5099 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5100 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5101 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
5102 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
5103 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
5104 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5105             1, 1,
5106             &rowid1, &rowid2,
5107 0           *__params->distFlag, methodChar, transpose);
5108             }} /* Close ncmps */
5109 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
5110             /*-- cleanup --*/
5111 0 0         if (datapp) free(datapp);
5112 0 0         if (maskpp) free(maskpp);
5113             }
5114 0           } break;
5115 0           case PDL_LD: {
5116 0 0         PDL_DECLARE_PARAMS_rowdistances_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5117             {
5118 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5119 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5120             int rowid1, rowid2;
5121 0           char methodChar = 'x'; /*-- doesnt matter --*/
5122 0           int transpose=0;
5123 0 0         PDL_BROADCASTLOOP_START_rowdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5124 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5125 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5126 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
5127 0           rowid1 = (rowids1_datap)[0+(__inc_rowids1_ncmps*(ncmps))];
5128 0           rowid2 = (rowids2_datap)[0+(__inc_rowids2_ncmps*(ncmps))];
5129 0           (dist_datap)[0+(__inc_dist_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5130             1, 1,
5131             &rowid1, &rowid2,
5132 0           *__params->distFlag, methodChar, transpose);
5133             }} /* Close ncmps */
5134 0 0         PDL_BROADCASTLOOP_END_rowdistances_readdata
    0          
5135             /*-- cleanup --*/
5136 0 0         if (datapp) free(datapp);
5137 0 0         if (maskpp) free(maskpp);
5138             }
5139 0           } break;
5140 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in rowdistances: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
5141             }
5142             #undef PDL_IF_BAD
5143 0           return PDL_err;
5144             }
5145              
5146              
5147             #line 1857 "lib/PDL/PP.pm"
5148             pdl_error pdl_rowdistances_free(pdl_trans *__privtrans, char destroy) {
5149             pdl_error PDL_err = {0, NULL, 0};
5150             #line 5151 "Cluster.xs"
5151 0           pdl_params_rowdistances *__params = __privtrans->params; (void)__params;
5152 0 0         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
5153 0           , ) return PDL_err;
5154             }
5155              
5156             static pdl_datatypes pdl_rowdistances_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, -1 };
5157             static PDL_Indx pdl_rowdistances_vtable_realdims[] = { 2, 2, 1, 1, 1, 1 };
5158             static char *pdl_rowdistances_vtable_parnames[] = { "data","mask","weight","rowids1","rowids2","dist" };
5159             static short pdl_rowdistances_vtable_parflags[] = {
5160             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
5161             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
5162             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
5163             PDL_PARAM_ISTYPED,
5164             PDL_PARAM_ISTYPED,
5165             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
5166             };
5167             static pdl_datatypes pdl_rowdistances_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_L, PDL_L, PDL_D };
5168             static PDL_Indx pdl_rowdistances_vtable_realdims_starts[] = { 0, 2, 4, 5, 6, 7 };
5169             static PDL_Indx pdl_rowdistances_vtable_realdims_ind_ids[] = { 0, 1, 0, 1, 0, 2, 2, 2 };
5170             static char *pdl_rowdistances_vtable_indnames[] = { "d","n","ncmps" };
5171             pdl_transvtable pdl_rowdistances_vtable = {
5172             PDL_TRANS_DO_BROADCAST, 0, pdl_rowdistances_vtable_gentypes, 5, 6, NULL /*CORE21*/,
5173             pdl_rowdistances_vtable_realdims, pdl_rowdistances_vtable_parnames,
5174             pdl_rowdistances_vtable_parflags, pdl_rowdistances_vtable_partypes,
5175             pdl_rowdistances_vtable_realdims_starts, pdl_rowdistances_vtable_realdims_ind_ids, 8,
5176             3, pdl_rowdistances_vtable_indnames,
5177             NULL, pdl_rowdistances_readdata, NULL,
5178             pdl_rowdistances_free,
5179             sizeof(pdl_params_rowdistances),"PDL::Cluster::rowdistances"
5180             };
5181              
5182              
5183 0           pdl_error pdl_run_rowdistances(pdl *data,pdl *mask,pdl *weight,pdl *rowids1,pdl *rowids2,pdl *dist,char *distFlag) {
5184 0           pdl_error PDL_err = {0, NULL, 0};
5185 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
5186 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_rowdistances_vtable);
5187 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
5188 0           pdl_params_rowdistances *__params = __privtrans->params;
5189 0           __privtrans->pdls[0] = data;
5190 0           __privtrans->pdls[1] = mask;
5191 0           __privtrans->pdls[2] = weight;
5192 0           __privtrans->pdls[3] = rowids1;
5193 0           __privtrans->pdls[4] = rowids2;
5194 0           __privtrans->pdls[5] = dist;
5195 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
5196 0           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
5197 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
5198 0           return PDL_err;
5199             }
5200              
5201             #line 1846 "lib/PDL/PP.pm"
5202             typedef struct pdl_params_clusterdistances {
5203             #line 5204 "Cluster.xs"
5204             char *distFlag;
5205             char *methodFlag;
5206             } pdl_params_clusterdistances;
5207              
5208              
5209             #line 1857 "lib/PDL/PP.pm"
5210             pdl_error pdl_clusterdistances_readdata(pdl_trans *__privtrans) {
5211             pdl_error PDL_err = {0, NULL, 0};
5212             #line 5213 "Cluster.xs"
5213 0           pdl_params_clusterdistances *__params = __privtrans->params; (void)__params;
5214 0           register PDL_Indx __nr_size = __privtrans->ind_sizes[3];
5215 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in clusterdistances:" "broadcast.incs NULL");
5216             /* broadcastloop declarations */
5217             int __brcloopval;
5218             register PDL_Indx __tind0,__tind1; /* counters along dim */
5219 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
5220             /* dims here are how many steps along those dims */
5221 0           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
5222 0           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
5223 0           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
5224 0           register PDL_Indx __tinc0_rowids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
5225 0           register PDL_Indx __tinc0_index2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
5226 0           register PDL_Indx __tinc0_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
5227 0           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
5228 0           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
5229 0           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
5230 0           register PDL_Indx __tinc1_rowids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
5231 0           register PDL_Indx __tinc1_index2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
5232 0           register PDL_Indx __tinc1_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
5233             #define PDL_BROADCASTLOOP_START_clusterdistances_readdata PDL_BROADCASTLOOP_START( \
5234             readdata, \
5235             __privtrans->broadcast, \
5236             __privtrans->vtable, \
5237             data_datap += __offsp[0]; \
5238             mask_datap += __offsp[1]; \
5239             weight_datap += __offsp[2]; \
5240             rowids_datap += __offsp[3]; \
5241             index2_datap += __offsp[4]; \
5242             dist_datap += __offsp[5]; \
5243             , \
5244             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
5245             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
5246             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
5247             ,rowids_datap += __tinc1_rowids - __tinc0_rowids * __tdims0 \
5248             ,index2_datap += __tinc1_index2 - __tinc0_index2 * __tdims0 \
5249             ,dist_datap += __tinc1_dist - __tinc0_dist * __tdims0 \
5250             ), \
5251             ( ,data_datap += __tinc0_data \
5252             ,mask_datap += __tinc0_mask \
5253             ,weight_datap += __tinc0_weight \
5254             ,rowids_datap += __tinc0_rowids \
5255             ,index2_datap += __tinc0_index2 \
5256             ,dist_datap += __tinc0_dist \
5257             ) \
5258             )
5259             #define PDL_BROADCASTLOOP_END_clusterdistances_readdata PDL_BROADCASTLOOP_END( \
5260             __privtrans->broadcast, \
5261             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
5262             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
5263             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
5264             rowids_datap -= __tinc1_rowids * __tdims1 + __offsp[3]; \
5265             index2_datap -= __tinc1_index2 * __tdims1 + __offsp[4]; \
5266             dist_datap -= __tinc1_dist * __tdims1 + __offsp[5]; \
5267             )
5268 0           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
5269 0           register PDL_Indx __inc_dist_nr = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_dist_nr;
5270 0           register PDL_Indx __inc_index2_n2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_index2_n2;
5271 0           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
5272 0           register PDL_Indx __inc_rowids_nr = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_rowids_nr;
5273 0           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
5274             #ifndef PDL_DECLARE_PARAMS_clusterdistances_1
5275             #define PDL_DECLARE_PARAMS_clusterdistances_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_rowids,PDL_PPSYM_PARAM_rowids,PDL_TYPE_PARAM_index2,PDL_PPSYM_PARAM_index2,PDL_TYPE_PARAM_dist,PDL_PPSYM_PARAM_dist) \
5276             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
5277             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
5278             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
5279             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_rowids, rowids, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_rowids) \
5280             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_index2, index2, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_index2) \
5281             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_dist, dist, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_dist)
5282             #endif
5283             #define PDL_IF_BAD(t,f) f
5284 0           switch (__privtrans->__datatype) { /* Start generic switch */
5285 0           case PDL_SB: {
5286 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5287             {
5288 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5289 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5290 0           int transpose=0;
5291 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5292 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5293 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5294 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5295 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5296 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5297 0           *__params->distFlag, *__params->methodFlag, transpose);
5298             }} /* Close nr */
5299 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5300             /*-- cleanup --*/
5301 0 0         if (datapp) free(datapp);
5302 0 0         if (maskpp) free(maskpp);
5303             }
5304 0           } break;
5305 0           case PDL_B: {
5306 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5307             {
5308 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5309 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5310 0           int transpose=0;
5311 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5312 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5313 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5314 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5315 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5316 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5317 0           *__params->distFlag, *__params->methodFlag, transpose);
5318             }} /* Close nr */
5319 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5320             /*-- cleanup --*/
5321 0 0         if (datapp) free(datapp);
5322 0 0         if (maskpp) free(maskpp);
5323             }
5324 0           } break;
5325 0           case PDL_S: {
5326 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5327             {
5328 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5329 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5330 0           int transpose=0;
5331 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5332 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5333 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5334 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5335 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5336 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5337 0           *__params->distFlag, *__params->methodFlag, transpose);
5338             }} /* Close nr */
5339 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5340             /*-- cleanup --*/
5341 0 0         if (datapp) free(datapp);
5342 0 0         if (maskpp) free(maskpp);
5343             }
5344 0           } break;
5345 0           case PDL_US: {
5346 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5347             {
5348 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5349 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5350 0           int transpose=0;
5351 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5352 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5353 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5354 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5355 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5356 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5357 0           *__params->distFlag, *__params->methodFlag, transpose);
5358             }} /* Close nr */
5359 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5360             /*-- cleanup --*/
5361 0 0         if (datapp) free(datapp);
5362 0 0         if (maskpp) free(maskpp);
5363             }
5364 0           } break;
5365 0           case PDL_L: {
5366 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5367             {
5368 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5369 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5370 0           int transpose=0;
5371 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5372 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5373 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5374 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5375 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5376 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5377 0           *__params->distFlag, *__params->methodFlag, transpose);
5378             }} /* Close nr */
5379 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5380             /*-- cleanup --*/
5381 0 0         if (datapp) free(datapp);
5382 0 0         if (maskpp) free(maskpp);
5383             }
5384 0           } break;
5385 0           case PDL_UL: {
5386 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5387             {
5388 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5389 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5390 0           int transpose=0;
5391 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5392 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5393 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5394 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5395 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5396 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5397 0           *__params->distFlag, *__params->methodFlag, transpose);
5398             }} /* Close nr */
5399 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5400             /*-- cleanup --*/
5401 0 0         if (datapp) free(datapp);
5402 0 0         if (maskpp) free(maskpp);
5403             }
5404 0           } break;
5405 0           case PDL_IND: {
5406 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5407             {
5408 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5409 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5410 0           int transpose=0;
5411 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5412 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5413 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5414 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5415 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5416 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5417 0           *__params->distFlag, *__params->methodFlag, transpose);
5418             }} /* Close nr */
5419 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5420             /*-- cleanup --*/
5421 0 0         if (datapp) free(datapp);
5422 0 0         if (maskpp) free(maskpp);
5423             }
5424 0           } break;
5425 0           case PDL_ULL: {
5426 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5427             {
5428 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5429 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5430 0           int transpose=0;
5431 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5432 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5433 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5434 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5435 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5436 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5437 0           *__params->distFlag, *__params->methodFlag, transpose);
5438             }} /* Close nr */
5439 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5440             /*-- cleanup --*/
5441 0 0         if (datapp) free(datapp);
5442 0 0         if (maskpp) free(maskpp);
5443             }
5444 0           } break;
5445 0           case PDL_LL: {
5446 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5447             {
5448 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5449 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5450 0           int transpose=0;
5451 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5452 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5453 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5454 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5455 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5456 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5457 0           *__params->distFlag, *__params->methodFlag, transpose);
5458             }} /* Close nr */
5459 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5460             /*-- cleanup --*/
5461 0 0         if (datapp) free(datapp);
5462 0 0         if (maskpp) free(maskpp);
5463             }
5464 0           } break;
5465 0           case PDL_F: {
5466 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5467             {
5468 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5469 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5470 0           int transpose=0;
5471 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5472 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5473 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5474 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5475 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5476 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5477 0           *__params->distFlag, *__params->methodFlag, transpose);
5478             }} /* Close nr */
5479 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5480             /*-- cleanup --*/
5481 0 0         if (datapp) free(datapp);
5482 0 0         if (maskpp) free(maskpp);
5483             }
5484 0           } break;
5485 0           case PDL_D: {
5486 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5487             {
5488 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5489 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5490 0           int transpose=0;
5491 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5492 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5493 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5494 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5495 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5496 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5497 0           *__params->distFlag, *__params->methodFlag, transpose);
5498             }} /* Close nr */
5499 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5500             /*-- cleanup --*/
5501 0 0         if (datapp) free(datapp);
5502 0 0         if (maskpp) free(maskpp);
5503             }
5504 0           } break;
5505 0           case PDL_LD: {
5506 0 0         PDL_DECLARE_PARAMS_clusterdistances_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5507             {
5508 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
5509 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
5510 0           int transpose=0;
5511 0 0         PDL_BROADCASTLOOP_START_clusterdistances_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5512 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], data_datap, datapp);
5513 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], mask_datap, maskpp);
5514 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
5515 0           (dist_datap)[0+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
5516 0           1, __privtrans->ind_sizes[2], &((rowids_datap)[0+(__inc_rowids_nr*(nr))]), index2_datap,
5517 0           *__params->distFlag, *__params->methodFlag, transpose);
5518             }} /* Close nr */
5519 0 0         PDL_BROADCASTLOOP_END_clusterdistances_readdata
    0          
5520             /*-- cleanup --*/
5521 0 0         if (datapp) free(datapp);
5522 0 0         if (maskpp) free(maskpp);
5523             }
5524 0           } break;
5525 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in clusterdistances: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
5526             }
5527             #undef PDL_IF_BAD
5528 0           return PDL_err;
5529             }
5530              
5531              
5532             #line 1857 "lib/PDL/PP.pm"
5533             pdl_error pdl_clusterdistances_free(pdl_trans *__privtrans, char destroy) {
5534             pdl_error PDL_err = {0, NULL, 0};
5535             #line 5536 "Cluster.xs"
5536 0           pdl_params_clusterdistances *__params = __privtrans->params; (void)__params;
5537 0 0         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
5538             free(__params->methodFlag); /* CType.get_free */
5539 0           , ) return PDL_err;
5540             }
5541              
5542             static pdl_datatypes pdl_clusterdistances_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, -1 };
5543             static PDL_Indx pdl_clusterdistances_vtable_realdims[] = { 2, 2, 1, 1, 1, 1 };
5544             static char *pdl_clusterdistances_vtable_parnames[] = { "data","mask","weight","rowids","index2","dist" };
5545             static short pdl_clusterdistances_vtable_parflags[] = {
5546             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
5547             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
5548             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
5549             PDL_PARAM_ISTYPED,
5550             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
5551             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
5552             };
5553             static pdl_datatypes pdl_clusterdistances_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_L, PDL_L, PDL_D };
5554             static PDL_Indx pdl_clusterdistances_vtable_realdims_starts[] = { 0, 2, 4, 5, 6, 7 };
5555             static PDL_Indx pdl_clusterdistances_vtable_realdims_ind_ids[] = { 0, 1, 0, 1, 0, 3, 2, 3 };
5556             static char *pdl_clusterdistances_vtable_indnames[] = { "d","n","n2","nr" };
5557             pdl_transvtable pdl_clusterdistances_vtable = {
5558             PDL_TRANS_DO_BROADCAST, 0, pdl_clusterdistances_vtable_gentypes, 5, 6, NULL /*CORE21*/,
5559             pdl_clusterdistances_vtable_realdims, pdl_clusterdistances_vtable_parnames,
5560             pdl_clusterdistances_vtable_parflags, pdl_clusterdistances_vtable_partypes,
5561             pdl_clusterdistances_vtable_realdims_starts, pdl_clusterdistances_vtable_realdims_ind_ids, 8,
5562             4, pdl_clusterdistances_vtable_indnames,
5563             NULL, pdl_clusterdistances_readdata, NULL,
5564             pdl_clusterdistances_free,
5565             sizeof(pdl_params_clusterdistances),"PDL::Cluster::clusterdistances"
5566             };
5567              
5568              
5569 0           pdl_error pdl_run_clusterdistances(pdl *data,pdl *mask,pdl *weight,pdl *rowids,pdl *index2,pdl *dist,char *distFlag,char *methodFlag) {
5570 0           pdl_error PDL_err = {0, NULL, 0};
5571 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
5572 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_clusterdistances_vtable);
5573 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
5574 0           pdl_params_clusterdistances *__params = __privtrans->params;
5575 0           __privtrans->pdls[0] = data;
5576 0           __privtrans->pdls[1] = mask;
5577 0           __privtrans->pdls[2] = weight;
5578 0           __privtrans->pdls[3] = rowids;
5579 0           __privtrans->pdls[4] = index2;
5580 0           __privtrans->pdls[5] = dist;
5581 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
5582 0           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
5583 0           (__params->methodFlag) = malloc(strlen(methodFlag)+1); strcpy(__params->methodFlag,methodFlag); /* CType.get_copy */
5584 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
5585 0           return PDL_err;
5586             }
5587              
5588             #line 1857 "lib/PDL/PP.pm"
5589             pdl_error pdl_clustersizes_readdata(pdl_trans *__privtrans) {
5590             pdl_error PDL_err = {0, NULL, 0};
5591             #line 5592 "Cluster.xs"
5592 1           register PDL_Indx __k_size = __privtrans->ind_sizes[0];
5593 1           register PDL_Indx __n_size = __privtrans->ind_sizes[1];
5594 1 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in clustersizes:" "broadcast.incs NULL");
5595             /* broadcastloop declarations */
5596             int __brcloopval;
5597             register PDL_Indx __tind0,__tind1; /* counters along dim */
5598 1           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
5599             /* dims here are how many steps along those dims */
5600 1           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
5601 1           register PDL_Indx __tinc0_clustersizes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
5602 1           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
5603 1           register PDL_Indx __tinc1_clustersizes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
5604             #define PDL_BROADCASTLOOP_START_clustersizes_readdata PDL_BROADCASTLOOP_START( \
5605             readdata, \
5606             __privtrans->broadcast, \
5607             __privtrans->vtable, \
5608             clusterids_datap += __offsp[0]; \
5609             clustersizes_datap += __offsp[1]; \
5610             , \
5611             ( ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
5612             ,clustersizes_datap += __tinc1_clustersizes - __tinc0_clustersizes * __tdims0 \
5613             ), \
5614             ( ,clusterids_datap += __tinc0_clusterids \
5615             ,clustersizes_datap += __tinc0_clustersizes \
5616             ) \
5617             )
5618             #define PDL_BROADCASTLOOP_END_clustersizes_readdata PDL_BROADCASTLOOP_END( \
5619             __privtrans->broadcast, \
5620             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[0]; \
5621             clustersizes_datap -= __tinc1_clustersizes * __tdims1 + __offsp[1]; \
5622             )
5623 1           register PDL_Indx __inc_clusterids_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_clusterids_n;
5624 1           register PDL_Indx __inc_clustersizes_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_clustersizes_k;
5625             #ifndef PDL_DECLARE_PARAMS_clustersizes_1
5626             #define PDL_DECLARE_PARAMS_clustersizes_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids,PDL_TYPE_PARAM_clustersizes,PDL_PPSYM_PARAM_clustersizes) \
5627             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_clusterids) \
5628             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_PARAM_clustersizes, clustersizes, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_clustersizes)
5629             #endif
5630             #define PDL_IF_BAD(t,f) f
5631 1           switch (__privtrans->__datatype) { /* Start generic switch */
5632 0           case PDL_SB: {
5633 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_SByte,A,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5634             {
5635 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5636             int cid, csize;
5637 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5638 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5639 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5640 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5641 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5642             }} /* Close n */
5643 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5644 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5645             }
5646 0           } break;
5647 0           case PDL_B: {
5648 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_Byte,B,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5649             {
5650 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5651             int cid, csize;
5652 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5653 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5654 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5655 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5656 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5657             }} /* Close n */
5658 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5659 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5660             }
5661 0           } break;
5662 0           case PDL_S: {
5663 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_Short,S,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5664             {
5665 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5666             int cid, csize;
5667 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5668 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5669 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5670 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5671 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5672             }} /* Close n */
5673 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5674 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5675             }
5676 0           } break;
5677 0           case PDL_US: {
5678 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_Ushort,U,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5679             {
5680 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5681             int cid, csize;
5682 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5683 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5684 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5685 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5686 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5687             }} /* Close n */
5688 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5689 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5690             }
5691 0           } break;
5692 0           case PDL_L: {
5693 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5694             {
5695 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5696             int cid, csize;
5697 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5698 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5699 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5700 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5701 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5702             }} /* Close n */
5703 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5704 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5705             }
5706 0           } break;
5707 0           case PDL_UL: {
5708 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_ULong,K,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5709             {
5710 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5711             int cid, csize;
5712 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5713 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5714 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5715 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5716 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5717             }} /* Close n */
5718 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5719 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5720             }
5721 0           } break;
5722 0           case PDL_IND: {
5723 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_Indx,N,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5724             {
5725 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5726             int cid, csize;
5727 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5728 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5729 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5730 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5731 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5732             }} /* Close n */
5733 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5734 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5735             }
5736 0           } break;
5737 0           case PDL_ULL: {
5738 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_ULongLong,P,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5739             {
5740 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5741             int cid, csize;
5742 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5743 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5744 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5745 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5746 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5747             }} /* Close n */
5748 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5749 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5750             }
5751 0           } break;
5752 0           case PDL_LL: {
5753 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_LongLong,Q,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5754             {
5755 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5756             int cid, csize;
5757 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5758 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5759 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5760 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5761 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5762             }} /* Close n */
5763 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5764 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5765             }
5766 0           } break;
5767 0           case PDL_F: {
5768 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_Float,F,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5769             {
5770 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5771             int cid, csize;
5772 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5773 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5774 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5775 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5776 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5777             }} /* Close n */
5778 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5779 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5780             }
5781 0           } break;
5782 0           case PDL_D: {
5783 0 0         PDL_DECLARE_PARAMS_clustersizes_1(PDL_Double,D,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5784             {
5785 0 0         PDL_BROADCASTLOOP_START_clustersizes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
5786             int cid, csize;
5787 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5788 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5789 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5790 0 0         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    0          
    0          
    0          
5791 0           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5792             }} /* Close n */
5793 0 0         PDL_BROADCASTLOOP_END_clustersizes_readdata
    0          
5794 0           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5795             }
5796 0           } break;
5797 1           case PDL_LD: {
5798 1 50         PDL_DECLARE_PARAMS_clustersizes_1(PDL_LDouble,E,PDL_Long,L,PDL_Long,L)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
5799             {
5800 4 50         PDL_BROADCASTLOOP_START_clustersizes_readdata
    50          
    50          
    50          
    50          
    100          
    100          
5801             int cid, csize;
5802 3 100         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5803 5 100         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5804 4           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5805 4 50         if (cid < 0 || cid >= __privtrans->ind_sizes[0] || PDL_ISBAD2(cid,clusterids_badval,L,clusterids_badval_isnan)) continue; /*-- sanity check --*/
    50          
    50          
    50          
5806 4           (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5807             }} /* Close n */
5808 1 50         PDL_BROADCASTLOOP_END_clustersizes_readdata
    50          
5809 1           __privtrans->pdls[1]->state &= ~PDL_BADVAL; /* always make sure the output is "good" */
5810             }
5811 1           } break;
5812 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in clustersizes: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
5813             }
5814             #undef PDL_IF_BAD
5815 1           return PDL_err;
5816             }
5817              
5818             static pdl_datatypes pdl_clustersizes_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, -1 };
5819             static PDL_Indx pdl_clustersizes_vtable_realdims[] = { 1, 1 };
5820             static char *pdl_clustersizes_vtable_parnames[] = { "clusterids","clustersizes" };
5821             static short pdl_clustersizes_vtable_parflags[] = {
5822             PDL_PARAM_ISTYPED,
5823             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
5824             };
5825             static pdl_datatypes pdl_clustersizes_vtable_partypes[] = { PDL_L, PDL_L };
5826             static PDL_Indx pdl_clustersizes_vtable_realdims_starts[] = { 0, 1 };
5827             static PDL_Indx pdl_clustersizes_vtable_realdims_ind_ids[] = { 1, 0 };
5828             static char *pdl_clustersizes_vtable_indnames[] = { "k","n" };
5829             pdl_transvtable pdl_clustersizes_vtable = {
5830             PDL_TRANS_DO_BROADCAST|PDL_TRANS_BADPROCESS, 0, pdl_clustersizes_vtable_gentypes, 1, 2, NULL /*CORE21*/,
5831             pdl_clustersizes_vtable_realdims, pdl_clustersizes_vtable_parnames,
5832             pdl_clustersizes_vtable_parflags, pdl_clustersizes_vtable_partypes,
5833             pdl_clustersizes_vtable_realdims_starts, pdl_clustersizes_vtable_realdims_ind_ids, 2,
5834             2, pdl_clustersizes_vtable_indnames,
5835             NULL, pdl_clustersizes_readdata, NULL,
5836             NULL,
5837             0,"PDL::Cluster::clustersizes"
5838             };
5839              
5840              
5841 1           pdl_error pdl_run_clustersizes(pdl *clusterids,pdl *clustersizes) {
5842 1           pdl_error PDL_err = {0, NULL, 0};
5843 1 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
5844 1           pdl_trans *__privtrans = PDL->create_trans(&pdl_clustersizes_vtable);
5845 1 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
5846 1           __privtrans->pdls[0] = clusterids;
5847 1           __privtrans->pdls[1] = clustersizes;
5848 1 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
5849 1 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
5850 1           return PDL_err;
5851             }
5852              
5853             #line 1857 "lib/PDL/PP.pm"
5854             pdl_error pdl_clusterelements_readdata(pdl_trans *__privtrans) {
5855             pdl_error PDL_err = {0, NULL, 0};
5856             #line 5857 "Cluster.xs"
5857 1           register PDL_Indx __k_size = __privtrans->ind_sizes[0];
5858 1           register PDL_Indx __n_size = __privtrans->ind_sizes[2];
5859 1 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in clusterelements:" "broadcast.incs NULL");
5860             /* broadcastloop declarations */
5861             int __brcloopval;
5862             register PDL_Indx __tind0,__tind1; /* counters along dim */
5863 1           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
5864             /* dims here are how many steps along those dims */
5865 1           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
5866 1           register PDL_Indx __tinc0_clustersizes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
5867 1           register PDL_Indx __tinc0_eltids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
5868 1           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
5869 1           register PDL_Indx __tinc1_clustersizes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
5870 1           register PDL_Indx __tinc1_eltids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
5871             #define PDL_BROADCASTLOOP_START_clusterelements_readdata PDL_BROADCASTLOOP_START( \
5872             readdata, \
5873             __privtrans->broadcast, \
5874             __privtrans->vtable, \
5875             clusterids_datap += __offsp[0]; \
5876             clustersizes_datap += __offsp[1]; \
5877             eltids_datap += __offsp[2]; \
5878             , \
5879             ( ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
5880             ,clustersizes_datap += __tinc1_clustersizes - __tinc0_clustersizes * __tdims0 \
5881             ,eltids_datap += __tinc1_eltids - __tinc0_eltids * __tdims0 \
5882             ), \
5883             ( ,clusterids_datap += __tinc0_clusterids \
5884             ,clustersizes_datap += __tinc0_clustersizes \
5885             ,eltids_datap += __tinc0_eltids \
5886             ) \
5887             )
5888             #define PDL_BROADCASTLOOP_END_clusterelements_readdata PDL_BROADCASTLOOP_END( \
5889             __privtrans->broadcast, \
5890             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[0]; \
5891             clustersizes_datap -= __tinc1_clustersizes * __tdims1 + __offsp[1]; \
5892             eltids_datap -= __tinc1_eltids * __tdims1 + __offsp[2]; \
5893             )
5894 1           register PDL_Indx __inc_clusterids_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_clusterids_n;
5895 1           register PDL_Indx __inc_clustersizes_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_clustersizes_k;
5896 1           register PDL_Indx __inc_eltids_mcsize = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_eltids_mcsize;register PDL_Indx __inc_eltids_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,1)]; (void)__inc_eltids_k;
5897             #ifndef PDL_DECLARE_PARAMS_clusterelements_1
5898             #define PDL_DECLARE_PARAMS_clusterelements_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids,PDL_TYPE_PARAM_clustersizes,PDL_PPSYM_PARAM_clustersizes,PDL_TYPE_PARAM_eltids,PDL_PPSYM_PARAM_eltids) \
5899             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_clusterids) \
5900             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clustersizes, clustersizes, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_clustersizes) \
5901             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_eltids, eltids, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_eltids)
5902             #endif
5903             #define PDL_IF_BAD(t,f) f
5904 1           switch (__privtrans->__datatype) { /* Start generic switch */
5905 0           case PDL_SB: {
5906 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_SByte,A,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5907 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
5908             int cid, csize;
5909 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5910 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5911 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5912 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5913 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
5914             }} /* Close n */
5915 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
5916 0           } break;
5917 0           case PDL_B: {
5918 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_Byte,B,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5919 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
5920             int cid, csize;
5921 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5922 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5923 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5924 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5925 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
5926             }} /* Close n */
5927 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
5928 0           } break;
5929 0           case PDL_S: {
5930 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_Short,S,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5931 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
5932             int cid, csize;
5933 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5934 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5935 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5936 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5937 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
5938             }} /* Close n */
5939 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
5940 0           } break;
5941 0           case PDL_US: {
5942 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_Ushort,U,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5943 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
5944             int cid, csize;
5945 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5946 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5947 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5948 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5949 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
5950             }} /* Close n */
5951 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
5952 0           } break;
5953 0           case PDL_L: {
5954 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5955 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
5956             int cid, csize;
5957 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5958 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5959 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5960 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5961 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
5962             }} /* Close n */
5963 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
5964 0           } break;
5965 0           case PDL_UL: {
5966 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_ULong,K,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5967 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
5968             int cid, csize;
5969 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5970 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5971 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5972 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5973 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
5974             }} /* Close n */
5975 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
5976 0           } break;
5977 0           case PDL_IND: {
5978 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_Indx,N,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5979 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
5980             int cid, csize;
5981 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5982 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5983 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5984 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5985 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
5986             }} /* Close n */
5987 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
5988 0           } break;
5989 0           case PDL_ULL: {
5990 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_ULongLong,P,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
5991 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
5992             int cid, csize;
5993 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
5994 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
5995 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
5996 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
5997 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
5998             }} /* Close n */
5999 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
6000 0           } break;
6001 0           case PDL_LL: {
6002 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_LongLong,Q,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6003 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6004             int cid, csize;
6005 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
6006 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6007 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6008 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
6009 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
6010             }} /* Close n */
6011 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
6012 0           } break;
6013 0           case PDL_F: {
6014 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_Float,F,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6015 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6016             int cid, csize;
6017 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
6018 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6019 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6020 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
6021 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
6022             }} /* Close n */
6023 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
6024 0           } break;
6025 0           case PDL_D: {
6026 0 0         PDL_DECLARE_PARAMS_clusterelements_1(PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6027 0 0         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6028             int cid, csize;
6029 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
6030 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6031 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6032 0           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
6033 0           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
6034             }} /* Close n */
6035 0 0         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    0          
6036 0           } break;
6037 1           case PDL_LD: {
6038 1 50         PDL_DECLARE_PARAMS_clusterelements_1(PDL_LDouble,E,PDL_Long,L,PDL_Long,L,PDL_Long,L)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
6039 4 50         PDL_BROADCASTLOOP_START_clusterelements_readdata {
    50          
    50          
    50          
    50          
    100          
    100          
6040             int cid, csize;
6041 3 100         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (clustersizes_datap)[0+(__inc_clustersizes_k*(k))] = 0; }} /* Close k */
6042 5 100         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6043 4           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6044 4           csize = (clustersizes_datap)[0+(__inc_clustersizes_k*(cid))]++;
6045 4           (eltids_datap)[0+(__inc_eltids_mcsize*(csize))+(__inc_eltids_k*(cid))] = n;
6046             }} /* Close n */
6047 1 50         }PDL_BROADCASTLOOP_END_clusterelements_readdata
    50          
6048 1           } break;
6049 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in clusterelements: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
6050             }
6051             #undef PDL_IF_BAD
6052 1           return PDL_err;
6053             }
6054              
6055             static pdl_datatypes pdl_clusterelements_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, -1 };
6056             static PDL_Indx pdl_clusterelements_vtable_realdims[] = { 1, 1, 2 };
6057             static char *pdl_clusterelements_vtable_parnames[] = { "clusterids","clustersizes","eltids" };
6058             static short pdl_clusterelements_vtable_parflags[] = {
6059             PDL_PARAM_ISTYPED,
6060             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
6061             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
6062             };
6063             static pdl_datatypes pdl_clusterelements_vtable_partypes[] = { PDL_L, PDL_L, PDL_L };
6064             static PDL_Indx pdl_clusterelements_vtable_realdims_starts[] = { 0, 1, 2 };
6065             static PDL_Indx pdl_clusterelements_vtable_realdims_ind_ids[] = { 2, 0, 1, 0 };
6066             static char *pdl_clusterelements_vtable_indnames[] = { "k","mcsize","n" };
6067             pdl_transvtable pdl_clusterelements_vtable = {
6068             PDL_TRANS_DO_BROADCAST, 0, pdl_clusterelements_vtable_gentypes, 1, 3, NULL /*CORE21*/,
6069             pdl_clusterelements_vtable_realdims, pdl_clusterelements_vtable_parnames,
6070             pdl_clusterelements_vtable_parflags, pdl_clusterelements_vtable_partypes,
6071             pdl_clusterelements_vtable_realdims_starts, pdl_clusterelements_vtable_realdims_ind_ids, 4,
6072             3, pdl_clusterelements_vtable_indnames,
6073             NULL, pdl_clusterelements_readdata, NULL,
6074             NULL,
6075             0,"PDL::Cluster::clusterelements"
6076             };
6077              
6078              
6079 1           pdl_error pdl_run_clusterelements(pdl *clusterids,pdl *clustersizes,pdl *eltids) {
6080 1           pdl_error PDL_err = {0, NULL, 0};
6081 1 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
6082 1           pdl_trans *__privtrans = PDL->create_trans(&pdl_clusterelements_vtable);
6083 1 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
6084 1           __privtrans->pdls[0] = clusterids;
6085 1           __privtrans->pdls[1] = clustersizes;
6086 1           __privtrans->pdls[2] = eltids;
6087 1 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
6088 1 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
6089 1           return PDL_err;
6090             }
6091              
6092             #line 1857 "lib/PDL/PP.pm"
6093             pdl_error pdl_clusterelementmask_readdata(pdl_trans *__privtrans) {
6094             pdl_error PDL_err = {0, NULL, 0};
6095             #line 6096 "Cluster.xs"
6096 0           register PDL_Indx __n_size = __privtrans->ind_sizes[1];
6097 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in clusterelementmask:" "broadcast.incs NULL");
6098             /* broadcastloop declarations */
6099             int __brcloopval;
6100             register PDL_Indx __tind0,__tind1; /* counters along dim */
6101 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
6102             /* dims here are how many steps along those dims */
6103 0           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
6104 0           register PDL_Indx __tinc0_eltmask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
6105 0           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
6106 0           register PDL_Indx __tinc1_eltmask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
6107             #define PDL_BROADCASTLOOP_START_clusterelementmask_readdata PDL_BROADCASTLOOP_START( \
6108             readdata, \
6109             __privtrans->broadcast, \
6110             __privtrans->vtable, \
6111             clusterids_datap += __offsp[0]; \
6112             eltmask_datap += __offsp[1]; \
6113             , \
6114             ( ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
6115             ,eltmask_datap += __tinc1_eltmask - __tinc0_eltmask * __tdims0 \
6116             ), \
6117             ( ,clusterids_datap += __tinc0_clusterids \
6118             ,eltmask_datap += __tinc0_eltmask \
6119             ) \
6120             )
6121             #define PDL_BROADCASTLOOP_END_clusterelementmask_readdata PDL_BROADCASTLOOP_END( \
6122             __privtrans->broadcast, \
6123             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[0]; \
6124             eltmask_datap -= __tinc1_eltmask * __tdims1 + __offsp[1]; \
6125             )
6126 0           register PDL_Indx __inc_clusterids_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_clusterids_n;
6127 0           register PDL_Indx __inc_eltmask_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_eltmask_k;register PDL_Indx __inc_eltmask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_eltmask_n;
6128             #ifndef PDL_DECLARE_PARAMS_clusterelementmask_1
6129             #define PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids,PDL_TYPE_PARAM_eltmask,PDL_PPSYM_PARAM_eltmask) \
6130             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_clusterids) \
6131             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_eltmask, eltmask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_eltmask)
6132             #endif
6133             #define PDL_IF_BAD(t,f) f
6134 0           switch (__privtrans->__datatype) { /* Start generic switch */
6135 0           case PDL_SB: {
6136 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_SByte,A,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6137 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6138             int cid, csize;
6139 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6140 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6141 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6142             }} /* Close n */
6143 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6144 0           } break;
6145 0           case PDL_B: {
6146 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_Byte,B,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6147 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6148             int cid, csize;
6149 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6150 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6151 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6152             }} /* Close n */
6153 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6154 0           } break;
6155 0           case PDL_S: {
6156 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_Short,S,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6157 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6158             int cid, csize;
6159 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6160 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6161 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6162             }} /* Close n */
6163 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6164 0           } break;
6165 0           case PDL_US: {
6166 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_Ushort,U,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6167 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6168             int cid, csize;
6169 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6170 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6171 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6172             }} /* Close n */
6173 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6174 0           } break;
6175 0           case PDL_L: {
6176 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_Long,L,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6177 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6178             int cid, csize;
6179 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6180 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6181 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6182             }} /* Close n */
6183 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6184 0           } break;
6185 0           case PDL_UL: {
6186 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_ULong,K,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6187 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6188             int cid, csize;
6189 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6190 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6191 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6192             }} /* Close n */
6193 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6194 0           } break;
6195 0           case PDL_IND: {
6196 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_Indx,N,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6197 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6198             int cid, csize;
6199 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6200 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6201 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6202             }} /* Close n */
6203 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6204 0           } break;
6205 0           case PDL_ULL: {
6206 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_ULongLong,P,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6207 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6208             int cid, csize;
6209 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6210 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6211 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6212             }} /* Close n */
6213 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6214 0           } break;
6215 0           case PDL_LL: {
6216 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_LongLong,Q,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6217 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6218             int cid, csize;
6219 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6220 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6221 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6222             }} /* Close n */
6223 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6224 0           } break;
6225 0           case PDL_F: {
6226 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_Float,F,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6227 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6228             int cid, csize;
6229 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6230 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6231 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6232             }} /* Close n */
6233 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6234 0           } break;
6235 0           case PDL_D: {
6236 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_Double,D,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6237 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6238             int cid, csize;
6239 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6240 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6241 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6242             }} /* Close n */
6243 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6244 0           } break;
6245 0           case PDL_LD: {
6246 0 0         PDL_DECLARE_PARAMS_clusterelementmask_1(PDL_LDouble,E,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
6247 0 0         PDL_BROADCASTLOOP_START_clusterelementmask_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
6248             int cid, csize;
6249 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
6250 0           cid = (clusterids_datap)[0+(__inc_clusterids_n*(n))];
6251 0           (eltmask_datap)[0+(__inc_eltmask_k*(cid))+(__inc_eltmask_n*(n))] = 1;
6252             }} /* Close n */
6253 0 0         }PDL_BROADCASTLOOP_END_clusterelementmask_readdata
    0          
6254 0           } break;
6255 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in clusterelementmask: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
6256             }
6257             #undef PDL_IF_BAD
6258 0           return PDL_err;
6259             }
6260              
6261             static pdl_datatypes pdl_clusterelementmask_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, -1 };
6262             static PDL_Indx pdl_clusterelementmask_vtable_realdims[] = { 1, 2 };
6263             static char *pdl_clusterelementmask_vtable_parnames[] = { "clusterids","eltmask" };
6264             static short pdl_clusterelementmask_vtable_parflags[] = {
6265             PDL_PARAM_ISTYPED,
6266             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
6267             };
6268             static pdl_datatypes pdl_clusterelementmask_vtable_partypes[] = { PDL_L, PDL_B };
6269             static PDL_Indx pdl_clusterelementmask_vtable_realdims_starts[] = { 0, 1 };
6270             static PDL_Indx pdl_clusterelementmask_vtable_realdims_ind_ids[] = { 1, 0, 1 };
6271             static char *pdl_clusterelementmask_vtable_indnames[] = { "k","n" };
6272             pdl_transvtable pdl_clusterelementmask_vtable = {
6273             PDL_TRANS_DO_BROADCAST, 0, pdl_clusterelementmask_vtable_gentypes, 1, 2, NULL /*CORE21*/,
6274             pdl_clusterelementmask_vtable_realdims, pdl_clusterelementmask_vtable_parnames,
6275             pdl_clusterelementmask_vtable_parflags, pdl_clusterelementmask_vtable_partypes,
6276             pdl_clusterelementmask_vtable_realdims_starts, pdl_clusterelementmask_vtable_realdims_ind_ids, 3,
6277             2, pdl_clusterelementmask_vtable_indnames,
6278             NULL, pdl_clusterelementmask_readdata, NULL,
6279             NULL,
6280             0,"PDL::Cluster::clusterelementmask"
6281             };
6282              
6283              
6284 0           pdl_error pdl_run_clusterelementmask(pdl *clusterids,pdl *eltmask) {
6285 0           pdl_error PDL_err = {0, NULL, 0};
6286 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
6287 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_clusterelementmask_vtable);
6288 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
6289 0           __privtrans->pdls[0] = clusterids;
6290 0           __privtrans->pdls[1] = eltmask;
6291 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
6292 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
6293 0           return PDL_err;
6294             }
6295              
6296             #line 1846 "lib/PDL/PP.pm"
6297             typedef struct pdl_params_clusterdistancematrix {
6298             #line 6299 "Cluster.xs"
6299             char *distFlag;
6300             char *methodFlag;
6301             } pdl_params_clusterdistancematrix;
6302              
6303              
6304             #line 1857 "lib/PDL/PP.pm"
6305             pdl_error pdl_clusterdistancematrix_readdata(pdl_trans *__privtrans) {
6306             pdl_error PDL_err = {0, NULL, 0};
6307             #line 6308 "Cluster.xs"
6308 5           pdl_params_clusterdistancematrix *__params = __privtrans->params; (void)__params;
6309 5           register PDL_Indx __k_size = __privtrans->ind_sizes[1];
6310 5           register PDL_Indx __nr_size = __privtrans->ind_sizes[4];
6311 5 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in clusterdistancematrix:" "broadcast.incs NULL");
6312             /* broadcastloop declarations */
6313             int __brcloopval;
6314             register PDL_Indx __tind0,__tind1; /* counters along dim */
6315 5           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
6316             /* dims here are how many steps along those dims */
6317 5           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
6318 5           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
6319 5           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
6320 5           register PDL_Indx __tinc0_rowids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
6321 5           register PDL_Indx __tinc0_clustersizes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
6322 5           register PDL_Indx __tinc0_eltids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
6323 5           register PDL_Indx __tinc0_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,0);
6324 5           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
6325 5           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
6326 5           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
6327 5           register PDL_Indx __tinc1_rowids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
6328 5           register PDL_Indx __tinc1_clustersizes = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
6329 5           register PDL_Indx __tinc1_eltids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
6330 5           register PDL_Indx __tinc1_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,1);
6331             #define PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata PDL_BROADCASTLOOP_START( \
6332             readdata, \
6333             __privtrans->broadcast, \
6334             __privtrans->vtable, \
6335             data_datap += __offsp[0]; \
6336             mask_datap += __offsp[1]; \
6337             weight_datap += __offsp[2]; \
6338             rowids_datap += __offsp[3]; \
6339             clustersizes_datap += __offsp[4]; \
6340             eltids_datap += __offsp[5]; \
6341             dist_datap += __offsp[6]; \
6342             , \
6343             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
6344             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
6345             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
6346             ,rowids_datap += __tinc1_rowids - __tinc0_rowids * __tdims0 \
6347             ,clustersizes_datap += __tinc1_clustersizes - __tinc0_clustersizes * __tdims0 \
6348             ,eltids_datap += __tinc1_eltids - __tinc0_eltids * __tdims0 \
6349             ,dist_datap += __tinc1_dist - __tinc0_dist * __tdims0 \
6350             ), \
6351             ( ,data_datap += __tinc0_data \
6352             ,mask_datap += __tinc0_mask \
6353             ,weight_datap += __tinc0_weight \
6354             ,rowids_datap += __tinc0_rowids \
6355             ,clustersizes_datap += __tinc0_clustersizes \
6356             ,eltids_datap += __tinc0_eltids \
6357             ,dist_datap += __tinc0_dist \
6358             ) \
6359             )
6360             #define PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata PDL_BROADCASTLOOP_END( \
6361             __privtrans->broadcast, \
6362             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
6363             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
6364             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
6365             rowids_datap -= __tinc1_rowids * __tdims1 + __offsp[3]; \
6366             clustersizes_datap -= __tinc1_clustersizes * __tdims1 + __offsp[4]; \
6367             eltids_datap -= __tinc1_eltids * __tdims1 + __offsp[5]; \
6368             dist_datap -= __tinc1_dist * __tdims1 + __offsp[6]; \
6369             )
6370 5           register PDL_Indx __inc_clustersizes_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_clustersizes_k;
6371 5           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
6372 5           register PDL_Indx __inc_dist_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,6,0)]; (void)__inc_dist_k;register PDL_Indx __inc_dist_nr = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,6,1)]; (void)__inc_dist_nr;
6373 5           register PDL_Indx __inc_eltids_mcsize = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_eltids_mcsize;register PDL_Indx __inc_eltids_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,1)]; (void)__inc_eltids_k;
6374 5           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
6375 5           register PDL_Indx __inc_rowids_nr = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_rowids_nr;
6376 5           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
6377             #ifndef PDL_DECLARE_PARAMS_clusterdistancematrix_1
6378             #define PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_rowids,PDL_PPSYM_PARAM_rowids,PDL_TYPE_PARAM_clustersizes,PDL_PPSYM_PARAM_clustersizes,PDL_TYPE_PARAM_eltids,PDL_PPSYM_PARAM_eltids,PDL_TYPE_PARAM_dist,PDL_PPSYM_PARAM_dist) \
6379             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
6380             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
6381             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
6382             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_rowids, rowids, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_rowids) \
6383             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clustersizes, clustersizes, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_clustersizes) \
6384             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_eltids, eltids, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_eltids) \
6385             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_dist, dist, (__privtrans->pdls[6]), 1, PDL_PPSYM_PARAM_dist)
6386             #endif
6387             #define PDL_IF_BAD(t,f) f
6388 5           switch (__privtrans->__datatype) { /* Start generic switch */
6389 0           case PDL_SB: {
6390 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6391             {
6392 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6393 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6394 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6395 0           int transpose=0;
6396             int rowid;
6397 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6398 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6399 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6400 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6401 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6402 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6403 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6404 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6405 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6406 0           &rowid, eltidspp[k],
6407 0           *__params->distFlag, *__params->methodFlag, transpose);
6408             }} /* Close k */
6409             }} /* Close nr */
6410 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6411             /*-- cleanup --*/
6412 0 0         if (datapp) free(datapp);
6413 0 0         if (maskpp) free(maskpp);
6414 0 0         if (eltidspp) free(eltidspp);
6415             }
6416 0           } break;
6417 0           case PDL_B: {
6418 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6419             {
6420 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6421 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6422 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6423 0           int transpose=0;
6424             int rowid;
6425 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6426 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6427 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6428 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6429 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6430 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6431 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6432 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6433 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6434 0           &rowid, eltidspp[k],
6435 0           *__params->distFlag, *__params->methodFlag, transpose);
6436             }} /* Close k */
6437             }} /* Close nr */
6438 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6439             /*-- cleanup --*/
6440 0 0         if (datapp) free(datapp);
6441 0 0         if (maskpp) free(maskpp);
6442 0 0         if (eltidspp) free(eltidspp);
6443             }
6444 0           } break;
6445 0           case PDL_S: {
6446 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6447             {
6448 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6449 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6450 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6451 0           int transpose=0;
6452             int rowid;
6453 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6454 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6455 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6456 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6457 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6458 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6459 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6460 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6461 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6462 0           &rowid, eltidspp[k],
6463 0           *__params->distFlag, *__params->methodFlag, transpose);
6464             }} /* Close k */
6465             }} /* Close nr */
6466 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6467             /*-- cleanup --*/
6468 0 0         if (datapp) free(datapp);
6469 0 0         if (maskpp) free(maskpp);
6470 0 0         if (eltidspp) free(eltidspp);
6471             }
6472 0           } break;
6473 0           case PDL_US: {
6474 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6475             {
6476 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6477 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6478 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6479 0           int transpose=0;
6480             int rowid;
6481 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6482 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6483 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6484 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6485 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6486 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6487 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6488 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6489 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6490 0           &rowid, eltidspp[k],
6491 0           *__params->distFlag, *__params->methodFlag, transpose);
6492             }} /* Close k */
6493             }} /* Close nr */
6494 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6495             /*-- cleanup --*/
6496 0 0         if (datapp) free(datapp);
6497 0 0         if (maskpp) free(maskpp);
6498 0 0         if (eltidspp) free(eltidspp);
6499             }
6500 0           } break;
6501 0           case PDL_L: {
6502 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6503             {
6504 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6505 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6506 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6507 0           int transpose=0;
6508             int rowid;
6509 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6510 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6511 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6512 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6513 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6514 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6515 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6516 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6517 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6518 0           &rowid, eltidspp[k],
6519 0           *__params->distFlag, *__params->methodFlag, transpose);
6520             }} /* Close k */
6521             }} /* Close nr */
6522 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6523             /*-- cleanup --*/
6524 0 0         if (datapp) free(datapp);
6525 0 0         if (maskpp) free(maskpp);
6526 0 0         if (eltidspp) free(eltidspp);
6527             }
6528 0           } break;
6529 0           case PDL_UL: {
6530 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6531             {
6532 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6533 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6534 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6535 0           int transpose=0;
6536             int rowid;
6537 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6538 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6539 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6540 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6541 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6542 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6543 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6544 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6545 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6546 0           &rowid, eltidspp[k],
6547 0           *__params->distFlag, *__params->methodFlag, transpose);
6548             }} /* Close k */
6549             }} /* Close nr */
6550 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6551             /*-- cleanup --*/
6552 0 0         if (datapp) free(datapp);
6553 0 0         if (maskpp) free(maskpp);
6554 0 0         if (eltidspp) free(eltidspp);
6555             }
6556 0           } break;
6557 0           case PDL_IND: {
6558 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6559             {
6560 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6561 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6562 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6563 0           int transpose=0;
6564             int rowid;
6565 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6566 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6567 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6568 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6569 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6570 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6571 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6572 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6573 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6574 0           &rowid, eltidspp[k],
6575 0           *__params->distFlag, *__params->methodFlag, transpose);
6576             }} /* Close k */
6577             }} /* Close nr */
6578 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6579             /*-- cleanup --*/
6580 0 0         if (datapp) free(datapp);
6581 0 0         if (maskpp) free(maskpp);
6582 0 0         if (eltidspp) free(eltidspp);
6583             }
6584 0           } break;
6585 0           case PDL_ULL: {
6586 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6587             {
6588 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6589 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6590 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6591 0           int transpose=0;
6592             int rowid;
6593 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6594 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6595 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6596 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6597 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6598 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6599 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6600 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6601 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6602 0           &rowid, eltidspp[k],
6603 0           *__params->distFlag, *__params->methodFlag, transpose);
6604             }} /* Close k */
6605             }} /* Close nr */
6606 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6607             /*-- cleanup --*/
6608 0 0         if (datapp) free(datapp);
6609 0 0         if (maskpp) free(maskpp);
6610 0 0         if (eltidspp) free(eltidspp);
6611             }
6612 0           } break;
6613 0           case PDL_LL: {
6614 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6615             {
6616 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6617 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6618 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6619 0           int transpose=0;
6620             int rowid;
6621 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6622 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6623 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6624 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6625 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6626 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6627 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6628 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6629 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6630 0           &rowid, eltidspp[k],
6631 0           *__params->distFlag, *__params->methodFlag, transpose);
6632             }} /* Close k */
6633             }} /* Close nr */
6634 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6635             /*-- cleanup --*/
6636 0 0         if (datapp) free(datapp);
6637 0 0         if (maskpp) free(maskpp);
6638 0 0         if (eltidspp) free(eltidspp);
6639             }
6640 0           } break;
6641 0           case PDL_F: {
6642 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6643             {
6644 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6645 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6646 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6647 0           int transpose=0;
6648             int rowid;
6649 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6650 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6651 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6652 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6653 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6654 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6655 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6656 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6657 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6658 0           &rowid, eltidspp[k],
6659 0           *__params->distFlag, *__params->methodFlag, transpose);
6660             }} /* Close k */
6661             }} /* Close nr */
6662 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6663             /*-- cleanup --*/
6664 0 0         if (datapp) free(datapp);
6665 0 0         if (maskpp) free(maskpp);
6666 0 0         if (eltidspp) free(eltidspp);
6667             }
6668 0           } break;
6669 0           case PDL_D: {
6670 0 0         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6671             {
6672 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6673 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6674 0           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6675 0           int transpose=0;
6676             int rowid;
6677 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6678 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6679 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6680 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6681 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6682 0           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6683 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6684 0           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6685 0           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6686 0           &rowid, eltidspp[k],
6687 0           *__params->distFlag, *__params->methodFlag, transpose);
6688             }} /* Close k */
6689             }} /* Close nr */
6690 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    0          
6691             /*-- cleanup --*/
6692 0 0         if (datapp) free(datapp);
6693 0 0         if (maskpp) free(maskpp);
6694 0 0         if (eltidspp) free(eltidspp);
6695             }
6696 0           } break;
6697 5           case PDL_LD: {
6698 5 50         PDL_DECLARE_PARAMS_clusterdistancematrix_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
6699             {
6700 5           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6701 5           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6702 5           int **eltidspp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
6703 5           int transpose=0;
6704             int rowid;
6705 20 50         PDL_BROADCASTLOOP_START_clusterdistancematrix_readdata
    50          
    50          
    50          
    50          
    100          
    100          
6706 5           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6707 5           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6708 5           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[2], eltids_datap, eltidspp);
6709 25 100         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
6710 20           rowid = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
6711 60 100         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
6712 40           (dist_datap)[0+(__inc_dist_k*(k))+(__inc_dist_nr*(nr))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6713 40           1, (clustersizes_datap)[0+(__inc_clustersizes_k*(k))],
6714 40           &rowid, eltidspp[k],
6715 40           *__params->distFlag, *__params->methodFlag, transpose);
6716             }} /* Close k */
6717             }} /* Close nr */
6718 5 50         PDL_BROADCASTLOOP_END_clusterdistancematrix_readdata
    50          
6719             /*-- cleanup --*/
6720 5 50         if (datapp) free(datapp);
6721 5 50         if (maskpp) free(maskpp);
6722 5 50         if (eltidspp) free(eltidspp);
6723             }
6724 5           } break;
6725 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in clusterdistancematrix: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
6726             }
6727             #undef PDL_IF_BAD
6728 5           return PDL_err;
6729             }
6730              
6731              
6732             #line 1857 "lib/PDL/PP.pm"
6733             pdl_error pdl_clusterdistancematrix_free(pdl_trans *__privtrans, char destroy) {
6734             pdl_error PDL_err = {0, NULL, 0};
6735             #line 6736 "Cluster.xs"
6736 5           pdl_params_clusterdistancematrix *__params = __privtrans->params; (void)__params;
6737 5 50         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
6738             free(__params->methodFlag); /* CType.get_free */
6739 5           , ) return PDL_err;
6740             }
6741              
6742             static pdl_datatypes pdl_clusterdistancematrix_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, -1 };
6743             static PDL_Indx pdl_clusterdistancematrix_vtable_realdims[] = { 2, 2, 1, 1, 1, 2, 2 };
6744             static char *pdl_clusterdistancematrix_vtable_parnames[] = { "data","mask","weight","rowids","clustersizes","eltids","dist" };
6745             static short pdl_clusterdistancematrix_vtable_parflags[] = {
6746             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
6747             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
6748             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
6749             PDL_PARAM_ISTYPED,
6750             PDL_PARAM_ISTYPED,
6751             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
6752             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
6753             };
6754             static pdl_datatypes pdl_clusterdistancematrix_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_L, PDL_L, PDL_L, PDL_D };
6755             static PDL_Indx pdl_clusterdistancematrix_vtable_realdims_starts[] = { 0, 2, 4, 5, 6, 7, 9 };
6756             static PDL_Indx pdl_clusterdistancematrix_vtable_realdims_ind_ids[] = { 0, 3, 0, 3, 0, 4, 1, 2, 1, 1, 4 };
6757             static char *pdl_clusterdistancematrix_vtable_indnames[] = { "d","k","mcsize","n","nr" };
6758             pdl_transvtable pdl_clusterdistancematrix_vtable = {
6759             PDL_TRANS_DO_BROADCAST, 0, pdl_clusterdistancematrix_vtable_gentypes, 6, 7, NULL /*CORE21*/,
6760             pdl_clusterdistancematrix_vtable_realdims, pdl_clusterdistancematrix_vtable_parnames,
6761             pdl_clusterdistancematrix_vtable_parflags, pdl_clusterdistancematrix_vtable_partypes,
6762             pdl_clusterdistancematrix_vtable_realdims_starts, pdl_clusterdistancematrix_vtable_realdims_ind_ids, 11,
6763             5, pdl_clusterdistancematrix_vtable_indnames,
6764             NULL, pdl_clusterdistancematrix_readdata, NULL,
6765             pdl_clusterdistancematrix_free,
6766             sizeof(pdl_params_clusterdistancematrix),"PDL::Cluster::clusterdistancematrix"
6767             };
6768              
6769              
6770 5           pdl_error pdl_run_clusterdistancematrix(pdl *data,pdl *mask,pdl *weight,pdl *rowids,pdl *clustersizes,pdl *eltids,pdl *dist,char *distFlag,char *methodFlag) {
6771 5           pdl_error PDL_err = {0, NULL, 0};
6772 5 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
6773 5           pdl_trans *__privtrans = PDL->create_trans(&pdl_clusterdistancematrix_vtable);
6774 5 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
6775 5           pdl_params_clusterdistancematrix *__params = __privtrans->params;
6776 5           __privtrans->pdls[0] = data;
6777 5           __privtrans->pdls[1] = mask;
6778 5           __privtrans->pdls[2] = weight;
6779 5           __privtrans->pdls[3] = rowids;
6780 5           __privtrans->pdls[4] = clustersizes;
6781 5           __privtrans->pdls[5] = eltids;
6782 5           __privtrans->pdls[6] = dist;
6783 5 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
6784 5           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
6785 5           (__params->methodFlag) = malloc(strlen(methodFlag)+1); strcpy(__params->methodFlag,methodFlag); /* CType.get_copy */
6786 5 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
6787 5           return PDL_err;
6788             }
6789              
6790             #line 1846 "lib/PDL/PP.pm"
6791             typedef struct pdl_params_clusterdistancematrixenc {
6792             #line 6793 "Cluster.xs"
6793             char *distFlag;
6794             char *methodFlag;
6795             } pdl_params_clusterdistancematrixenc;
6796              
6797              
6798             #line 1857 "lib/PDL/PP.pm"
6799             pdl_error pdl_clusterdistancematrixenc_readdata(pdl_trans *__privtrans) {
6800             pdl_error PDL_err = {0, NULL, 0};
6801             #line 6802 "Cluster.xs"
6802 0           pdl_params_clusterdistancematrixenc *__params = __privtrans->params; (void)__params;
6803 0           register PDL_Indx __k1_size = __privtrans->ind_sizes[1];
6804 0           register PDL_Indx __k2_size = __privtrans->ind_sizes[2];
6805 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in clusterdistancematrixenc:" "broadcast.incs NULL");
6806             /* broadcastloop declarations */
6807             int __brcloopval;
6808             register PDL_Indx __tind0,__tind1; /* counters along dim */
6809 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
6810             /* dims here are how many steps along those dims */
6811 0           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
6812 0           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
6813 0           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
6814 0           register PDL_Indx __tinc0_clens1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
6815 0           register PDL_Indx __tinc0_crowids1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
6816 0           register PDL_Indx __tinc0_clens2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
6817 0           register PDL_Indx __tinc0_crowids2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,0);
6818 0           register PDL_Indx __tinc0_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,0);
6819 0           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
6820 0           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
6821 0           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
6822 0           register PDL_Indx __tinc1_clens1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
6823 0           register PDL_Indx __tinc1_crowids1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
6824 0           register PDL_Indx __tinc1_clens2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
6825 0           register PDL_Indx __tinc1_crowids2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,1);
6826 0           register PDL_Indx __tinc1_dist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,1);
6827             #define PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata PDL_BROADCASTLOOP_START( \
6828             readdata, \
6829             __privtrans->broadcast, \
6830             __privtrans->vtable, \
6831             data_datap += __offsp[0]; \
6832             mask_datap += __offsp[1]; \
6833             weight_datap += __offsp[2]; \
6834             clens1_datap += __offsp[3]; \
6835             crowids1_datap += __offsp[4]; \
6836             clens2_datap += __offsp[5]; \
6837             crowids2_datap += __offsp[6]; \
6838             dist_datap += __offsp[7]; \
6839             , \
6840             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
6841             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
6842             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
6843             ,clens1_datap += __tinc1_clens1 - __tinc0_clens1 * __tdims0 \
6844             ,crowids1_datap += __tinc1_crowids1 - __tinc0_crowids1 * __tdims0 \
6845             ,clens2_datap += __tinc1_clens2 - __tinc0_clens2 * __tdims0 \
6846             ,crowids2_datap += __tinc1_crowids2 - __tinc0_crowids2 * __tdims0 \
6847             ,dist_datap += __tinc1_dist - __tinc0_dist * __tdims0 \
6848             ), \
6849             ( ,data_datap += __tinc0_data \
6850             ,mask_datap += __tinc0_mask \
6851             ,weight_datap += __tinc0_weight \
6852             ,clens1_datap += __tinc0_clens1 \
6853             ,crowids1_datap += __tinc0_crowids1 \
6854             ,clens2_datap += __tinc0_clens2 \
6855             ,crowids2_datap += __tinc0_crowids2 \
6856             ,dist_datap += __tinc0_dist \
6857             ) \
6858             )
6859             #define PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata PDL_BROADCASTLOOP_END( \
6860             __privtrans->broadcast, \
6861             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
6862             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
6863             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
6864             clens1_datap -= __tinc1_clens1 * __tdims1 + __offsp[3]; \
6865             crowids1_datap -= __tinc1_crowids1 * __tdims1 + __offsp[4]; \
6866             clens2_datap -= __tinc1_clens2 * __tdims1 + __offsp[5]; \
6867             crowids2_datap -= __tinc1_crowids2 * __tdims1 + __offsp[6]; \
6868             dist_datap -= __tinc1_dist * __tdims1 + __offsp[7]; \
6869             )
6870 0           register PDL_Indx __inc_clens1_k1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_clens1_k1;
6871 0           register PDL_Indx __inc_clens2_k2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_clens2_k2;
6872 0           register PDL_Indx __inc_crowids1_nc1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_crowids1_nc1;
6873 0           register PDL_Indx __inc_crowids2_nc2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,6,0)]; (void)__inc_crowids2_nc2;
6874 0           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
6875 0           register PDL_Indx __inc_dist_k1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,7,0)]; (void)__inc_dist_k1;register PDL_Indx __inc_dist_k2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,7,1)]; (void)__inc_dist_k2;
6876 0           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
6877 0           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
6878             #ifndef PDL_DECLARE_PARAMS_clusterdistancematrixenc_1
6879             #define PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_clens1,PDL_PPSYM_PARAM_clens1,PDL_TYPE_PARAM_crowids1,PDL_PPSYM_PARAM_crowids1,PDL_TYPE_PARAM_clens2,PDL_PPSYM_PARAM_clens2,PDL_TYPE_PARAM_crowids2,PDL_PPSYM_PARAM_crowids2,PDL_TYPE_PARAM_dist,PDL_PPSYM_PARAM_dist) \
6880             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
6881             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
6882             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
6883             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clens1, clens1, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_clens1) \
6884             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_crowids1, crowids1, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_crowids1) \
6885             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clens2, clens2, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_clens2) \
6886             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_crowids2, crowids2, (__privtrans->pdls[6]), 1, PDL_PPSYM_PARAM_crowids2) \
6887             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_dist, dist, (__privtrans->pdls[7]), 1, PDL_PPSYM_PARAM_dist)
6888             #endif
6889             #define PDL_IF_BAD(t,f) f
6890 0           switch (__privtrans->__datatype) { /* Start generic switch */
6891 0           case PDL_SB: {
6892 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6893             {
6894 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6895 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6896 0           int transpose=0;
6897             int *crowids1p, *crowids2p;
6898 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6899 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6900 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6901 0           crowids1p = crowids1_datap;
6902 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
6903 0           crowids2p = crowids2_datap;
6904 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
6905 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6906 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
6907             crowids1p, crowids2p,
6908 0           *__params->distFlag, *__params->methodFlag, transpose);
6909 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
6910             }} /* Close k2 */
6911 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
6912             }} /* Close k1 */
6913 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
6914             /*-- cleanup --*/
6915 0 0         if (datapp) free(datapp);
6916 0 0         if (maskpp) free(maskpp);
6917             }
6918 0           } break;
6919 0           case PDL_B: {
6920 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6921             {
6922 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6923 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6924 0           int transpose=0;
6925             int *crowids1p, *crowids2p;
6926 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6927 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6928 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6929 0           crowids1p = crowids1_datap;
6930 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
6931 0           crowids2p = crowids2_datap;
6932 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
6933 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6934 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
6935             crowids1p, crowids2p,
6936 0           *__params->distFlag, *__params->methodFlag, transpose);
6937 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
6938             }} /* Close k2 */
6939 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
6940             }} /* Close k1 */
6941 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
6942             /*-- cleanup --*/
6943 0 0         if (datapp) free(datapp);
6944 0 0         if (maskpp) free(maskpp);
6945             }
6946 0           } break;
6947 0           case PDL_S: {
6948 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6949             {
6950 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6951 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6952 0           int transpose=0;
6953             int *crowids1p, *crowids2p;
6954 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6955 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6956 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6957 0           crowids1p = crowids1_datap;
6958 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
6959 0           crowids2p = crowids2_datap;
6960 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
6961 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6962 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
6963             crowids1p, crowids2p,
6964 0           *__params->distFlag, *__params->methodFlag, transpose);
6965 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
6966             }} /* Close k2 */
6967 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
6968             }} /* Close k1 */
6969 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
6970             /*-- cleanup --*/
6971 0 0         if (datapp) free(datapp);
6972 0 0         if (maskpp) free(maskpp);
6973             }
6974 0           } break;
6975 0           case PDL_US: {
6976 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
6977             {
6978 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
6979 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
6980 0           int transpose=0;
6981             int *crowids1p, *crowids2p;
6982 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
6983 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
6984 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
6985 0           crowids1p = crowids1_datap;
6986 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
6987 0           crowids2p = crowids2_datap;
6988 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
6989 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
6990 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
6991             crowids1p, crowids2p,
6992 0           *__params->distFlag, *__params->methodFlag, transpose);
6993 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
6994             }} /* Close k2 */
6995 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
6996             }} /* Close k1 */
6997 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
6998             /*-- cleanup --*/
6999 0 0         if (datapp) free(datapp);
7000 0 0         if (maskpp) free(maskpp);
7001             }
7002 0           } break;
7003 0           case PDL_L: {
7004 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7005             {
7006 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7007 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7008 0           int transpose=0;
7009             int *crowids1p, *crowids2p;
7010 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7011 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7012 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7013 0           crowids1p = crowids1_datap;
7014 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
7015 0           crowids2p = crowids2_datap;
7016 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
7017 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7018 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
7019             crowids1p, crowids2p,
7020 0           *__params->distFlag, *__params->methodFlag, transpose);
7021 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
7022             }} /* Close k2 */
7023 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
7024             }} /* Close k1 */
7025 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
7026             /*-- cleanup --*/
7027 0 0         if (datapp) free(datapp);
7028 0 0         if (maskpp) free(maskpp);
7029             }
7030 0           } break;
7031 0           case PDL_UL: {
7032 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7033             {
7034 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7035 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7036 0           int transpose=0;
7037             int *crowids1p, *crowids2p;
7038 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7039 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7040 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7041 0           crowids1p = crowids1_datap;
7042 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
7043 0           crowids2p = crowids2_datap;
7044 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
7045 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7046 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
7047             crowids1p, crowids2p,
7048 0           *__params->distFlag, *__params->methodFlag, transpose);
7049 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
7050             }} /* Close k2 */
7051 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
7052             }} /* Close k1 */
7053 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
7054             /*-- cleanup --*/
7055 0 0         if (datapp) free(datapp);
7056 0 0         if (maskpp) free(maskpp);
7057             }
7058 0           } break;
7059 0           case PDL_IND: {
7060 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7061             {
7062 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7063 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7064 0           int transpose=0;
7065             int *crowids1p, *crowids2p;
7066 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7067 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7068 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7069 0           crowids1p = crowids1_datap;
7070 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
7071 0           crowids2p = crowids2_datap;
7072 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
7073 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7074 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
7075             crowids1p, crowids2p,
7076 0           *__params->distFlag, *__params->methodFlag, transpose);
7077 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
7078             }} /* Close k2 */
7079 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
7080             }} /* Close k1 */
7081 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
7082             /*-- cleanup --*/
7083 0 0         if (datapp) free(datapp);
7084 0 0         if (maskpp) free(maskpp);
7085             }
7086 0           } break;
7087 0           case PDL_ULL: {
7088 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7089             {
7090 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7091 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7092 0           int transpose=0;
7093             int *crowids1p, *crowids2p;
7094 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7095 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7096 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7097 0           crowids1p = crowids1_datap;
7098 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
7099 0           crowids2p = crowids2_datap;
7100 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
7101 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7102 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
7103             crowids1p, crowids2p,
7104 0           *__params->distFlag, *__params->methodFlag, transpose);
7105 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
7106             }} /* Close k2 */
7107 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
7108             }} /* Close k1 */
7109 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
7110             /*-- cleanup --*/
7111 0 0         if (datapp) free(datapp);
7112 0 0         if (maskpp) free(maskpp);
7113             }
7114 0           } break;
7115 0           case PDL_LL: {
7116 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7117             {
7118 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7119 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7120 0           int transpose=0;
7121             int *crowids1p, *crowids2p;
7122 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7123 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7124 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7125 0           crowids1p = crowids1_datap;
7126 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
7127 0           crowids2p = crowids2_datap;
7128 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
7129 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7130 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
7131             crowids1p, crowids2p,
7132 0           *__params->distFlag, *__params->methodFlag, transpose);
7133 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
7134             }} /* Close k2 */
7135 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
7136             }} /* Close k1 */
7137 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
7138             /*-- cleanup --*/
7139 0 0         if (datapp) free(datapp);
7140 0 0         if (maskpp) free(maskpp);
7141             }
7142 0           } break;
7143 0           case PDL_F: {
7144 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7145             {
7146 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7147 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7148 0           int transpose=0;
7149             int *crowids1p, *crowids2p;
7150 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7151 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7152 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7153 0           crowids1p = crowids1_datap;
7154 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
7155 0           crowids2p = crowids2_datap;
7156 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
7157 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7158 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
7159             crowids1p, crowids2p,
7160 0           *__params->distFlag, *__params->methodFlag, transpose);
7161 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
7162             }} /* Close k2 */
7163 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
7164             }} /* Close k1 */
7165 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
7166             /*-- cleanup --*/
7167 0 0         if (datapp) free(datapp);
7168 0 0         if (maskpp) free(maskpp);
7169             }
7170 0           } break;
7171 0           case PDL_D: {
7172 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7173             {
7174 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7175 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7176 0           int transpose=0;
7177             int *crowids1p, *crowids2p;
7178 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7179 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7180 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7181 0           crowids1p = crowids1_datap;
7182 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
7183 0           crowids2p = crowids2_datap;
7184 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
7185 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7186 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
7187             crowids1p, crowids2p,
7188 0           *__params->distFlag, *__params->methodFlag, transpose);
7189 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
7190             }} /* Close k2 */
7191 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
7192             }} /* Close k1 */
7193 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
7194             /*-- cleanup --*/
7195 0 0         if (datapp) free(datapp);
7196 0 0         if (maskpp) free(maskpp);
7197             }
7198 0           } break;
7199 0           case PDL_LD: {
7200 0 0         PDL_DECLARE_PARAMS_clusterdistancematrixenc_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7201             {
7202 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7203 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7204 0           int transpose=0;
7205             int *crowids1p, *crowids2p;
7206 0 0         PDL_BROADCASTLOOP_START_clusterdistancematrixenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7207 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7208 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7209 0           crowids1p = crowids1_datap;
7210 0 0         {/* Open k1 */ PDL_EXPAND2(register PDL_Indx k1=0, __k1_stop=(__k1_size)); for(; k1<__k1_stop; k1+=1) {
7211 0           crowids2p = crowids2_datap;
7212 0 0         {/* Open k2 */ PDL_EXPAND2(register PDL_Indx k2=0, __k2_stop=(__k2_size)); for(; k2<__k2_stop; k2+=1) {
7213 0           (dist_datap)[0+(__inc_dist_k1*(k1))+(__inc_dist_k2*(k2))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7214 0           (clens1_datap)[0+(__inc_clens1_k1*(k1))], (clens2_datap)[0+(__inc_clens2_k2*(k2))],
7215             crowids1p, crowids2p,
7216 0           *__params->distFlag, *__params->methodFlag, transpose);
7217 0           crowids2p += (clens2_datap)[0+(__inc_clens2_k2*(k2))];
7218             }} /* Close k2 */
7219 0           crowids1p += (clens1_datap)[0+(__inc_clens1_k1*(k1))];
7220             }} /* Close k1 */
7221 0 0         PDL_BROADCASTLOOP_END_clusterdistancematrixenc_readdata
    0          
7222             /*-- cleanup --*/
7223 0 0         if (datapp) free(datapp);
7224 0 0         if (maskpp) free(maskpp);
7225             }
7226 0           } break;
7227 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in clusterdistancematrixenc: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
7228             }
7229             #undef PDL_IF_BAD
7230 0           return PDL_err;
7231             }
7232              
7233              
7234             #line 1857 "lib/PDL/PP.pm"
7235             pdl_error pdl_clusterdistancematrixenc_free(pdl_trans *__privtrans, char destroy) {
7236             pdl_error PDL_err = {0, NULL, 0};
7237             #line 7238 "Cluster.xs"
7238 0           pdl_params_clusterdistancematrixenc *__params = __privtrans->params; (void)__params;
7239 0 0         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
7240             free(__params->methodFlag); /* CType.get_free */
7241 0           , ) return PDL_err;
7242             }
7243              
7244             static pdl_datatypes pdl_clusterdistancematrixenc_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, -1 };
7245             static PDL_Indx pdl_clusterdistancematrixenc_vtable_realdims[] = { 2, 2, 1, 1, 1, 1, 1, 2 };
7246             static char *pdl_clusterdistancematrixenc_vtable_parnames[] = { "data","mask","weight","clens1","crowids1","clens2","crowids2","dist" };
7247             static short pdl_clusterdistancematrixenc_vtable_parflags[] = {
7248             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7249             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7250             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7251             PDL_PARAM_ISTYPED,
7252             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7253             PDL_PARAM_ISTYPED,
7254             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7255             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
7256             };
7257             static pdl_datatypes pdl_clusterdistancematrixenc_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_L, PDL_L, PDL_L, PDL_L, PDL_D };
7258             static PDL_Indx pdl_clusterdistancematrixenc_vtable_realdims_starts[] = { 0, 2, 4, 5, 6, 7, 8, 9 };
7259             static PDL_Indx pdl_clusterdistancematrixenc_vtable_realdims_ind_ids[] = { 0, 3, 0, 3, 0, 1, 4, 2, 5, 1, 2 };
7260             static char *pdl_clusterdistancematrixenc_vtable_indnames[] = { "d","k1","k2","n","nc1","nc2" };
7261             pdl_transvtable pdl_clusterdistancematrixenc_vtable = {
7262             PDL_TRANS_DO_BROADCAST, 0, pdl_clusterdistancematrixenc_vtable_gentypes, 7, 8, NULL /*CORE21*/,
7263             pdl_clusterdistancematrixenc_vtable_realdims, pdl_clusterdistancematrixenc_vtable_parnames,
7264             pdl_clusterdistancematrixenc_vtable_parflags, pdl_clusterdistancematrixenc_vtable_partypes,
7265             pdl_clusterdistancematrixenc_vtable_realdims_starts, pdl_clusterdistancematrixenc_vtable_realdims_ind_ids, 11,
7266             6, pdl_clusterdistancematrixenc_vtable_indnames,
7267             NULL, pdl_clusterdistancematrixenc_readdata, NULL,
7268             pdl_clusterdistancematrixenc_free,
7269             sizeof(pdl_params_clusterdistancematrixenc),"PDL::Cluster::clusterdistancematrixenc"
7270             };
7271              
7272              
7273 0           pdl_error pdl_run_clusterdistancematrixenc(pdl *data,pdl *mask,pdl *weight,pdl *clens1,pdl *crowids1,pdl *clens2,pdl *crowids2,pdl *dist,char *distFlag,char *methodFlag) {
7274 0           pdl_error PDL_err = {0, NULL, 0};
7275 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
7276 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_clusterdistancematrixenc_vtable);
7277 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
7278 0           pdl_params_clusterdistancematrixenc *__params = __privtrans->params;
7279 0           __privtrans->pdls[0] = data;
7280 0           __privtrans->pdls[1] = mask;
7281 0           __privtrans->pdls[2] = weight;
7282 0           __privtrans->pdls[3] = clens1;
7283 0           __privtrans->pdls[4] = crowids1;
7284 0           __privtrans->pdls[5] = clens2;
7285 0           __privtrans->pdls[6] = crowids2;
7286 0           __privtrans->pdls[7] = dist;
7287 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
7288 0           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
7289 0           (__params->methodFlag) = malloc(strlen(methodFlag)+1); strcpy(__params->methodFlag,methodFlag); /* CType.get_copy */
7290 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
7291 0           return PDL_err;
7292             }
7293              
7294             #line 1846 "lib/PDL/PP.pm"
7295             typedef struct pdl_params_clusterdistancesenc {
7296             #line 7297 "Cluster.xs"
7297             char *distFlag;
7298             char *methodFlag;
7299             } pdl_params_clusterdistancesenc;
7300              
7301              
7302             #line 1857 "lib/PDL/PP.pm"
7303             pdl_error pdl_clusterdistancesenc_readdata(pdl_trans *__privtrans) {
7304             pdl_error PDL_err = {0, NULL, 0};
7305             #line 7306 "Cluster.xs"
7306 0           pdl_params_clusterdistancesenc *__params = __privtrans->params; (void)__params;
7307 0           register PDL_Indx __ncmps_size = __privtrans->ind_sizes[6];
7308 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in clusterdistancesenc:" "broadcast.incs NULL");
7309             /* broadcastloop declarations */
7310             int __brcloopval;
7311             register PDL_Indx __tind0,__tind1; /* counters along dim */
7312 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
7313             /* dims here are how many steps along those dims */
7314 0           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
7315 0           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
7316 0           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
7317 0           register PDL_Indx __tinc0_coffsets1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
7318 0           register PDL_Indx __tinc0_crowids1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
7319 0           register PDL_Indx __tinc0_cwhich1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
7320 0           register PDL_Indx __tinc0_coffsets2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,0);
7321 0           register PDL_Indx __tinc0_crowids2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,0);
7322 0           register PDL_Indx __tinc0_cwhich2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,8,0);
7323 0           register PDL_Indx __tinc0_dists = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,9,0);
7324 0           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
7325 0           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
7326 0           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
7327 0           register PDL_Indx __tinc1_coffsets1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
7328 0           register PDL_Indx __tinc1_crowids1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
7329 0           register PDL_Indx __tinc1_cwhich1 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
7330 0           register PDL_Indx __tinc1_coffsets2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,1);
7331 0           register PDL_Indx __tinc1_crowids2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,1);
7332 0           register PDL_Indx __tinc1_cwhich2 = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,8,1);
7333 0           register PDL_Indx __tinc1_dists = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,9,1);
7334             #define PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata PDL_BROADCASTLOOP_START( \
7335             readdata, \
7336             __privtrans->broadcast, \
7337             __privtrans->vtable, \
7338             data_datap += __offsp[0]; \
7339             mask_datap += __offsp[1]; \
7340             weight_datap += __offsp[2]; \
7341             coffsets1_datap += __offsp[3]; \
7342             crowids1_datap += __offsp[4]; \
7343             cwhich1_datap += __offsp[5]; \
7344             coffsets2_datap += __offsp[6]; \
7345             crowids2_datap += __offsp[7]; \
7346             cwhich2_datap += __offsp[8]; \
7347             dists_datap += __offsp[9]; \
7348             , \
7349             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
7350             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
7351             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
7352             ,coffsets1_datap += __tinc1_coffsets1 - __tinc0_coffsets1 * __tdims0 \
7353             ,crowids1_datap += __tinc1_crowids1 - __tinc0_crowids1 * __tdims0 \
7354             ,cwhich1_datap += __tinc1_cwhich1 - __tinc0_cwhich1 * __tdims0 \
7355             ,coffsets2_datap += __tinc1_coffsets2 - __tinc0_coffsets2 * __tdims0 \
7356             ,crowids2_datap += __tinc1_crowids2 - __tinc0_crowids2 * __tdims0 \
7357             ,cwhich2_datap += __tinc1_cwhich2 - __tinc0_cwhich2 * __tdims0 \
7358             ,dists_datap += __tinc1_dists - __tinc0_dists * __tdims0 \
7359             ), \
7360             ( ,data_datap += __tinc0_data \
7361             ,mask_datap += __tinc0_mask \
7362             ,weight_datap += __tinc0_weight \
7363             ,coffsets1_datap += __tinc0_coffsets1 \
7364             ,crowids1_datap += __tinc0_crowids1 \
7365             ,cwhich1_datap += __tinc0_cwhich1 \
7366             ,coffsets2_datap += __tinc0_coffsets2 \
7367             ,crowids2_datap += __tinc0_crowids2 \
7368             ,cwhich2_datap += __tinc0_cwhich2 \
7369             ,dists_datap += __tinc0_dists \
7370             ) \
7371             )
7372             #define PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata PDL_BROADCASTLOOP_END( \
7373             __privtrans->broadcast, \
7374             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
7375             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
7376             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
7377             coffsets1_datap -= __tinc1_coffsets1 * __tdims1 + __offsp[3]; \
7378             crowids1_datap -= __tinc1_crowids1 * __tdims1 + __offsp[4]; \
7379             cwhich1_datap -= __tinc1_cwhich1 * __tdims1 + __offsp[5]; \
7380             coffsets2_datap -= __tinc1_coffsets2 * __tdims1 + __offsp[6]; \
7381             crowids2_datap -= __tinc1_crowids2 * __tdims1 + __offsp[7]; \
7382             cwhich2_datap -= __tinc1_cwhich2 * __tdims1 + __offsp[8]; \
7383             dists_datap -= __tinc1_dists * __tdims1 + __offsp[9]; \
7384             )
7385 0           register PDL_Indx __inc_coffsets1_k1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_coffsets1_k1;
7386 0           register PDL_Indx __inc_coffsets2_k2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,6,0)]; (void)__inc_coffsets2_k2;
7387 0           register PDL_Indx __inc_crowids1_nc1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_crowids1_nc1;
7388 0           register PDL_Indx __inc_crowids2_nc2 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,7,0)]; (void)__inc_crowids2_nc2;
7389 0           register PDL_Indx __inc_cwhich1_ncmps = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_cwhich1_ncmps;
7390 0           register PDL_Indx __inc_cwhich2_ncmps = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,8,0)]; (void)__inc_cwhich2_ncmps;
7391 0           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
7392 0           register PDL_Indx __inc_dists_ncmps = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,9,0)]; (void)__inc_dists_ncmps;
7393 0           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
7394 0           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
7395             #ifndef PDL_DECLARE_PARAMS_clusterdistancesenc_1
7396             #define PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_coffsets1,PDL_PPSYM_PARAM_coffsets1,PDL_TYPE_PARAM_crowids1,PDL_PPSYM_PARAM_crowids1,PDL_TYPE_PARAM_cwhich1,PDL_PPSYM_PARAM_cwhich1,PDL_TYPE_PARAM_coffsets2,PDL_PPSYM_PARAM_coffsets2,PDL_TYPE_PARAM_crowids2,PDL_PPSYM_PARAM_crowids2,PDL_TYPE_PARAM_cwhich2,PDL_PPSYM_PARAM_cwhich2,PDL_TYPE_PARAM_dists,PDL_PPSYM_PARAM_dists) \
7397             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
7398             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
7399             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
7400             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_coffsets1, coffsets1, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_coffsets1) \
7401             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_crowids1, crowids1, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_crowids1) \
7402             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cwhich1, cwhich1, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_cwhich1) \
7403             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_coffsets2, coffsets2, (__privtrans->pdls[6]), 1, PDL_PPSYM_PARAM_coffsets2) \
7404             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_crowids2, crowids2, (__privtrans->pdls[7]), 1, PDL_PPSYM_PARAM_crowids2) \
7405             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cwhich2, cwhich2, (__privtrans->pdls[8]), 1, PDL_PPSYM_PARAM_cwhich2) \
7406             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_dists, dists, (__privtrans->pdls[9]), 1, PDL_PPSYM_PARAM_dists)
7407             #endif
7408             #define PDL_IF_BAD(t,f) f
7409 0           switch (__privtrans->__datatype) { /* Start generic switch */
7410 0           case PDL_SB: {
7411 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7412             {
7413 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7414 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7415 0           int transpose=0;
7416 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7417 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7418 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7419 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7420 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7421 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7422 0           int succ_c1=c1+1;
7423 0           int succ_c2=c2+1;
7424 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7425 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7426 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7427 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7428 0           int *crowids1p = crowids1_datap + beg1;
7429 0           int *crowids2p = crowids2_datap + beg2;
7430              
7431 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7432             len1, len2,
7433             crowids1p, crowids2p,
7434 0           *__params->distFlag, *__params->methodFlag, transpose);
7435             }} /* Close ncmps */
7436 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7437             /*-- cleanup --*/
7438 0 0         if (datapp) free(datapp);
7439 0 0         if (maskpp) free(maskpp);
7440             }
7441 0           } break;
7442 0           case PDL_B: {
7443 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7444             {
7445 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7446 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7447 0           int transpose=0;
7448 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7449 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7450 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7451 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7452 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7453 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7454 0           int succ_c1=c1+1;
7455 0           int succ_c2=c2+1;
7456 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7457 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7458 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7459 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7460 0           int *crowids1p = crowids1_datap + beg1;
7461 0           int *crowids2p = crowids2_datap + beg2;
7462              
7463 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7464             len1, len2,
7465             crowids1p, crowids2p,
7466 0           *__params->distFlag, *__params->methodFlag, transpose);
7467             }} /* Close ncmps */
7468 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7469             /*-- cleanup --*/
7470 0 0         if (datapp) free(datapp);
7471 0 0         if (maskpp) free(maskpp);
7472             }
7473 0           } break;
7474 0           case PDL_S: {
7475 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7476             {
7477 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7478 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7479 0           int transpose=0;
7480 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7481 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7482 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7483 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7484 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7485 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7486 0           int succ_c1=c1+1;
7487 0           int succ_c2=c2+1;
7488 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7489 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7490 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7491 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7492 0           int *crowids1p = crowids1_datap + beg1;
7493 0           int *crowids2p = crowids2_datap + beg2;
7494              
7495 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7496             len1, len2,
7497             crowids1p, crowids2p,
7498 0           *__params->distFlag, *__params->methodFlag, transpose);
7499             }} /* Close ncmps */
7500 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7501             /*-- cleanup --*/
7502 0 0         if (datapp) free(datapp);
7503 0 0         if (maskpp) free(maskpp);
7504             }
7505 0           } break;
7506 0           case PDL_US: {
7507 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7508             {
7509 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7510 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7511 0           int transpose=0;
7512 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7513 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7514 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7515 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7516 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7517 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7518 0           int succ_c1=c1+1;
7519 0           int succ_c2=c2+1;
7520 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7521 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7522 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7523 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7524 0           int *crowids1p = crowids1_datap + beg1;
7525 0           int *crowids2p = crowids2_datap + beg2;
7526              
7527 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7528             len1, len2,
7529             crowids1p, crowids2p,
7530 0           *__params->distFlag, *__params->methodFlag, transpose);
7531             }} /* Close ncmps */
7532 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7533             /*-- cleanup --*/
7534 0 0         if (datapp) free(datapp);
7535 0 0         if (maskpp) free(maskpp);
7536             }
7537 0           } break;
7538 0           case PDL_L: {
7539 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7540             {
7541 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7542 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7543 0           int transpose=0;
7544 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7545 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7546 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7547 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7548 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7549 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7550 0           int succ_c1=c1+1;
7551 0           int succ_c2=c2+1;
7552 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7553 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7554 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7555 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7556 0           int *crowids1p = crowids1_datap + beg1;
7557 0           int *crowids2p = crowids2_datap + beg2;
7558              
7559 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7560             len1, len2,
7561             crowids1p, crowids2p,
7562 0           *__params->distFlag, *__params->methodFlag, transpose);
7563             }} /* Close ncmps */
7564 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7565             /*-- cleanup --*/
7566 0 0         if (datapp) free(datapp);
7567 0 0         if (maskpp) free(maskpp);
7568             }
7569 0           } break;
7570 0           case PDL_UL: {
7571 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7572             {
7573 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7574 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7575 0           int transpose=0;
7576 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7577 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7578 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7579 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7580 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7581 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7582 0           int succ_c1=c1+1;
7583 0           int succ_c2=c2+1;
7584 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7585 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7586 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7587 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7588 0           int *crowids1p = crowids1_datap + beg1;
7589 0           int *crowids2p = crowids2_datap + beg2;
7590              
7591 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7592             len1, len2,
7593             crowids1p, crowids2p,
7594 0           *__params->distFlag, *__params->methodFlag, transpose);
7595             }} /* Close ncmps */
7596 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7597             /*-- cleanup --*/
7598 0 0         if (datapp) free(datapp);
7599 0 0         if (maskpp) free(maskpp);
7600             }
7601 0           } break;
7602 0           case PDL_IND: {
7603 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7604             {
7605 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7606 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7607 0           int transpose=0;
7608 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7609 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7610 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7611 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7612 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7613 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7614 0           int succ_c1=c1+1;
7615 0           int succ_c2=c2+1;
7616 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7617 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7618 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7619 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7620 0           int *crowids1p = crowids1_datap + beg1;
7621 0           int *crowids2p = crowids2_datap + beg2;
7622              
7623 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7624             len1, len2,
7625             crowids1p, crowids2p,
7626 0           *__params->distFlag, *__params->methodFlag, transpose);
7627             }} /* Close ncmps */
7628 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7629             /*-- cleanup --*/
7630 0 0         if (datapp) free(datapp);
7631 0 0         if (maskpp) free(maskpp);
7632             }
7633 0           } break;
7634 0           case PDL_ULL: {
7635 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7636             {
7637 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7638 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7639 0           int transpose=0;
7640 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7641 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7642 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7643 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7644 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7645 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7646 0           int succ_c1=c1+1;
7647 0           int succ_c2=c2+1;
7648 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7649 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7650 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7651 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7652 0           int *crowids1p = crowids1_datap + beg1;
7653 0           int *crowids2p = crowids2_datap + beg2;
7654              
7655 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7656             len1, len2,
7657             crowids1p, crowids2p,
7658 0           *__params->distFlag, *__params->methodFlag, transpose);
7659             }} /* Close ncmps */
7660 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7661             /*-- cleanup --*/
7662 0 0         if (datapp) free(datapp);
7663 0 0         if (maskpp) free(maskpp);
7664             }
7665 0           } break;
7666 0           case PDL_LL: {
7667 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7668             {
7669 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7670 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7671 0           int transpose=0;
7672 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7673 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7674 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7675 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7676 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7677 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7678 0           int succ_c1=c1+1;
7679 0           int succ_c2=c2+1;
7680 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7681 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7682 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7683 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7684 0           int *crowids1p = crowids1_datap + beg1;
7685 0           int *crowids2p = crowids2_datap + beg2;
7686              
7687 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7688             len1, len2,
7689             crowids1p, crowids2p,
7690 0           *__params->distFlag, *__params->methodFlag, transpose);
7691             }} /* Close ncmps */
7692 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7693             /*-- cleanup --*/
7694 0 0         if (datapp) free(datapp);
7695 0 0         if (maskpp) free(maskpp);
7696             }
7697 0           } break;
7698 0           case PDL_F: {
7699 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7700             {
7701 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7702 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7703 0           int transpose=0;
7704 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7705 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7706 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7707 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7708 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7709 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7710 0           int succ_c1=c1+1;
7711 0           int succ_c2=c2+1;
7712 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7713 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7714 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7715 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7716 0           int *crowids1p = crowids1_datap + beg1;
7717 0           int *crowids2p = crowids2_datap + beg2;
7718              
7719 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7720             len1, len2,
7721             crowids1p, crowids2p,
7722 0           *__params->distFlag, *__params->methodFlag, transpose);
7723             }} /* Close ncmps */
7724 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7725             /*-- cleanup --*/
7726 0 0         if (datapp) free(datapp);
7727 0 0         if (maskpp) free(maskpp);
7728             }
7729 0           } break;
7730 0           case PDL_D: {
7731 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7732             {
7733 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7734 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7735 0           int transpose=0;
7736 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7737 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7738 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7739 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7740 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7741 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7742 0           int succ_c1=c1+1;
7743 0           int succ_c2=c2+1;
7744 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7745 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7746 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7747 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7748 0           int *crowids1p = crowids1_datap + beg1;
7749 0           int *crowids2p = crowids2_datap + beg2;
7750              
7751 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7752             len1, len2,
7753             crowids1p, crowids2p,
7754 0           *__params->distFlag, *__params->methodFlag, transpose);
7755             }} /* Close ncmps */
7756 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7757             /*-- cleanup --*/
7758 0 0         if (datapp) free(datapp);
7759 0 0         if (maskpp) free(maskpp);
7760             }
7761 0           } break;
7762 0           case PDL_LD: {
7763 0 0         PDL_DECLARE_PARAMS_clusterdistancesenc_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    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          
    0          
    0          
    0          
    0          
7764             {
7765 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[3]);
7766 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[3]);
7767 0           int transpose=0;
7768 0 0         PDL_BROADCASTLOOP_START_clusterdistancesenc_readdata
    0          
    0          
    0          
    0          
    0          
    0          
7769 0           p2pp_dbl(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], data_datap, datapp);
7770 0           p2pp_int(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], mask_datap, maskpp);
7771 0 0         {/* Open ncmps */ PDL_EXPAND2(register PDL_Indx ncmps=0, __ncmps_stop=(__ncmps_size)); for(; ncmps<__ncmps_stop; ncmps+=1) {
7772 0           int c1 = (cwhich1_datap)[0+(__inc_cwhich1_ncmps*(ncmps))];
7773 0           int c2 = (cwhich2_datap)[0+(__inc_cwhich2_ncmps*(ncmps))];
7774 0           int succ_c1=c1+1;
7775 0           int succ_c2=c2+1;
7776 0           int beg1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(c1))];
7777 0           int beg2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(c2))];
7778 0           int len1 = (coffsets1_datap)[0+(__inc_coffsets1_k1*(succ_c1))] - beg1;
7779 0           int len2 = (coffsets2_datap)[0+(__inc_coffsets2_k2*(succ_c2))] - beg2;
7780 0           int *crowids1p = crowids1_datap + beg1;
7781 0           int *crowids2p = crowids2_datap + beg2;
7782              
7783 0           (dists_datap)[0+(__inc_dists_ncmps*(ncmps))] = clusterdistance(__privtrans->ind_sizes[3], __privtrans->ind_sizes[0], datapp, maskpp, weight_datap,
7784             len1, len2,
7785             crowids1p, crowids2p,
7786 0           *__params->distFlag, *__params->methodFlag, transpose);
7787             }} /* Close ncmps */
7788 0 0         PDL_BROADCASTLOOP_END_clusterdistancesenc_readdata
    0          
7789             /*-- cleanup --*/
7790 0 0         if (datapp) free(datapp);
7791 0 0         if (maskpp) free(maskpp);
7792             }
7793 0           } break;
7794 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in clusterdistancesenc: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
7795             }
7796             #undef PDL_IF_BAD
7797 0           return PDL_err;
7798             }
7799              
7800              
7801             #line 1857 "lib/PDL/PP.pm"
7802             pdl_error pdl_clusterdistancesenc_free(pdl_trans *__privtrans, char destroy) {
7803             pdl_error PDL_err = {0, NULL, 0};
7804             #line 7805 "Cluster.xs"
7805 0           pdl_params_clusterdistancesenc *__params = __privtrans->params; (void)__params;
7806 0 0         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
7807             free(__params->methodFlag); /* CType.get_free */
7808 0           , ) return PDL_err;
7809             }
7810              
7811             static pdl_datatypes pdl_clusterdistancesenc_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, -1 };
7812             static PDL_Indx pdl_clusterdistancesenc_vtable_realdims[] = { 2, 2, 1, 1, 1, 1, 1, 1, 1, 1 };
7813             static char *pdl_clusterdistancesenc_vtable_parnames[] = { "data","mask","weight","coffsets1","crowids1","cwhich1","coffsets2","crowids2","cwhich2","dists" };
7814             static short pdl_clusterdistancesenc_vtable_parflags[] = {
7815             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7816             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7817             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7818             PDL_PARAM_ISTYPED,
7819             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7820             PDL_PARAM_ISTYPED,
7821             PDL_PARAM_ISTYPED,
7822             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
7823             PDL_PARAM_ISTYPED,
7824             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
7825             };
7826             static pdl_datatypes pdl_clusterdistancesenc_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_L, PDL_L, PDL_L, PDL_L, PDL_L, PDL_L, PDL_D };
7827             static PDL_Indx pdl_clusterdistancesenc_vtable_realdims_starts[] = { 0, 2, 4, 5, 6, 7, 8, 9, 10, 11 };
7828             static PDL_Indx pdl_clusterdistancesenc_vtable_realdims_ind_ids[] = { 0, 3, 0, 3, 0, 1, 4, 6, 2, 5, 6, 6 };
7829             static char *pdl_clusterdistancesenc_vtable_indnames[] = { "d","k1","k2","n","nc1","nc2","ncmps" };
7830             pdl_transvtable pdl_clusterdistancesenc_vtable = {
7831             PDL_TRANS_DO_BROADCAST, 0, pdl_clusterdistancesenc_vtable_gentypes, 9, 10, NULL /*CORE21*/,
7832             pdl_clusterdistancesenc_vtable_realdims, pdl_clusterdistancesenc_vtable_parnames,
7833             pdl_clusterdistancesenc_vtable_parflags, pdl_clusterdistancesenc_vtable_partypes,
7834             pdl_clusterdistancesenc_vtable_realdims_starts, pdl_clusterdistancesenc_vtable_realdims_ind_ids, 12,
7835             7, pdl_clusterdistancesenc_vtable_indnames,
7836             NULL, pdl_clusterdistancesenc_readdata, NULL,
7837             pdl_clusterdistancesenc_free,
7838             sizeof(pdl_params_clusterdistancesenc),"PDL::Cluster::clusterdistancesenc"
7839             };
7840              
7841              
7842 0           pdl_error pdl_run_clusterdistancesenc(pdl *data,pdl *mask,pdl *weight,pdl *coffsets1,pdl *crowids1,pdl *cwhich1,pdl *coffsets2,pdl *crowids2,pdl *cwhich2,pdl *dists,char *distFlag,char *methodFlag) {
7843 0           pdl_error PDL_err = {0, NULL, 0};
7844 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
7845 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_clusterdistancesenc_vtable);
7846 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
7847 0           pdl_params_clusterdistancesenc *__params = __privtrans->params;
7848 0           __privtrans->pdls[0] = data;
7849 0           __privtrans->pdls[1] = mask;
7850 0           __privtrans->pdls[2] = weight;
7851 0           __privtrans->pdls[3] = coffsets1;
7852 0           __privtrans->pdls[4] = crowids1;
7853 0           __privtrans->pdls[5] = cwhich1;
7854 0           __privtrans->pdls[6] = coffsets2;
7855 0           __privtrans->pdls[7] = crowids2;
7856 0           __privtrans->pdls[8] = cwhich2;
7857 0           __privtrans->pdls[9] = dists;
7858 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
7859 0           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
7860 0           (__params->methodFlag) = malloc(strlen(methodFlag)+1); strcpy(__params->methodFlag,methodFlag); /* CType.get_copy */
7861 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
7862 0           return PDL_err;
7863             }
7864              
7865             #line 1857 "lib/PDL/PP.pm"
7866             pdl_error pdl_getclusterwsum_readdata(pdl_trans *__privtrans) {
7867             pdl_error PDL_err = {0, NULL, 0};
7868             #line 7869 "Cluster.xs"
7869 0           register PDL_Indx __d_size = __privtrans->ind_sizes[0];
7870 0           register PDL_Indx __k_size = __privtrans->ind_sizes[1];
7871 0           register PDL_Indx __n_size = __privtrans->ind_sizes[2];
7872 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in getclusterwsum:" "broadcast.incs NULL");
7873             /* broadcastloop declarations */
7874             int __brcloopval;
7875             register PDL_Indx __tind0,__tind1; /* counters along dim */
7876 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
7877             /* dims here are how many steps along those dims */
7878 0           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
7879 0           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
7880 0           register PDL_Indx __tinc0_clusterwts = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
7881 0           register PDL_Indx __tinc0_cdata = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
7882 0           register PDL_Indx __tinc0_cmask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
7883 0           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
7884 0           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
7885 0           register PDL_Indx __tinc1_clusterwts = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
7886 0           register PDL_Indx __tinc1_cdata = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
7887 0           register PDL_Indx __tinc1_cmask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
7888             #define PDL_BROADCASTLOOP_START_getclusterwsum_readdata PDL_BROADCASTLOOP_START( \
7889             readdata, \
7890             __privtrans->broadcast, \
7891             __privtrans->vtable, \
7892             data_datap += __offsp[0]; \
7893             mask_datap += __offsp[1]; \
7894             clusterwts_datap += __offsp[2]; \
7895             cdata_datap += __offsp[3]; \
7896             cmask_datap += __offsp[4]; \
7897             , \
7898             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
7899             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
7900             ,clusterwts_datap += __tinc1_clusterwts - __tinc0_clusterwts * __tdims0 \
7901             ,cdata_datap += __tinc1_cdata - __tinc0_cdata * __tdims0 \
7902             ,cmask_datap += __tinc1_cmask - __tinc0_cmask * __tdims0 \
7903             ), \
7904             ( ,data_datap += __tinc0_data \
7905             ,mask_datap += __tinc0_mask \
7906             ,clusterwts_datap += __tinc0_clusterwts \
7907             ,cdata_datap += __tinc0_cdata \
7908             ,cmask_datap += __tinc0_cmask \
7909             ) \
7910             )
7911             #define PDL_BROADCASTLOOP_END_getclusterwsum_readdata PDL_BROADCASTLOOP_END( \
7912             __privtrans->broadcast, \
7913             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
7914             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
7915             clusterwts_datap -= __tinc1_clusterwts * __tdims1 + __offsp[2]; \
7916             cdata_datap -= __tinc1_cdata * __tdims1 + __offsp[3]; \
7917             cmask_datap -= __tinc1_cmask * __tdims1 + __offsp[4]; \
7918             )
7919 0           register PDL_Indx __inc_cdata_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_cdata_d;register PDL_Indx __inc_cdata_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,1)]; (void)__inc_cdata_k;
7920 0           register PDL_Indx __inc_clusterwts_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_clusterwts_k;register PDL_Indx __inc_clusterwts_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,1)]; (void)__inc_clusterwts_n;
7921 0           register PDL_Indx __inc_cmask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_cmask_d;register PDL_Indx __inc_cmask_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,1)]; (void)__inc_cmask_k;
7922 0           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
7923 0           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
7924             #ifndef PDL_DECLARE_PARAMS_getclusterwsum_1
7925             #define PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_clusterwts,PDL_PPSYM_PARAM_clusterwts,PDL_TYPE_PARAM_cdata,PDL_PPSYM_PARAM_cdata,PDL_TYPE_PARAM_cmask,PDL_PPSYM_PARAM_cmask) \
7926             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
7927             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
7928             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterwts, clusterwts, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_clusterwts) \
7929             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cdata, cdata, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_cdata) \
7930             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cmask, cmask, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_cmask)
7931             #endif
7932             #define PDL_IF_BAD(t,f) f
7933 0           switch (__privtrans->__datatype) { /* Start generic switch */
7934 0           case PDL_SB: {
7935 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7936 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
7937             int rid, rwt, cmaskdk;
7938 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
7939 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
7940 0           cmaskdk = 0;
7941 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
7942 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
7943 0           cmaskdk = 1;
7944 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
7945             }
7946             }} /* Close n */
7947 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
7948             }} /* Close k */
7949             }} /* Close d */
7950 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
7951 0           } break;
7952 0           case PDL_B: {
7953 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7954 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
7955             int rid, rwt, cmaskdk;
7956 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
7957 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
7958 0           cmaskdk = 0;
7959 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
7960 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
7961 0           cmaskdk = 1;
7962 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
7963             }
7964             }} /* Close n */
7965 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
7966             }} /* Close k */
7967             }} /* Close d */
7968 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
7969 0           } break;
7970 0           case PDL_S: {
7971 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7972 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
7973             int rid, rwt, cmaskdk;
7974 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
7975 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
7976 0           cmaskdk = 0;
7977 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
7978 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
7979 0           cmaskdk = 1;
7980 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
7981             }
7982             }} /* Close n */
7983 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
7984             }} /* Close k */
7985             }} /* Close d */
7986 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
7987 0           } break;
7988 0           case PDL_US: {
7989 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
7990 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
7991             int rid, rwt, cmaskdk;
7992 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
7993 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
7994 0           cmaskdk = 0;
7995 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
7996 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
7997 0           cmaskdk = 1;
7998 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
7999             }
8000             }} /* Close n */
8001 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
8002             }} /* Close k */
8003             }} /* Close d */
8004 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
8005 0           } break;
8006 0           case PDL_L: {
8007 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8008 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
8009             int rid, rwt, cmaskdk;
8010 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
8011 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
8012 0           cmaskdk = 0;
8013 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
8014 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
8015 0           cmaskdk = 1;
8016 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
8017             }
8018             }} /* Close n */
8019 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
8020             }} /* Close k */
8021             }} /* Close d */
8022 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
8023 0           } break;
8024 0           case PDL_UL: {
8025 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8026 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
8027             int rid, rwt, cmaskdk;
8028 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
8029 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
8030 0           cmaskdk = 0;
8031 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
8032 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
8033 0           cmaskdk = 1;
8034 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
8035             }
8036             }} /* Close n */
8037 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
8038             }} /* Close k */
8039             }} /* Close d */
8040 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
8041 0           } break;
8042 0           case PDL_IND: {
8043 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8044 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
8045             int rid, rwt, cmaskdk;
8046 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
8047 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
8048 0           cmaskdk = 0;
8049 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
8050 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
8051 0           cmaskdk = 1;
8052 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
8053             }
8054             }} /* Close n */
8055 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
8056             }} /* Close k */
8057             }} /* Close d */
8058 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
8059 0           } break;
8060 0           case PDL_ULL: {
8061 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8062 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
8063             int rid, rwt, cmaskdk;
8064 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
8065 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
8066 0           cmaskdk = 0;
8067 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
8068 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
8069 0           cmaskdk = 1;
8070 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
8071             }
8072             }} /* Close n */
8073 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
8074             }} /* Close k */
8075             }} /* Close d */
8076 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
8077 0           } break;
8078 0           case PDL_LL: {
8079 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8080 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
8081             int rid, rwt, cmaskdk;
8082 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
8083 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
8084 0           cmaskdk = 0;
8085 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
8086 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
8087 0           cmaskdk = 1;
8088 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
8089             }
8090             }} /* Close n */
8091 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
8092             }} /* Close k */
8093             }} /* Close d */
8094 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
8095 0           } break;
8096 0           case PDL_F: {
8097 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8098 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
8099             int rid, rwt, cmaskdk;
8100 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
8101 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
8102 0           cmaskdk = 0;
8103 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
8104 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
8105 0           cmaskdk = 1;
8106 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
8107             }
8108             }} /* Close n */
8109 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
8110             }} /* Close k */
8111             }} /* Close d */
8112 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
8113 0           } break;
8114 0           case PDL_D: {
8115 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8116 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
8117             int rid, rwt, cmaskdk;
8118 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
8119 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
8120 0           cmaskdk = 0;
8121 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
8122 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
8123 0           cmaskdk = 1;
8124 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
8125             }
8126             }} /* Close n */
8127 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
8128             }} /* Close k */
8129             }} /* Close d */
8130 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
8131 0           } break;
8132 0           case PDL_LD: {
8133 0 0         PDL_DECLARE_PARAMS_getclusterwsum_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Double,D,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8134 0 0         PDL_BROADCASTLOOP_START_getclusterwsum_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
8135             int rid, rwt, cmaskdk;
8136 0 0         {/* Open d */ PDL_EXPAND2(register PDL_Indx d=0, __d_stop=(__d_size)); for(; d<__d_stop; d+=1) {
8137 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
8138 0           cmaskdk = 0;
8139 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
8140 0 0         if ((mask_datap)[0+(__inc_mask_d*(d))+(__inc_mask_n*(n))]) {
8141 0           cmaskdk = 1;
8142 0           (cdata_datap)[0+(__inc_cdata_d*(d))+(__inc_cdata_k*(k))] += (clusterwts_datap)[0+(__inc_clusterwts_k*(k))+(__inc_clusterwts_n*(n))] * (data_datap)[0+(__inc_data_d*(d))+(__inc_data_n*(n))];
8143             }
8144             }} /* Close n */
8145 0           (cmask_datap)[0+(__inc_cmask_d*(d))+(__inc_cmask_k*(k))] = cmaskdk;
8146             }} /* Close k */
8147             }} /* Close d */
8148 0 0         }PDL_BROADCASTLOOP_END_getclusterwsum_readdata
    0          
8149 0           } break;
8150 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in getclusterwsum: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
8151             }
8152             #undef PDL_IF_BAD
8153 0           return PDL_err;
8154             }
8155              
8156             static pdl_datatypes pdl_getclusterwsum_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, -1 };
8157             static PDL_Indx pdl_getclusterwsum_vtable_realdims[] = { 2, 2, 2, 2, 2 };
8158             static char *pdl_getclusterwsum_vtable_parnames[] = { "data","mask","clusterwts","cdata","cmask" };
8159             static short pdl_getclusterwsum_vtable_parflags[] = {
8160             PDL_PARAM_ISTYPED,
8161             PDL_PARAM_ISTYPED,
8162             PDL_PARAM_ISTYPED,
8163             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
8164             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
8165             };
8166             static pdl_datatypes pdl_getclusterwsum_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_D, PDL_L };
8167             static PDL_Indx pdl_getclusterwsum_vtable_realdims_starts[] = { 0, 2, 4, 6, 8 };
8168             static PDL_Indx pdl_getclusterwsum_vtable_realdims_ind_ids[] = { 0, 2, 0, 2, 1, 2, 0, 1, 0, 1 };
8169             static char *pdl_getclusterwsum_vtable_indnames[] = { "d","k","n" };
8170             pdl_transvtable pdl_getclusterwsum_vtable = {
8171             PDL_TRANS_DO_BROADCAST, 0, pdl_getclusterwsum_vtable_gentypes, 3, 5, NULL /*CORE21*/,
8172             pdl_getclusterwsum_vtable_realdims, pdl_getclusterwsum_vtable_parnames,
8173             pdl_getclusterwsum_vtable_parflags, pdl_getclusterwsum_vtable_partypes,
8174             pdl_getclusterwsum_vtable_realdims_starts, pdl_getclusterwsum_vtable_realdims_ind_ids, 10,
8175             3, pdl_getclusterwsum_vtable_indnames,
8176             NULL, pdl_getclusterwsum_readdata, NULL,
8177             NULL,
8178             0,"PDL::Cluster::getclusterwsum"
8179             };
8180              
8181              
8182 0           pdl_error pdl_run_getclusterwsum(pdl *data,pdl *mask,pdl *clusterwts,pdl *cdata,pdl *cmask) {
8183 0           pdl_error PDL_err = {0, NULL, 0};
8184 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
8185 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_getclusterwsum_vtable);
8186 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
8187 0           __privtrans->pdls[0] = data;
8188 0           __privtrans->pdls[1] = mask;
8189 0           __privtrans->pdls[2] = clusterwts;
8190 0           __privtrans->pdls[3] = cdata;
8191 0           __privtrans->pdls[4] = cmask;
8192 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
8193 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
8194 0           return PDL_err;
8195             }
8196              
8197             #line 1846 "lib/PDL/PP.pm"
8198             typedef struct pdl_params_attachtonearest {
8199             #line 8200 "Cluster.xs"
8200             char *distFlag;
8201             char *methodFlag;
8202             } pdl_params_attachtonearest;
8203              
8204              
8205             #line 1857 "lib/PDL/PP.pm"
8206             pdl_error pdl_attachtonearest_readdata(pdl_trans *__privtrans) {
8207             pdl_error PDL_err = {0, NULL, 0};
8208             #line 8209 "Cluster.xs"
8209 0           pdl_params_attachtonearest *__params = __privtrans->params; (void)__params;
8210 0           register PDL_Indx __nr_size = __privtrans->ind_sizes[3];
8211 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in attachtonearest:" "broadcast.incs NULL");
8212             /* broadcastloop declarations */
8213             int __brcloopval;
8214             register PDL_Indx __tind0,__tind1; /* counters along dim */
8215 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
8216             /* dims here are how many steps along those dims */
8217 0           register PDL_Indx __tinc0_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
8218 0           register PDL_Indx __tinc0_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
8219 0           register PDL_Indx __tinc0_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
8220 0           register PDL_Indx __tinc0_rowids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
8221 0           register PDL_Indx __tinc0_cdata = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
8222 0           register PDL_Indx __tinc0_cmask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
8223 0           register PDL_Indx __tinc0_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,0);
8224 0           register PDL_Indx __tinc0_cdist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,0);
8225 0           register PDL_Indx __tinc1_data = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
8226 0           register PDL_Indx __tinc1_mask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
8227 0           register PDL_Indx __tinc1_weight = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
8228 0           register PDL_Indx __tinc1_rowids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
8229 0           register PDL_Indx __tinc1_cdata = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
8230 0           register PDL_Indx __tinc1_cmask = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
8231 0           register PDL_Indx __tinc1_clusterids = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,1);
8232 0           register PDL_Indx __tinc1_cdist = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,1);
8233             #define PDL_BROADCASTLOOP_START_attachtonearest_readdata PDL_BROADCASTLOOP_START( \
8234             readdata, \
8235             __privtrans->broadcast, \
8236             __privtrans->vtable, \
8237             data_datap += __offsp[0]; \
8238             mask_datap += __offsp[1]; \
8239             weight_datap += __offsp[2]; \
8240             rowids_datap += __offsp[3]; \
8241             cdata_datap += __offsp[4]; \
8242             cmask_datap += __offsp[5]; \
8243             clusterids_datap += __offsp[6]; \
8244             cdist_datap += __offsp[7]; \
8245             , \
8246             ( ,data_datap += __tinc1_data - __tinc0_data * __tdims0 \
8247             ,mask_datap += __tinc1_mask - __tinc0_mask * __tdims0 \
8248             ,weight_datap += __tinc1_weight - __tinc0_weight * __tdims0 \
8249             ,rowids_datap += __tinc1_rowids - __tinc0_rowids * __tdims0 \
8250             ,cdata_datap += __tinc1_cdata - __tinc0_cdata * __tdims0 \
8251             ,cmask_datap += __tinc1_cmask - __tinc0_cmask * __tdims0 \
8252             ,clusterids_datap += __tinc1_clusterids - __tinc0_clusterids * __tdims0 \
8253             ,cdist_datap += __tinc1_cdist - __tinc0_cdist * __tdims0 \
8254             ), \
8255             ( ,data_datap += __tinc0_data \
8256             ,mask_datap += __tinc0_mask \
8257             ,weight_datap += __tinc0_weight \
8258             ,rowids_datap += __tinc0_rowids \
8259             ,cdata_datap += __tinc0_cdata \
8260             ,cmask_datap += __tinc0_cmask \
8261             ,clusterids_datap += __tinc0_clusterids \
8262             ,cdist_datap += __tinc0_cdist \
8263             ) \
8264             )
8265             #define PDL_BROADCASTLOOP_END_attachtonearest_readdata PDL_BROADCASTLOOP_END( \
8266             __privtrans->broadcast, \
8267             data_datap -= __tinc1_data * __tdims1 + __offsp[0]; \
8268             mask_datap -= __tinc1_mask * __tdims1 + __offsp[1]; \
8269             weight_datap -= __tinc1_weight * __tdims1 + __offsp[2]; \
8270             rowids_datap -= __tinc1_rowids * __tdims1 + __offsp[3]; \
8271             cdata_datap -= __tinc1_cdata * __tdims1 + __offsp[4]; \
8272             cmask_datap -= __tinc1_cmask * __tdims1 + __offsp[5]; \
8273             clusterids_datap -= __tinc1_clusterids * __tdims1 + __offsp[6]; \
8274             cdist_datap -= __tinc1_cdist * __tdims1 + __offsp[7]; \
8275             )
8276 0           register PDL_Indx __inc_cdata_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_cdata_d;register PDL_Indx __inc_cdata_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,1)]; (void)__inc_cdata_k;
8277 0           register PDL_Indx __inc_cdist_nr = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,7,0)]; (void)__inc_cdist_nr;
8278 0           register PDL_Indx __inc_clusterids_nr = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,6,0)]; (void)__inc_clusterids_nr;
8279 0           register PDL_Indx __inc_cmask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_cmask_d;register PDL_Indx __inc_cmask_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,1)]; (void)__inc_cmask_k;
8280 0           register PDL_Indx __inc_data_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_data_d;register PDL_Indx __inc_data_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_data_n;
8281 0           register PDL_Indx __inc_mask_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_mask_d;register PDL_Indx __inc_mask_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_mask_n;
8282 0           register PDL_Indx __inc_rowids_nr = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_rowids_nr;
8283 0           register PDL_Indx __inc_weight_d = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_weight_d;
8284             #ifndef PDL_DECLARE_PARAMS_attachtonearest_1
8285             #define PDL_DECLARE_PARAMS_attachtonearest_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_data,PDL_PPSYM_PARAM_data,PDL_TYPE_PARAM_mask,PDL_PPSYM_PARAM_mask,PDL_TYPE_PARAM_weight,PDL_PPSYM_PARAM_weight,PDL_TYPE_PARAM_rowids,PDL_PPSYM_PARAM_rowids,PDL_TYPE_PARAM_cdata,PDL_PPSYM_PARAM_cdata,PDL_TYPE_PARAM_cmask,PDL_PPSYM_PARAM_cmask,PDL_TYPE_PARAM_clusterids,PDL_PPSYM_PARAM_clusterids,PDL_TYPE_PARAM_cdist,PDL_PPSYM_PARAM_cdist) \
8286             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_data, data, (__privtrans->pdls[0]), 1, PDL_PPSYM_PARAM_data) \
8287             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_mask, mask, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_mask) \
8288             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_weight, weight, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_weight) \
8289             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_rowids, rowids, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_rowids) \
8290             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cdata, cdata, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_cdata) \
8291             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cmask, cmask, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_cmask) \
8292             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_clusterids, clusterids, (__privtrans->pdls[6]), 1, PDL_PPSYM_PARAM_clusterids) \
8293             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_cdist, cdist, (__privtrans->pdls[7]), 1, PDL_PPSYM_PARAM_cdist)
8294             #endif
8295             #define PDL_IF_BAD(t,f) f
8296 0           switch (__privtrans->__datatype) { /* Start generic switch */
8297 0           case PDL_SB: {
8298 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_SByte,A,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8299             {
8300 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8301 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8302 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8303 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8304             double *tmpdatapp[2];
8305             int *tmpmaskpp[2];
8306 0           int transpose=0;
8307 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8308 0           int tmprowid = 0;
8309 0           int tmpctrid = 1;
8310             int ni;
8311             int ki, kbest;
8312             double dist, dbest;
8313 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8314 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8315 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8316 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8317             /*-- loop over all target rows --*/
8318 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8319 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8320 0           tmpdatapp[tmprowid] = datapp[ni];
8321 0           tmpmaskpp[tmprowid] = maskpp[ni];
8322             /*-- initialize --*/
8323 0           tmpdatapp[tmpctrid] = cdatapp[0];
8324 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8325 0           kbest = 0;
8326 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8327             1, 1, &tmprowid, &tmpctrid,
8328 0           *__params->distFlag, *__params->methodFlag, transpose);
8329             /*-- loop over all centroids --*/
8330 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8331 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8332 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8333 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8334             1, 1, &tmprowid, &tmpctrid,
8335 0           *__params->distFlag, *__params->methodFlag, transpose);
8336 0 0         if (dist < dbest) {
8337 0           kbest = ki;
8338 0           dbest = dist;
8339             }
8340             }
8341             /*-- save best data --*/
8342 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8343 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8344             }} /* Close nr */
8345 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8346             /*-- cleanup --*/
8347 0 0         if (datapp) free(datapp);
8348 0 0         if (maskpp) free(maskpp);
8349 0 0         if (cdatapp) free(cdatapp);
8350 0 0         if (cmaskpp) free(cmaskpp);
8351             }
8352 0           } break;
8353 0           case PDL_B: {
8354 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_Byte,B,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8355             {
8356 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8357 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8358 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8359 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8360             double *tmpdatapp[2];
8361             int *tmpmaskpp[2];
8362 0           int transpose=0;
8363 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8364 0           int tmprowid = 0;
8365 0           int tmpctrid = 1;
8366             int ni;
8367             int ki, kbest;
8368             double dist, dbest;
8369 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8370 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8371 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8372 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8373             /*-- loop over all target rows --*/
8374 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8375 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8376 0           tmpdatapp[tmprowid] = datapp[ni];
8377 0           tmpmaskpp[tmprowid] = maskpp[ni];
8378             /*-- initialize --*/
8379 0           tmpdatapp[tmpctrid] = cdatapp[0];
8380 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8381 0           kbest = 0;
8382 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8383             1, 1, &tmprowid, &tmpctrid,
8384 0           *__params->distFlag, *__params->methodFlag, transpose);
8385             /*-- loop over all centroids --*/
8386 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8387 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8388 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8389 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8390             1, 1, &tmprowid, &tmpctrid,
8391 0           *__params->distFlag, *__params->methodFlag, transpose);
8392 0 0         if (dist < dbest) {
8393 0           kbest = ki;
8394 0           dbest = dist;
8395             }
8396             }
8397             /*-- save best data --*/
8398 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8399 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8400             }} /* Close nr */
8401 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8402             /*-- cleanup --*/
8403 0 0         if (datapp) free(datapp);
8404 0 0         if (maskpp) free(maskpp);
8405 0 0         if (cdatapp) free(cdatapp);
8406 0 0         if (cmaskpp) free(cmaskpp);
8407             }
8408 0           } break;
8409 0           case PDL_S: {
8410 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_Short,S,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8411             {
8412 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8413 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8414 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8415 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8416             double *tmpdatapp[2];
8417             int *tmpmaskpp[2];
8418 0           int transpose=0;
8419 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8420 0           int tmprowid = 0;
8421 0           int tmpctrid = 1;
8422             int ni;
8423             int ki, kbest;
8424             double dist, dbest;
8425 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8426 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8427 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8428 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8429             /*-- loop over all target rows --*/
8430 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8431 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8432 0           tmpdatapp[tmprowid] = datapp[ni];
8433 0           tmpmaskpp[tmprowid] = maskpp[ni];
8434             /*-- initialize --*/
8435 0           tmpdatapp[tmpctrid] = cdatapp[0];
8436 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8437 0           kbest = 0;
8438 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8439             1, 1, &tmprowid, &tmpctrid,
8440 0           *__params->distFlag, *__params->methodFlag, transpose);
8441             /*-- loop over all centroids --*/
8442 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8443 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8444 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8445 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8446             1, 1, &tmprowid, &tmpctrid,
8447 0           *__params->distFlag, *__params->methodFlag, transpose);
8448 0 0         if (dist < dbest) {
8449 0           kbest = ki;
8450 0           dbest = dist;
8451             }
8452             }
8453             /*-- save best data --*/
8454 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8455 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8456             }} /* Close nr */
8457 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8458             /*-- cleanup --*/
8459 0 0         if (datapp) free(datapp);
8460 0 0         if (maskpp) free(maskpp);
8461 0 0         if (cdatapp) free(cdatapp);
8462 0 0         if (cmaskpp) free(cmaskpp);
8463             }
8464 0           } break;
8465 0           case PDL_US: {
8466 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_Ushort,U,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8467             {
8468 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8469 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8470 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8471 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8472             double *tmpdatapp[2];
8473             int *tmpmaskpp[2];
8474 0           int transpose=0;
8475 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8476 0           int tmprowid = 0;
8477 0           int tmpctrid = 1;
8478             int ni;
8479             int ki, kbest;
8480             double dist, dbest;
8481 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8482 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8483 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8484 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8485             /*-- loop over all target rows --*/
8486 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8487 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8488 0           tmpdatapp[tmprowid] = datapp[ni];
8489 0           tmpmaskpp[tmprowid] = maskpp[ni];
8490             /*-- initialize --*/
8491 0           tmpdatapp[tmpctrid] = cdatapp[0];
8492 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8493 0           kbest = 0;
8494 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8495             1, 1, &tmprowid, &tmpctrid,
8496 0           *__params->distFlag, *__params->methodFlag, transpose);
8497             /*-- loop over all centroids --*/
8498 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8499 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8500 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8501 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8502             1, 1, &tmprowid, &tmpctrid,
8503 0           *__params->distFlag, *__params->methodFlag, transpose);
8504 0 0         if (dist < dbest) {
8505 0           kbest = ki;
8506 0           dbest = dist;
8507             }
8508             }
8509             /*-- save best data --*/
8510 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8511 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8512             }} /* Close nr */
8513 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8514             /*-- cleanup --*/
8515 0 0         if (datapp) free(datapp);
8516 0 0         if (maskpp) free(maskpp);
8517 0 0         if (cdatapp) free(cdatapp);
8518 0 0         if (cmaskpp) free(cmaskpp);
8519             }
8520 0           } break;
8521 0           case PDL_L: {
8522 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8523             {
8524 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8525 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8526 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8527 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8528             double *tmpdatapp[2];
8529             int *tmpmaskpp[2];
8530 0           int transpose=0;
8531 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8532 0           int tmprowid = 0;
8533 0           int tmpctrid = 1;
8534             int ni;
8535             int ki, kbest;
8536             double dist, dbest;
8537 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8538 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8539 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8540 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8541             /*-- loop over all target rows --*/
8542 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8543 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8544 0           tmpdatapp[tmprowid] = datapp[ni];
8545 0           tmpmaskpp[tmprowid] = maskpp[ni];
8546             /*-- initialize --*/
8547 0           tmpdatapp[tmpctrid] = cdatapp[0];
8548 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8549 0           kbest = 0;
8550 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8551             1, 1, &tmprowid, &tmpctrid,
8552 0           *__params->distFlag, *__params->methodFlag, transpose);
8553             /*-- loop over all centroids --*/
8554 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8555 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8556 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8557 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8558             1, 1, &tmprowid, &tmpctrid,
8559 0           *__params->distFlag, *__params->methodFlag, transpose);
8560 0 0         if (dist < dbest) {
8561 0           kbest = ki;
8562 0           dbest = dist;
8563             }
8564             }
8565             /*-- save best data --*/
8566 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8567 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8568             }} /* Close nr */
8569 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8570             /*-- cleanup --*/
8571 0 0         if (datapp) free(datapp);
8572 0 0         if (maskpp) free(maskpp);
8573 0 0         if (cdatapp) free(cdatapp);
8574 0 0         if (cmaskpp) free(cmaskpp);
8575             }
8576 0           } break;
8577 0           case PDL_UL: {
8578 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_ULong,K,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8579             {
8580 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8581 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8582 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8583 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8584             double *tmpdatapp[2];
8585             int *tmpmaskpp[2];
8586 0           int transpose=0;
8587 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8588 0           int tmprowid = 0;
8589 0           int tmpctrid = 1;
8590             int ni;
8591             int ki, kbest;
8592             double dist, dbest;
8593 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8594 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8595 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8596 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8597             /*-- loop over all target rows --*/
8598 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8599 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8600 0           tmpdatapp[tmprowid] = datapp[ni];
8601 0           tmpmaskpp[tmprowid] = maskpp[ni];
8602             /*-- initialize --*/
8603 0           tmpdatapp[tmpctrid] = cdatapp[0];
8604 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8605 0           kbest = 0;
8606 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8607             1, 1, &tmprowid, &tmpctrid,
8608 0           *__params->distFlag, *__params->methodFlag, transpose);
8609             /*-- loop over all centroids --*/
8610 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8611 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8612 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8613 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8614             1, 1, &tmprowid, &tmpctrid,
8615 0           *__params->distFlag, *__params->methodFlag, transpose);
8616 0 0         if (dist < dbest) {
8617 0           kbest = ki;
8618 0           dbest = dist;
8619             }
8620             }
8621             /*-- save best data --*/
8622 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8623 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8624             }} /* Close nr */
8625 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8626             /*-- cleanup --*/
8627 0 0         if (datapp) free(datapp);
8628 0 0         if (maskpp) free(maskpp);
8629 0 0         if (cdatapp) free(cdatapp);
8630 0 0         if (cmaskpp) free(cmaskpp);
8631             }
8632 0           } break;
8633 0           case PDL_IND: {
8634 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_Indx,N,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8635             {
8636 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8637 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8638 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8639 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8640             double *tmpdatapp[2];
8641             int *tmpmaskpp[2];
8642 0           int transpose=0;
8643 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8644 0           int tmprowid = 0;
8645 0           int tmpctrid = 1;
8646             int ni;
8647             int ki, kbest;
8648             double dist, dbest;
8649 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8650 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8651 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8652 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8653             /*-- loop over all target rows --*/
8654 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8655 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8656 0           tmpdatapp[tmprowid] = datapp[ni];
8657 0           tmpmaskpp[tmprowid] = maskpp[ni];
8658             /*-- initialize --*/
8659 0           tmpdatapp[tmpctrid] = cdatapp[0];
8660 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8661 0           kbest = 0;
8662 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8663             1, 1, &tmprowid, &tmpctrid,
8664 0           *__params->distFlag, *__params->methodFlag, transpose);
8665             /*-- loop over all centroids --*/
8666 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8667 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8668 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8669 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8670             1, 1, &tmprowid, &tmpctrid,
8671 0           *__params->distFlag, *__params->methodFlag, transpose);
8672 0 0         if (dist < dbest) {
8673 0           kbest = ki;
8674 0           dbest = dist;
8675             }
8676             }
8677             /*-- save best data --*/
8678 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8679 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8680             }} /* Close nr */
8681 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8682             /*-- cleanup --*/
8683 0 0         if (datapp) free(datapp);
8684 0 0         if (maskpp) free(maskpp);
8685 0 0         if (cdatapp) free(cdatapp);
8686 0 0         if (cmaskpp) free(cmaskpp);
8687             }
8688 0           } break;
8689 0           case PDL_ULL: {
8690 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_ULongLong,P,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8691             {
8692 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8693 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8694 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8695 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8696             double *tmpdatapp[2];
8697             int *tmpmaskpp[2];
8698 0           int transpose=0;
8699 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8700 0           int tmprowid = 0;
8701 0           int tmpctrid = 1;
8702             int ni;
8703             int ki, kbest;
8704             double dist, dbest;
8705 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8706 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8707 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8708 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8709             /*-- loop over all target rows --*/
8710 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8711 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8712 0           tmpdatapp[tmprowid] = datapp[ni];
8713 0           tmpmaskpp[tmprowid] = maskpp[ni];
8714             /*-- initialize --*/
8715 0           tmpdatapp[tmpctrid] = cdatapp[0];
8716 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8717 0           kbest = 0;
8718 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8719             1, 1, &tmprowid, &tmpctrid,
8720 0           *__params->distFlag, *__params->methodFlag, transpose);
8721             /*-- loop over all centroids --*/
8722 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8723 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8724 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8725 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8726             1, 1, &tmprowid, &tmpctrid,
8727 0           *__params->distFlag, *__params->methodFlag, transpose);
8728 0 0         if (dist < dbest) {
8729 0           kbest = ki;
8730 0           dbest = dist;
8731             }
8732             }
8733             /*-- save best data --*/
8734 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8735 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8736             }} /* Close nr */
8737 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8738             /*-- cleanup --*/
8739 0 0         if (datapp) free(datapp);
8740 0 0         if (maskpp) free(maskpp);
8741 0 0         if (cdatapp) free(cdatapp);
8742 0 0         if (cmaskpp) free(cmaskpp);
8743             }
8744 0           } break;
8745 0           case PDL_LL: {
8746 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_LongLong,Q,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8747             {
8748 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8749 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8750 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8751 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8752             double *tmpdatapp[2];
8753             int *tmpmaskpp[2];
8754 0           int transpose=0;
8755 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8756 0           int tmprowid = 0;
8757 0           int tmpctrid = 1;
8758             int ni;
8759             int ki, kbest;
8760             double dist, dbest;
8761 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8762 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8763 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8764 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8765             /*-- loop over all target rows --*/
8766 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8767 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8768 0           tmpdatapp[tmprowid] = datapp[ni];
8769 0           tmpmaskpp[tmprowid] = maskpp[ni];
8770             /*-- initialize --*/
8771 0           tmpdatapp[tmpctrid] = cdatapp[0];
8772 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8773 0           kbest = 0;
8774 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8775             1, 1, &tmprowid, &tmpctrid,
8776 0           *__params->distFlag, *__params->methodFlag, transpose);
8777             /*-- loop over all centroids --*/
8778 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8779 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8780 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8781 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8782             1, 1, &tmprowid, &tmpctrid,
8783 0           *__params->distFlag, *__params->methodFlag, transpose);
8784 0 0         if (dist < dbest) {
8785 0           kbest = ki;
8786 0           dbest = dist;
8787             }
8788             }
8789             /*-- save best data --*/
8790 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8791 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8792             }} /* Close nr */
8793 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8794             /*-- cleanup --*/
8795 0 0         if (datapp) free(datapp);
8796 0 0         if (maskpp) free(maskpp);
8797 0 0         if (cdatapp) free(cdatapp);
8798 0 0         if (cmaskpp) free(cmaskpp);
8799             }
8800 0           } break;
8801 0           case PDL_F: {
8802 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_Float,F,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8803             {
8804 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8805 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8806 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8807 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8808             double *tmpdatapp[2];
8809             int *tmpmaskpp[2];
8810 0           int transpose=0;
8811 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8812 0           int tmprowid = 0;
8813 0           int tmpctrid = 1;
8814             int ni;
8815             int ki, kbest;
8816             double dist, dbest;
8817 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8818 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8819 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8820 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8821             /*-- loop over all target rows --*/
8822 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8823 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8824 0           tmpdatapp[tmprowid] = datapp[ni];
8825 0           tmpmaskpp[tmprowid] = maskpp[ni];
8826             /*-- initialize --*/
8827 0           tmpdatapp[tmpctrid] = cdatapp[0];
8828 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8829 0           kbest = 0;
8830 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8831             1, 1, &tmprowid, &tmpctrid,
8832 0           *__params->distFlag, *__params->methodFlag, transpose);
8833             /*-- loop over all centroids --*/
8834 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8835 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8836 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8837 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8838             1, 1, &tmprowid, &tmpctrid,
8839 0           *__params->distFlag, *__params->methodFlag, transpose);
8840 0 0         if (dist < dbest) {
8841 0           kbest = ki;
8842 0           dbest = dist;
8843             }
8844             }
8845             /*-- save best data --*/
8846 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8847 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8848             }} /* Close nr */
8849 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8850             /*-- cleanup --*/
8851 0 0         if (datapp) free(datapp);
8852 0 0         if (maskpp) free(maskpp);
8853 0 0         if (cdatapp) free(cdatapp);
8854 0 0         if (cmaskpp) free(cmaskpp);
8855             }
8856 0           } break;
8857 0           case PDL_D: {
8858 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_Double,D,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8859             {
8860 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8861 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8862 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8863 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8864             double *tmpdatapp[2];
8865             int *tmpmaskpp[2];
8866 0           int transpose=0;
8867 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8868 0           int tmprowid = 0;
8869 0           int tmpctrid = 1;
8870             int ni;
8871             int ki, kbest;
8872             double dist, dbest;
8873 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8874 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8875 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8876 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8877             /*-- loop over all target rows --*/
8878 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8879 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8880 0           tmpdatapp[tmprowid] = datapp[ni];
8881 0           tmpmaskpp[tmprowid] = maskpp[ni];
8882             /*-- initialize --*/
8883 0           tmpdatapp[tmpctrid] = cdatapp[0];
8884 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8885 0           kbest = 0;
8886 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8887             1, 1, &tmprowid, &tmpctrid,
8888 0           *__params->distFlag, *__params->methodFlag, transpose);
8889             /*-- loop over all centroids --*/
8890 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8891 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8892 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8893 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8894             1, 1, &tmprowid, &tmpctrid,
8895 0           *__params->distFlag, *__params->methodFlag, transpose);
8896 0 0         if (dist < dbest) {
8897 0           kbest = ki;
8898 0           dbest = dist;
8899             }
8900             }
8901             /*-- save best data --*/
8902 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8903 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8904             }} /* Close nr */
8905 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8906             /*-- cleanup --*/
8907 0 0         if (datapp) free(datapp);
8908 0 0         if (maskpp) free(maskpp);
8909 0 0         if (cdatapp) free(cdatapp);
8910 0 0         if (cmaskpp) free(cmaskpp);
8911             }
8912 0           } break;
8913 0           case PDL_LD: {
8914 0 0         PDL_DECLARE_PARAMS_attachtonearest_1(PDL_LDouble,E,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Double,D,PDL_Long,L,PDL_Long,L,PDL_Double,D)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
8915             {
8916 0           double **datapp = (double **)pp_alloc(__privtrans->ind_sizes[2]);
8917 0           int **maskpp = (int **)pp_alloc(__privtrans->ind_sizes[2]);
8918 0           double **cdatapp = (double **)pp_alloc(__privtrans->ind_sizes[1]);
8919 0           int **cmaskpp = (int **)pp_alloc(__privtrans->ind_sizes[1]);
8920             double *tmpdatapp[2];
8921             int *tmpmaskpp[2];
8922 0           int transpose=0;
8923 0 0         PDL_BROADCASTLOOP_START_attachtonearest_readdata
    0          
    0          
    0          
    0          
    0          
    0          
8924 0           int tmprowid = 0;
8925 0           int tmpctrid = 1;
8926             int ni;
8927             int ki, kbest;
8928             double dist, dbest;
8929 0           p2pp_dbl(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], data_datap, datapp);
8930 0           p2pp_int(__privtrans->ind_sizes[2], __privtrans->ind_sizes[0], mask_datap, maskpp);
8931 0           p2pp_dbl(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cdata_datap, cdatapp);
8932 0           p2pp_int(__privtrans->ind_sizes[1], __privtrans->ind_sizes[0], cmask_datap, cmaskpp);
8933             /*-- loop over all target rows --*/
8934 0 0         {/* Open nr */ PDL_EXPAND2(register PDL_Indx nr=0, __nr_stop=(__nr_size)); for(; nr<__nr_stop; nr+=1) {
8935 0           ni = (rowids_datap)[0+(__inc_rowids_nr*(nr))];
8936 0           tmpdatapp[tmprowid] = datapp[ni];
8937 0           tmpmaskpp[tmprowid] = maskpp[ni];
8938             /*-- initialize --*/
8939 0           tmpdatapp[tmpctrid] = cdatapp[0];
8940 0           tmpmaskpp[tmpctrid] = cmaskpp[0];
8941 0           kbest = 0;
8942 0           dbest = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8943             1, 1, &tmprowid, &tmpctrid,
8944 0           *__params->distFlag, *__params->methodFlag, transpose);
8945             /*-- loop over all centroids --*/
8946 0 0         for (ki=1; ki < __privtrans->ind_sizes[1]; ki++) {
8947 0           tmpdatapp[tmpctrid] = cdatapp[ki];
8948 0           tmpmaskpp[tmpctrid] = cmaskpp[ki];
8949 0           dist = clusterdistance(2, __privtrans->ind_sizes[0], tmpdatapp, tmpmaskpp, weight_datap,
8950             1, 1, &tmprowid, &tmpctrid,
8951 0           *__params->distFlag, *__params->methodFlag, transpose);
8952 0 0         if (dist < dbest) {
8953 0           kbest = ki;
8954 0           dbest = dist;
8955             }
8956             }
8957             /*-- save best data --*/
8958 0           (clusterids_datap)[0+(__inc_clusterids_nr*(nr))] = kbest;
8959 0           (cdist_datap)[0+(__inc_cdist_nr*(nr))] = dbest;
8960             }} /* Close nr */
8961 0 0         PDL_BROADCASTLOOP_END_attachtonearest_readdata
    0          
8962             /*-- cleanup --*/
8963 0 0         if (datapp) free(datapp);
8964 0 0         if (maskpp) free(maskpp);
8965 0 0         if (cdatapp) free(cdatapp);
8966 0 0         if (cmaskpp) free(cmaskpp);
8967             }
8968 0           } break;
8969 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in attachtonearest: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
8970             }
8971             #undef PDL_IF_BAD
8972 0           return PDL_err;
8973             }
8974              
8975              
8976             #line 1857 "lib/PDL/PP.pm"
8977             pdl_error pdl_attachtonearest_free(pdl_trans *__privtrans, char destroy) {
8978             pdl_error PDL_err = {0, NULL, 0};
8979             #line 8980 "Cluster.xs"
8980 0           pdl_params_attachtonearest *__params = __privtrans->params; (void)__params;
8981 0 0         PDL_FREE_CODE(__privtrans, destroy, free(__params->distFlag); /* CType.get_free */
8982             free(__params->methodFlag); /* CType.get_free */
8983 0           , ) return PDL_err;
8984             }
8985              
8986             static pdl_datatypes pdl_attachtonearest_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, -1 };
8987             static PDL_Indx pdl_attachtonearest_vtable_realdims[] = { 2, 2, 1, 1, 2, 2, 1, 1 };
8988             static char *pdl_attachtonearest_vtable_parnames[] = { "data","mask","weight","rowids","cdata","cmask","clusterids","cdist" };
8989             static short pdl_attachtonearest_vtable_parflags[] = {
8990             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
8991             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
8992             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
8993             PDL_PARAM_ISTYPED,
8994             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
8995             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
8996             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
8997             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
8998             };
8999             static pdl_datatypes pdl_attachtonearest_vtable_partypes[] = { PDL_D, PDL_L, PDL_D, PDL_L, PDL_D, PDL_L, PDL_L, PDL_D };
9000             static PDL_Indx pdl_attachtonearest_vtable_realdims_starts[] = { 0, 2, 4, 5, 6, 8, 10, 11 };
9001             static PDL_Indx pdl_attachtonearest_vtable_realdims_ind_ids[] = { 0, 2, 0, 2, 0, 3, 0, 1, 0, 1, 3, 3 };
9002             static char *pdl_attachtonearest_vtable_indnames[] = { "d","k","n","nr" };
9003             pdl_transvtable pdl_attachtonearest_vtable = {
9004             PDL_TRANS_DO_BROADCAST, 0, pdl_attachtonearest_vtable_gentypes, 6, 8, NULL /*CORE21*/,
9005             pdl_attachtonearest_vtable_realdims, pdl_attachtonearest_vtable_parnames,
9006             pdl_attachtonearest_vtable_parflags, pdl_attachtonearest_vtable_partypes,
9007             pdl_attachtonearest_vtable_realdims_starts, pdl_attachtonearest_vtable_realdims_ind_ids, 12,
9008             4, pdl_attachtonearest_vtable_indnames,
9009             NULL, pdl_attachtonearest_readdata, NULL,
9010             pdl_attachtonearest_free,
9011             sizeof(pdl_params_attachtonearest),"PDL::Cluster::attachtonearest"
9012             };
9013              
9014              
9015 0           pdl_error pdl_run_attachtonearest(pdl *data,pdl *mask,pdl *weight,pdl *rowids,pdl *cdata,pdl *cmask,pdl *clusterids,pdl *cdist,char *distFlag,char *methodFlag) {
9016 0           pdl_error PDL_err = {0, NULL, 0};
9017 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
9018 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_attachtonearest_vtable);
9019 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
9020 0           pdl_params_attachtonearest *__params = __privtrans->params;
9021 0           __privtrans->pdls[0] = data;
9022 0           __privtrans->pdls[1] = mask;
9023 0           __privtrans->pdls[2] = weight;
9024 0           __privtrans->pdls[3] = rowids;
9025 0           __privtrans->pdls[4] = cdata;
9026 0           __privtrans->pdls[5] = cmask;
9027 0           __privtrans->pdls[6] = clusterids;
9028 0           __privtrans->pdls[7] = cdist;
9029 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
9030 0           (__params->distFlag) = malloc(strlen(distFlag)+1); strcpy(__params->distFlag,distFlag); /* CType.get_copy */
9031 0           (__params->methodFlag) = malloc(strlen(methodFlag)+1); strcpy(__params->methodFlag,methodFlag); /* CType.get_copy */
9032 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
9033 0           return PDL_err;
9034             }
9035              
9036             #line 1846 "lib/PDL/PP.pm"
9037             typedef struct pdl_params_checkprototypes {
9038             #line 9039 "Cluster.xs"
9039             int nsize;
9040             } pdl_params_checkprototypes;
9041              
9042              
9043             #line 1857 "lib/PDL/PP.pm"
9044             pdl_error pdl_checkprototypes_redodims(pdl_trans *__privtrans) {
9045             pdl_error PDL_err = {0, NULL, 0};
9046             #line 9047 "Cluster.xs"
9047 0           pdl_params_checkprototypes *__params = __privtrans->params; (void)__params;
9048 0           __privtrans->ind_sizes[1] = __params->nsize;
9049 0 0         PDL_RETERROR(PDL_err, PDL->redodims_default(__privtrans));
9050 0           return PDL_err;
9051             }
9052              
9053              
9054             #line 1857 "lib/PDL/PP.pm"
9055             pdl_error pdl_checkprototypes_readdata(pdl_trans *__privtrans) {
9056             pdl_error PDL_err = {0, NULL, 0};
9057             #line 9058 "Cluster.xs"
9058 0           pdl_params_checkprototypes *__params = __privtrans->params; (void)__params;
9059 0           register PDL_Indx __k_size = __privtrans->ind_sizes[0];
9060 0           register PDL_Indx __n_size = __privtrans->ind_sizes[1];
9061 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in checkprototypes:" "broadcast.incs NULL");
9062             /* broadcastloop declarations */
9063             int __brcloopval;
9064             register PDL_Indx __tind0,__tind1; /* counters along dim */
9065 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
9066             /* dims here are how many steps along those dims */
9067 0           register PDL_Indx __tinc0_protos = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
9068 0           register PDL_Indx __tinc0_cprotos = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
9069 0           register PDL_Indx __tinc0_otmp = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
9070 0           register PDL_Indx __tinc1_protos = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
9071 0           register PDL_Indx __tinc1_cprotos = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
9072 0           register PDL_Indx __tinc1_otmp = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
9073             #define PDL_BROADCASTLOOP_START_checkprototypes_readdata PDL_BROADCASTLOOP_START( \
9074             readdata, \
9075             __privtrans->broadcast, \
9076             __privtrans->vtable, \
9077             protos_datap += __offsp[0]; \
9078             cprotos_datap += __offsp[1]; \
9079             otmp_datap += __offsp[2]; \
9080             , \
9081             ( ,protos_datap += __tinc1_protos - __tinc0_protos * __tdims0 \
9082             ,cprotos_datap += __tinc1_cprotos - __tinc0_cprotos * __tdims0 \
9083             ,otmp_datap += __tinc1_otmp - __tinc0_otmp * __tdims0 \
9084             ), \
9085             ( ,protos_datap += __tinc0_protos \
9086             ,cprotos_datap += __tinc0_cprotos \
9087             ,otmp_datap += __tinc0_otmp \
9088             ) \
9089             )
9090             #define PDL_BROADCASTLOOP_END_checkprototypes_readdata PDL_BROADCASTLOOP_END( \
9091             __privtrans->broadcast, \
9092             protos_datap -= __tinc1_protos * __tdims1 + __offsp[0]; \
9093             cprotos_datap -= __tinc1_cprotos * __tdims1 + __offsp[1]; \
9094             otmp_datap -= __tinc1_otmp * __tdims1 + __offsp[2]; \
9095             )
9096 0           register PDL_Indx __inc_cprotos_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_cprotos_k;
9097 0           register PDL_Indx __inc_otmp_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_otmp_n;
9098 0           register PDL_Indx __inc_protos_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_protos_k;
9099             #ifndef PDL_DECLARE_PARAMS_checkprototypes_1
9100             #define PDL_DECLARE_PARAMS_checkprototypes_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_otmp,PDL_PPSYM_PARAM_otmp) \
9101             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, protos, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
9102             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, cprotos, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
9103             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_otmp, otmp, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_otmp)
9104             #endif
9105             #define PDL_IF_BAD(t,f) f
9106 0           switch (__privtrans->__datatype) { /* Start generic switch */
9107 0           case PDL_B: {
9108 0 0         PDL_DECLARE_PARAMS_checkprototypes_1(PDL_Byte,B,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9109             {
9110             /*-- sanity check --*/
9111 0 0         if (__privtrans->ind_sizes[0] > __privtrans->ind_sizes[1]) {
9112 0           barf("checkprototypes(): number of prototypes \"k\" (=%d) must be <= number of objects \"n\" (=%d)!\n",
9113 0           __privtrans->ind_sizes[0], __privtrans->ind_sizes[1]);
9114             }
9115 0 0         PDL_BROADCASTLOOP_START_checkprototypes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
9116 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) { (otmp_datap)[0+(__inc_otmp_n*(n))] = 0; }} /* Close n */
9117 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
9118 0           int protoi = (protos_datap)[0+(__inc_protos_k*(k))];
9119 0 0         for (; (otmp_datap)[0+(__inc_otmp_n*(protoi))]; protoi = (protoi+1)%__privtrans->ind_sizes[1]) { ; }
9120 0           (cprotos_datap)[0+(__inc_cprotos_k*(k))] = protoi;
9121 0           (otmp_datap)[0+(__inc_otmp_n*(protoi))] = 1;
9122             }} /* Close k */
9123 0 0         PDL_BROADCASTLOOP_END_checkprototypes_readdata
    0          
9124             }
9125 0           } break;
9126 0           case PDL_S: {
9127 0 0         PDL_DECLARE_PARAMS_checkprototypes_1(PDL_Short,S,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9128             {
9129             /*-- sanity check --*/
9130 0 0         if (__privtrans->ind_sizes[0] > __privtrans->ind_sizes[1]) {
9131 0           barf("checkprototypes(): number of prototypes \"k\" (=%d) must be <= number of objects \"n\" (=%d)!\n",
9132 0           __privtrans->ind_sizes[0], __privtrans->ind_sizes[1]);
9133             }
9134 0 0         PDL_BROADCASTLOOP_START_checkprototypes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
9135 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) { (otmp_datap)[0+(__inc_otmp_n*(n))] = 0; }} /* Close n */
9136 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
9137 0           int protoi = (protos_datap)[0+(__inc_protos_k*(k))];
9138 0 0         for (; (otmp_datap)[0+(__inc_otmp_n*(protoi))]; protoi = (protoi+1)%__privtrans->ind_sizes[1]) { ; }
9139 0           (cprotos_datap)[0+(__inc_cprotos_k*(k))] = protoi;
9140 0           (otmp_datap)[0+(__inc_otmp_n*(protoi))] = 1;
9141             }} /* Close k */
9142 0 0         PDL_BROADCASTLOOP_END_checkprototypes_readdata
    0          
9143             }
9144 0           } break;
9145 0           case PDL_US: {
9146 0 0         PDL_DECLARE_PARAMS_checkprototypes_1(PDL_Ushort,U,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9147             {
9148             /*-- sanity check --*/
9149 0 0         if (__privtrans->ind_sizes[0] > __privtrans->ind_sizes[1]) {
9150 0           barf("checkprototypes(): number of prototypes \"k\" (=%d) must be <= number of objects \"n\" (=%d)!\n",
9151 0           __privtrans->ind_sizes[0], __privtrans->ind_sizes[1]);
9152             }
9153 0 0         PDL_BROADCASTLOOP_START_checkprototypes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
9154 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) { (otmp_datap)[0+(__inc_otmp_n*(n))] = 0; }} /* Close n */
9155 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
9156 0           int protoi = (protos_datap)[0+(__inc_protos_k*(k))];
9157 0 0         for (; (otmp_datap)[0+(__inc_otmp_n*(protoi))]; protoi = (protoi+1)%__privtrans->ind_sizes[1]) { ; }
9158 0           (cprotos_datap)[0+(__inc_cprotos_k*(k))] = protoi;
9159 0           (otmp_datap)[0+(__inc_otmp_n*(protoi))] = 1;
9160             }} /* Close k */
9161 0 0         PDL_BROADCASTLOOP_END_checkprototypes_readdata
    0          
9162             }
9163 0           } break;
9164 0           case PDL_L: {
9165 0 0         PDL_DECLARE_PARAMS_checkprototypes_1(PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9166             {
9167             /*-- sanity check --*/
9168 0 0         if (__privtrans->ind_sizes[0] > __privtrans->ind_sizes[1]) {
9169 0           barf("checkprototypes(): number of prototypes \"k\" (=%d) must be <= number of objects \"n\" (=%d)!\n",
9170 0           __privtrans->ind_sizes[0], __privtrans->ind_sizes[1]);
9171             }
9172 0 0         PDL_BROADCASTLOOP_START_checkprototypes_readdata
    0          
    0          
    0          
    0          
    0          
    0          
9173 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) { (otmp_datap)[0+(__inc_otmp_n*(n))] = 0; }} /* Close n */
9174 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) {
9175 0           int protoi = (protos_datap)[0+(__inc_protos_k*(k))];
9176 0 0         for (; (otmp_datap)[0+(__inc_otmp_n*(protoi))]; protoi = (protoi+1)%__privtrans->ind_sizes[1]) { ; }
9177 0           (cprotos_datap)[0+(__inc_cprotos_k*(k))] = protoi;
9178 0           (otmp_datap)[0+(__inc_otmp_n*(protoi))] = 1;
9179             }} /* Close k */
9180 0 0         PDL_BROADCASTLOOP_END_checkprototypes_readdata
    0          
9181             }
9182 0           } break;
9183 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in checkprototypes: unhandled datatype(%d), only handles (BSUL)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
9184             }
9185             #undef PDL_IF_BAD
9186 0           return PDL_err;
9187             }
9188              
9189             static pdl_datatypes pdl_checkprototypes_vtable_gentypes[] = { PDL_B, PDL_S, PDL_US, PDL_L, -1 };
9190             static PDL_Indx pdl_checkprototypes_vtable_realdims[] = { 1, 1, 1 };
9191             static char *pdl_checkprototypes_vtable_parnames[] = { "protos","cprotos","otmp" };
9192             static short pdl_checkprototypes_vtable_parflags[] = {
9193             0,
9194             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE,
9195             PDL_PARAM_ISCREAT|PDL_PARAM_ISTEMP|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
9196             };
9197             static pdl_datatypes pdl_checkprototypes_vtable_partypes[] = { -1, -1, PDL_B };
9198             static PDL_Indx pdl_checkprototypes_vtable_realdims_starts[] = { 0, 1, 2 };
9199             static PDL_Indx pdl_checkprototypes_vtable_realdims_ind_ids[] = { 0, 0, 1 };
9200             static char *pdl_checkprototypes_vtable_indnames[] = { "k","n" };
9201             pdl_transvtable pdl_checkprototypes_vtable = {
9202             PDL_TRANS_DO_BROADCAST, 0, pdl_checkprototypes_vtable_gentypes, 1, 3, NULL /*CORE21*/,
9203             pdl_checkprototypes_vtable_realdims, pdl_checkprototypes_vtable_parnames,
9204             pdl_checkprototypes_vtable_parflags, pdl_checkprototypes_vtable_partypes,
9205             pdl_checkprototypes_vtable_realdims_starts, pdl_checkprototypes_vtable_realdims_ind_ids, 3,
9206             2, pdl_checkprototypes_vtable_indnames,
9207             pdl_checkprototypes_redodims, pdl_checkprototypes_readdata, NULL,
9208             NULL,
9209             sizeof(pdl_params_checkprototypes),"PDL::Cluster::checkprototypes"
9210             };
9211              
9212              
9213 0           pdl_error pdl_run_checkprototypes(pdl *protos,pdl *cprotos,int nsize) {
9214 0           pdl_error PDL_err = {0, NULL, 0};
9215 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
9216 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_checkprototypes_vtable);
9217 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
9218 0           pdl_params_checkprototypes *__params = __privtrans->params;
9219 0           __privtrans->pdls[0] = protos;
9220 0           __privtrans->pdls[1] = cprotos;
9221 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
9222 0           (__params->nsize) = (nsize); /* CType.get_copy */
9223 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
9224 0           return PDL_err;
9225             }
9226              
9227             #line 1846 "lib/PDL/PP.pm"
9228             typedef struct pdl_params_checkpartitions {
9229             #line 9230 "Cluster.xs"
9230             int ksize;
9231             } pdl_params_checkpartitions;
9232              
9233              
9234             #line 1857 "lib/PDL/PP.pm"
9235             pdl_error pdl_checkpartitions_redodims(pdl_trans *__privtrans) {
9236             pdl_error PDL_err = {0, NULL, 0};
9237             #line 9238 "Cluster.xs"
9238 0           pdl_params_checkpartitions *__params = __privtrans->params; (void)__params;
9239 0           __privtrans->ind_sizes[0] = __params->ksize;
9240 0 0         PDL_RETERROR(PDL_err, PDL->redodims_default(__privtrans));
9241 0           return PDL_err;
9242             }
9243              
9244              
9245             #line 1857 "lib/PDL/PP.pm"
9246             pdl_error pdl_checkpartitions_readdata(pdl_trans *__privtrans) {
9247             pdl_error PDL_err = {0, NULL, 0};
9248             #line 9249 "Cluster.xs"
9249 0           pdl_params_checkpartitions *__params = __privtrans->params; (void)__params;
9250 0           register PDL_Indx __k_size = __privtrans->ind_sizes[0];
9251 0           register PDL_Indx __n_size = __privtrans->ind_sizes[1];
9252 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in checkpartitions:" "broadcast.incs NULL");
9253             /* broadcastloop declarations */
9254             int __brcloopval;
9255             register PDL_Indx __tind0,__tind1; /* counters along dim */
9256 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
9257             /* dims here are how many steps along those dims */
9258 0           register PDL_Indx __tinc0_part = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
9259 0           register PDL_Indx __tinc0_cpart = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
9260 0           register PDL_Indx __tinc0_ptmp = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
9261 0           register PDL_Indx __tinc1_part = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
9262 0           register PDL_Indx __tinc1_cpart = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
9263 0           register PDL_Indx __tinc1_ptmp = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
9264             #define PDL_BROADCASTLOOP_START_checkpartitions_readdata PDL_BROADCASTLOOP_START( \
9265             readdata, \
9266             __privtrans->broadcast, \
9267             __privtrans->vtable, \
9268             part_datap += __offsp[0]; \
9269             cpart_datap += __offsp[1]; \
9270             ptmp_datap += __offsp[2]; \
9271             , \
9272             ( ,part_datap += __tinc1_part - __tinc0_part * __tdims0 \
9273             ,cpart_datap += __tinc1_cpart - __tinc0_cpart * __tdims0 \
9274             ,ptmp_datap += __tinc1_ptmp - __tinc0_ptmp * __tdims0 \
9275             ), \
9276             ( ,part_datap += __tinc0_part \
9277             ,cpart_datap += __tinc0_cpart \
9278             ,ptmp_datap += __tinc0_ptmp \
9279             ) \
9280             )
9281             #define PDL_BROADCASTLOOP_END_checkpartitions_readdata PDL_BROADCASTLOOP_END( \
9282             __privtrans->broadcast, \
9283             part_datap -= __tinc1_part * __tdims1 + __offsp[0]; \
9284             cpart_datap -= __tinc1_cpart * __tdims1 + __offsp[1]; \
9285             ptmp_datap -= __tinc1_ptmp * __tdims1 + __offsp[2]; \
9286             )
9287 0           register PDL_Indx __inc_cpart_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_cpart_n;
9288 0           register PDL_Indx __inc_part_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_part_n;
9289 0           register PDL_Indx __inc_ptmp_k = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_ptmp_k;
9290             #ifndef PDL_DECLARE_PARAMS_checkpartitions_1
9291             #define PDL_DECLARE_PARAMS_checkpartitions_1(PDL_TYPE_OP,PDL_PPSYM_OP) \
9292             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, part, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
9293             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, cpart, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
9294             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, ptmp, (__privtrans->pdls[2]), 1, PDL_PPSYM_OP)
9295             #endif
9296             #define PDL_IF_BAD(t,f) f
9297 0           switch (__privtrans->__datatype) { /* Start generic switch */
9298 0           case PDL_B: {
9299 0 0         PDL_DECLARE_PARAMS_checkpartitions_1(PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9300             {
9301             /*-- sanity check --*/
9302 0 0         if (__privtrans->ind_sizes[0] > __privtrans->ind_sizes[1]) {
9303 0           barf("checkpartitions(): number of partitions \"k\" (=%d) must be <= number of objects \"n\" (=%d)!\n",
9304 0           __privtrans->ind_sizes[0], __privtrans->ind_sizes[1]);
9305             }
9306 0 0         PDL_BROADCASTLOOP_START_checkpartitions_readdata
    0          
    0          
    0          
    0          
    0          
    0          
9307             int ni, ki, kj;
9308 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (ptmp_datap)[0+(__inc_ptmp_k*(k))] = 0; }} /* Close k */
9309 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
9310 0           ki = (part_datap)[0+(__inc_part_n*(n))];
9311 0           (cpart_datap)[0+(__inc_cpart_n*(n))] = ki;
9312 0           (ptmp_datap)[0+(__inc_ptmp_k*(ki))] += 1;
9313             }} /* Close n */
9314 0           ni = 0;
9315 0 0         for (ki=0; ki < __privtrans->ind_sizes[0]; ki++) {
9316 0 0         if (!(ptmp_datap)[0+(__inc_ptmp_k*(ki))]) {
9317 0           for (; 1; ni = (ni+1)%__privtrans->ind_sizes[1]) {
9318 0           kj = (cpart_datap)[0+(__inc_cpart_n*(ni))];
9319 0 0         if ((ptmp_datap)[0+(__inc_ptmp_k*(kj))] > 1) break;
9320             }
9321 0           (cpart_datap)[0+(__inc_cpart_n*(ni))] = ki;
9322 0           (ptmp_datap)[0+(__inc_ptmp_k*(ki))] += 1;
9323 0           (ptmp_datap)[0+(__inc_ptmp_k*(kj))] -= 1;
9324             }
9325             }
9326 0 0         PDL_BROADCASTLOOP_END_checkpartitions_readdata
    0          
9327             }
9328 0           } break;
9329 0           case PDL_S: {
9330 0 0         PDL_DECLARE_PARAMS_checkpartitions_1(PDL_Short,S)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9331             {
9332             /*-- sanity check --*/
9333 0 0         if (__privtrans->ind_sizes[0] > __privtrans->ind_sizes[1]) {
9334 0           barf("checkpartitions(): number of partitions \"k\" (=%d) must be <= number of objects \"n\" (=%d)!\n",
9335 0           __privtrans->ind_sizes[0], __privtrans->ind_sizes[1]);
9336             }
9337 0 0         PDL_BROADCASTLOOP_START_checkpartitions_readdata
    0          
    0          
    0          
    0          
    0          
    0          
9338             int ni, ki, kj;
9339 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (ptmp_datap)[0+(__inc_ptmp_k*(k))] = 0; }} /* Close k */
9340 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
9341 0           ki = (part_datap)[0+(__inc_part_n*(n))];
9342 0           (cpart_datap)[0+(__inc_cpart_n*(n))] = ki;
9343 0           (ptmp_datap)[0+(__inc_ptmp_k*(ki))] += 1;
9344             }} /* Close n */
9345 0           ni = 0;
9346 0 0         for (ki=0; ki < __privtrans->ind_sizes[0]; ki++) {
9347 0 0         if (!(ptmp_datap)[0+(__inc_ptmp_k*(ki))]) {
9348 0           for (; 1; ni = (ni+1)%__privtrans->ind_sizes[1]) {
9349 0           kj = (cpart_datap)[0+(__inc_cpart_n*(ni))];
9350 0 0         if ((ptmp_datap)[0+(__inc_ptmp_k*(kj))] > 1) break;
9351             }
9352 0           (cpart_datap)[0+(__inc_cpart_n*(ni))] = ki;
9353 0           (ptmp_datap)[0+(__inc_ptmp_k*(ki))] += 1;
9354 0           (ptmp_datap)[0+(__inc_ptmp_k*(kj))] -= 1;
9355             }
9356             }
9357 0 0         PDL_BROADCASTLOOP_END_checkpartitions_readdata
    0          
9358             }
9359 0           } break;
9360 0           case PDL_US: {
9361 0 0         PDL_DECLARE_PARAMS_checkpartitions_1(PDL_Ushort,U)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9362             {
9363             /*-- sanity check --*/
9364 0 0         if (__privtrans->ind_sizes[0] > __privtrans->ind_sizes[1]) {
9365 0           barf("checkpartitions(): number of partitions \"k\" (=%d) must be <= number of objects \"n\" (=%d)!\n",
9366 0           __privtrans->ind_sizes[0], __privtrans->ind_sizes[1]);
9367             }
9368 0 0         PDL_BROADCASTLOOP_START_checkpartitions_readdata
    0          
    0          
    0          
    0          
    0          
    0          
9369             int ni, ki, kj;
9370 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (ptmp_datap)[0+(__inc_ptmp_k*(k))] = 0; }} /* Close k */
9371 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
9372 0           ki = (part_datap)[0+(__inc_part_n*(n))];
9373 0           (cpart_datap)[0+(__inc_cpart_n*(n))] = ki;
9374 0           (ptmp_datap)[0+(__inc_ptmp_k*(ki))] += 1;
9375             }} /* Close n */
9376 0           ni = 0;
9377 0 0         for (ki=0; ki < __privtrans->ind_sizes[0]; ki++) {
9378 0 0         if (!(ptmp_datap)[0+(__inc_ptmp_k*(ki))]) {
9379 0           for (; 1; ni = (ni+1)%__privtrans->ind_sizes[1]) {
9380 0           kj = (cpart_datap)[0+(__inc_cpart_n*(ni))];
9381 0 0         if ((ptmp_datap)[0+(__inc_ptmp_k*(kj))] > 1) break;
9382             }
9383 0           (cpart_datap)[0+(__inc_cpart_n*(ni))] = ki;
9384 0           (ptmp_datap)[0+(__inc_ptmp_k*(ki))] += 1;
9385 0           (ptmp_datap)[0+(__inc_ptmp_k*(kj))] -= 1;
9386             }
9387             }
9388 0 0         PDL_BROADCASTLOOP_END_checkpartitions_readdata
    0          
9389             }
9390 0           } break;
9391 0           case PDL_L: {
9392 0 0         PDL_DECLARE_PARAMS_checkpartitions_1(PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9393             {
9394             /*-- sanity check --*/
9395 0 0         if (__privtrans->ind_sizes[0] > __privtrans->ind_sizes[1]) {
9396 0           barf("checkpartitions(): number of partitions \"k\" (=%d) must be <= number of objects \"n\" (=%d)!\n",
9397 0           __privtrans->ind_sizes[0], __privtrans->ind_sizes[1]);
9398             }
9399 0 0         PDL_BROADCASTLOOP_START_checkpartitions_readdata
    0          
    0          
    0          
    0          
    0          
    0          
9400             int ni, ki, kj;
9401 0 0         {/* Open k */ PDL_EXPAND2(register PDL_Indx k=0, __k_stop=(__k_size)); for(; k<__k_stop; k+=1) { (ptmp_datap)[0+(__inc_ptmp_k*(k))] = 0; }} /* Close k */
9402 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
9403 0           ki = (part_datap)[0+(__inc_part_n*(n))];
9404 0           (cpart_datap)[0+(__inc_cpart_n*(n))] = ki;
9405 0           (ptmp_datap)[0+(__inc_ptmp_k*(ki))] += 1;
9406             }} /* Close n */
9407 0           ni = 0;
9408 0 0         for (ki=0; ki < __privtrans->ind_sizes[0]; ki++) {
9409 0 0         if (!(ptmp_datap)[0+(__inc_ptmp_k*(ki))]) {
9410 0           for (; 1; ni = (ni+1)%__privtrans->ind_sizes[1]) {
9411 0           kj = (cpart_datap)[0+(__inc_cpart_n*(ni))];
9412 0 0         if ((ptmp_datap)[0+(__inc_ptmp_k*(kj))] > 1) break;
9413             }
9414 0           (cpart_datap)[0+(__inc_cpart_n*(ni))] = ki;
9415 0           (ptmp_datap)[0+(__inc_ptmp_k*(ki))] += 1;
9416 0           (ptmp_datap)[0+(__inc_ptmp_k*(kj))] -= 1;
9417             }
9418             }
9419 0 0         PDL_BROADCASTLOOP_END_checkpartitions_readdata
    0          
9420             }
9421 0           } break;
9422 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in checkpartitions: unhandled datatype(%d), only handles (BSUL)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
9423             }
9424             #undef PDL_IF_BAD
9425 0           return PDL_err;
9426             }
9427              
9428             static pdl_datatypes pdl_checkpartitions_vtable_gentypes[] = { PDL_B, PDL_S, PDL_US, PDL_L, -1 };
9429             static PDL_Indx pdl_checkpartitions_vtable_realdims[] = { 1, 1, 1 };
9430             static char *pdl_checkpartitions_vtable_parnames[] = { "part","cpart","ptmp" };
9431             static short pdl_checkpartitions_vtable_parflags[] = {
9432             0,
9433             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE,
9434             PDL_PARAM_ISCREAT|PDL_PARAM_ISTEMP|PDL_PARAM_ISWRITE
9435             };
9436             static pdl_datatypes pdl_checkpartitions_vtable_partypes[] = { -1, -1, -1 };
9437             static PDL_Indx pdl_checkpartitions_vtable_realdims_starts[] = { 0, 1, 2 };
9438             static PDL_Indx pdl_checkpartitions_vtable_realdims_ind_ids[] = { 1, 1, 0 };
9439             static char *pdl_checkpartitions_vtable_indnames[] = { "k","n" };
9440             pdl_transvtable pdl_checkpartitions_vtable = {
9441             PDL_TRANS_DO_BROADCAST, 0, pdl_checkpartitions_vtable_gentypes, 1, 3, NULL /*CORE21*/,
9442             pdl_checkpartitions_vtable_realdims, pdl_checkpartitions_vtable_parnames,
9443             pdl_checkpartitions_vtable_parflags, pdl_checkpartitions_vtable_partypes,
9444             pdl_checkpartitions_vtable_realdims_starts, pdl_checkpartitions_vtable_realdims_ind_ids, 3,
9445             2, pdl_checkpartitions_vtable_indnames,
9446             pdl_checkpartitions_redodims, pdl_checkpartitions_readdata, NULL,
9447             NULL,
9448             sizeof(pdl_params_checkpartitions),"PDL::Cluster::checkpartitions"
9449             };
9450              
9451              
9452 0           pdl_error pdl_run_checkpartitions(pdl *part,pdl *cpart,int ksize) {
9453 0           pdl_error PDL_err = {0, NULL, 0};
9454 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
9455 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_checkpartitions_vtable);
9456 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
9457 0           pdl_params_checkpartitions *__params = __privtrans->params;
9458 0           __privtrans->pdls[0] = part;
9459 0           __privtrans->pdls[1] = cpart;
9460 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
9461 0           (__params->ksize) = (ksize); /* CType.get_copy */
9462 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
9463 0           return PDL_err;
9464             }
9465              
9466             #line 449 "lib/PDL/PP.pm"
9467             #include "pdlperl.h"
9468             #line 9469 "Cluster.xs"
9469              
9470             Core* PDL = NULL; /* Structure hold core C functions */
9471              
9472             MODULE = PDL::Cluster PACKAGE = PDL PREFIX=pdl_run_
9473              
9474             PROTOTYPES: DISABLE
9475              
9476              
9477             MODULE = PDL::Cluster PACKAGE = PDL::Cluster
9478              
9479              
9480             char *
9481             library_version()
9482             CODE:
9483 0           RETVAL = CLUSTERVERSION;
9484             OUTPUT:
9485             RETVAL
9486              
9487              
9488             MODULE = PDL::Cluster PACKAGE = PDL PREFIX=pdl_run_
9489              
9490              
9491             void
9492             pdl_run_cmean(a, b=PDL_XS_PERLINIT_initsv(b_SV))
9493             SV *b_SV = items > 1 ? ST(1) : NULL;
9494             PREINIT:
9495 2 50         PDL_XS_PREAMBLE((items == 2) ? 0 : 1);
    50          
    0          
    50          
    50          
    50          
    50          
    0          
    50          
    50          
9496             INPUT:
9497             pdl *a
9498             pdl *b
9499             PPCODE:
9500 2           PDL->barf_if_error(pdl_run_cmean(a,b));
9501 2 50         PDL_XS_RETURN(ST(0) = b_SV)
    50          
    50          
    50          
    0          
9502              
9503             void
9504             pdl_run_cmedian(a, b=PDL_XS_PERLINIT_initsv(b_SV))
9505             SV *b_SV = items > 1 ? ST(1) : NULL;
9506             PREINIT:
9507 2 50         PDL_XS_PREAMBLE((items == 2) ? 0 : 1);
    50          
    0          
    50          
    50          
    50          
    50          
    0          
    50          
    50          
9508             INPUT:
9509             pdl *a
9510             pdl *b
9511             PPCODE:
9512 2           PDL->barf_if_error(pdl_run_cmedian(a,b));
9513 2 50         PDL_XS_RETURN(ST(0) = b_SV)
    50          
    50          
    50          
    0          
9514              
9515             void
9516             pdl_run_calculate_weights(data, mask, weight, cutoff, exponent, oweights=oweights, distFlag=distFlag)
9517             SV *oweights_SV = (items == 7) ? ST(5) : NULL;
9518             SV *distFlag_SV = (items == 7) ? ST(6) : ST(5);
9519             PREINIT:
9520 0 0         PDL_XS_PREAMBLE((items == 7) ? 0 : 1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9521 0 0         if (!((items == 6) || (items == 7)))
    0          
9522 0           croak("Usage: PDL::calculate_weights(data,mask,weight,cutoff,exponent,[oweights],distFlag) (you may leave [outputs] and values with =defaults out of list)");
9523             INPUT:
9524             pdl *data
9525             pdl *mask
9526             pdl *weight
9527             pdl *cutoff
9528             pdl *exponent
9529             pdl *oweights=NO_INIT
9530             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9531             PPCODE:
9532 0 0         if (oweights_SV) { oweights = PDL_CORE_(SvPDLV)(oweights_SV); } else oweights = PDL_XS_PERLINIT_initsv(oweights_SV);
    0          
9533 0           PDL->barf_if_error(pdl_run_calculate_weights(data,mask,weight,cutoff,exponent,oweights,distFlag));
9534 0 0         PDL_XS_RETURN(ST(0) = oweights_SV)
    0          
    0          
    0          
    0          
9535              
9536             void
9537             pdl_run_clusterdistance(data, mask, weight, n1, n2, index1, index2, dist=dist, distFlag=distFlag, methodFlag=methodFlag)
9538             SV *dist_SV = (items == 10) ? ST(7) : NULL;
9539             SV *distFlag_SV = (items == 10) ? ST(8) : ST(7);
9540             SV *methodFlag_SV = (items == 10) ? ST(9) : ST(8);
9541             PREINIT:
9542 6 50         PDL_XS_PREAMBLE((items == 10) ? 0 : 1);
    50          
    0          
    50          
    50          
    50          
    50          
    0          
    50          
    50          
9543 6 50         if (!((items == 10) || (items == 9)))
    0          
9544 0           croak("Usage: PDL::clusterdistance(data,mask,weight,n1,n2,index1,index2,[dist],distFlag,methodFlag) (you may leave [outputs] and values with =defaults out of list)");
9545             INPUT:
9546             pdl *data
9547             pdl *mask
9548             pdl *weight
9549             pdl *n1
9550             pdl *n2
9551             pdl *index1
9552             pdl *index2
9553             pdl *dist=NO_INIT
9554             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9555             char *methodFlag; { methodFlag = (char *)SvPV_nolen(methodFlag_SV); }
9556             PPCODE:
9557 6 50         if (dist_SV) { dist = PDL_CORE_(SvPDLV)(dist_SV); } else dist = PDL_XS_PERLINIT_initsv(dist_SV);
    0          
9558 6           PDL->barf_if_error(pdl_run_clusterdistance(data,mask,weight,n1,n2,index1,index2,dist,distFlag,methodFlag));
9559 6 50         PDL_XS_RETURN(ST(0) = dist_SV)
    0          
    0          
    0          
    50          
9560              
9561             void
9562             pdl_run_distancematrix(data, mask, weight, dists=dists, distFlag=distFlag)
9563             SV *dists_SV = (items == 5) ? ST(3) : NULL;
9564             SV *distFlag_SV = (items == 5) ? ST(4) : ST(3);
9565             PREINIT:
9566 1 50         PDL_XS_PREAMBLE((items == 5) ? 0 : 1);
    50          
    0          
    50          
    50          
    50          
    50          
    0          
    50          
    50          
9567 1 50         if (!((items == 4) || (items == 5)))
    50          
9568 0           croak("Usage: PDL::distancematrix(data,mask,weight,[dists],distFlag) (you may leave [outputs] and values with =defaults out of list)");
9569             INPUT:
9570             pdl *data
9571             pdl *mask
9572             pdl *weight
9573             pdl *dists=NO_INIT
9574             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9575             PPCODE:
9576 1 50         if (dists_SV) { dists = PDL_CORE_(SvPDLV)(dists_SV); } else dists = PDL_XS_PERLINIT_initsv(dists_SV);
    0          
9577 1           PDL->barf_if_error(pdl_run_distancematrix(data,mask,weight,dists,distFlag));
9578 1 50         PDL_XS_RETURN(ST(0) = dists_SV)
    0          
    0          
    0          
    50          
9579              
9580             void
9581             pdl_run_getclustercentroids(data, mask, clusterids, cdata=cdata, cmask=cmask, ctrMethodFlag=ctrMethodFlag)
9582             SV *cdata_SV = (items == 6) ? ST(3) : NULL;
9583             SV *cmask_SV = (items == 6) ? ST(4) : NULL;
9584             SV *ctrMethodFlag_SV = (items == 6) ? ST(5) : ST(3);
9585             PREINIT:
9586 0 0         PDL_XS_PREAMBLE((items == 6) ? 0 : 2);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9587 0 0         if (!((items == 4) || (items == 6)))
    0          
9588 0           croak("Usage: PDL::getclustercentroids(data,mask,clusterids,[cdata],[cmask],ctrMethodFlag) (you may leave [outputs] and values with =defaults out of list)");
9589             INPUT:
9590             pdl *data
9591             pdl *mask
9592             pdl *clusterids
9593             pdl *cdata=NO_INIT
9594             pdl *cmask=NO_INIT
9595             char *ctrMethodFlag; { ctrMethodFlag = (char *)SvPV_nolen(ctrMethodFlag_SV); }
9596             PPCODE:
9597 0 0         if (cdata_SV) { cdata = PDL_CORE_(SvPDLV)(cdata_SV); } else cdata = PDL_XS_PERLINIT_initsv(cdata_SV);
    0          
9598 0 0         if (cmask_SV) { cmask = PDL_CORE_(SvPDLV)(cmask_SV); } else cmask = PDL_XS_PERLINIT_initsv(cmask_SV);
    0          
9599 0           PDL->barf_if_error(pdl_run_getclustercentroids(data,mask,clusterids,cdata,cmask,ctrMethodFlag));
9600 0 0         PDL_XS_RETURN(ST(0) = cdata_SV;ST(1) = cmask_SV)
    0          
    0          
    0          
    0          
9601              
9602             void
9603             pdl_run_getclustermedoids(distance, clusterids, centroids=PDL_XS_PERLINIT_initsv(centroids_SV), errors=PDL_XS_PERLINIT_initsv(errors_SV))
9604             SV *centroids_SV = items > 2 ? ST(2) : NULL;
9605             SV *errors_SV = items > 3 ? ST(3) : NULL;
9606             PREINIT:
9607 0 0         PDL_XS_PREAMBLE((items == 4) ? 0 : 2);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9608             INPUT:
9609             pdl *distance
9610             pdl *clusterids
9611             pdl *centroids
9612             pdl *errors
9613             PPCODE:
9614 0           PDL->barf_if_error(pdl_run_getclustermedoids(distance,clusterids,centroids,errors));
9615 0 0         PDL_XS_RETURN(ST(0) = centroids_SV;ST(1) = errors_SV)
    0          
    0          
    0          
    0          
9616              
9617             void
9618             pdl_run_kcluster(nclusters, data, mask, weight, npass, clusterids=clusterids, error=error, nfound=nfound, distFlag=distFlag, ctrMethodFlag=ctrMethodFlag)
9619             SV *clusterids_SV = (items == 10) ? ST(5) : NULL;
9620             SV *error_SV = (items == 10) ? ST(6) : NULL;
9621             SV *nfound_SV = (items == 10) ? ST(7) : NULL;
9622             SV *distFlag_SV = (items == 10) ? ST(8) : ST(5);
9623             SV *ctrMethodFlag_SV = (items == 10) ? ST(9) : ST(6);
9624             PREINIT:
9625 3 50         PDL_XS_PREAMBLE((items == 10) ? 0 : 3);
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9626 3 50         if (!((items == 10) || (items == 7)))
    0          
9627 0           croak("Usage: PDL::kcluster(nclusters,data,mask,weight,npass,[clusterids],[error],[nfound],distFlag,ctrMethodFlag) (you may leave [outputs] and values with =defaults out of list)");
9628             INPUT:
9629             pdl *nclusters
9630             pdl *data
9631             pdl *mask
9632             pdl *weight
9633             pdl *npass
9634             pdl *clusterids=NO_INIT
9635             pdl *error=NO_INIT
9636             pdl *nfound=NO_INIT
9637             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9638             char *ctrMethodFlag; { ctrMethodFlag = (char *)SvPV_nolen(ctrMethodFlag_SV); }
9639             PPCODE:
9640 3 50         if (clusterids_SV) { clusterids = PDL_CORE_(SvPDLV)(clusterids_SV); } else clusterids = PDL_XS_PERLINIT_initsv(clusterids_SV);
    0          
9641 3 50         if (error_SV) { error = PDL_CORE_(SvPDLV)(error_SV); } else error = PDL_XS_PERLINIT_initsv(error_SV);
    0          
9642 3 50         if (nfound_SV) { nfound = PDL_CORE_(SvPDLV)(nfound_SV); } else nfound = PDL_XS_PERLINIT_initsv(nfound_SV);
    0          
9643 3           PDL->barf_if_error(pdl_run_kcluster(nclusters,data,mask,weight,npass,clusterids,error,nfound,distFlag,ctrMethodFlag));
9644 3 50         PDL_XS_RETURN(ST(0) = clusterids_SV;ST(1) = error_SV;ST(2) = nfound_SV)
    0          
    0          
    0          
    50          
9645              
9646             void
9647             pdl_run_kmedoids(nclusters, distance, npass, clusterids=PDL_XS_PERLINIT_initsv(clusterids_SV), error=PDL_XS_PERLINIT_initsv(error_SV), nfound=PDL_XS_PERLINIT_initsv(nfound_SV))
9648             SV *clusterids_SV = items > 3 ? ST(3) : NULL;
9649             SV *error_SV = items > 4 ? ST(4) : NULL;
9650             SV *nfound_SV = items > 5 ? ST(5) : NULL;
9651             PREINIT:
9652 2 50         PDL_XS_PREAMBLE((items == 6) ? 0 : 3);
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9653             INPUT:
9654             pdl *nclusters
9655             pdl *distance
9656             pdl *npass
9657             pdl *clusterids
9658             pdl *error
9659             pdl *nfound
9660             PPCODE:
9661 2           PDL->barf_if_error(pdl_run_kmedoids(nclusters,distance,npass,clusterids,error,nfound));
9662 2 50         PDL_XS_RETURN(ST(0) = clusterids_SV;ST(1) = error_SV;ST(2) = nfound_SV)
    0          
    0          
    0          
    50          
9663              
9664             void
9665             pdl_run_treecluster(data, mask, weight, tree=tree, lnkdist=lnkdist, distFlag=distFlag, methodFlag=methodFlag)
9666             SV *tree_SV = (items == 7) ? ST(3) : NULL;
9667             SV *lnkdist_SV = (items == 7) ? ST(4) : NULL;
9668             SV *distFlag_SV = (items == 7) ? ST(5) : ST(3);
9669             SV *methodFlag_SV = (items == 7) ? ST(6) : ST(4);
9670             PREINIT:
9671 8 50         PDL_XS_PREAMBLE((items == 7) ? 0 : 2);
    50          
    50          
    0          
    50          
    50          
    50          
    50          
    0          
    50          
    50          
9672 8 50         if (!((items == 5) || (items == 7)))
    50          
9673 0           croak("Usage: PDL::treecluster(data,mask,weight,[tree],[lnkdist],distFlag,methodFlag) (you may leave [outputs] and values with =defaults out of list)");
9674             INPUT:
9675             pdl *data
9676             pdl *mask
9677             pdl *weight
9678             pdl *tree=NO_INIT
9679             pdl *lnkdist=NO_INIT
9680             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9681             char *methodFlag; { methodFlag = (char *)SvPV_nolen(methodFlag_SV); }
9682             PPCODE:
9683 8 50         if (tree_SV) { tree = PDL_CORE_(SvPDLV)(tree_SV); } else tree = PDL_XS_PERLINIT_initsv(tree_SV);
    0          
9684 8 50         if (lnkdist_SV) { lnkdist = PDL_CORE_(SvPDLV)(lnkdist_SV); } else lnkdist = PDL_XS_PERLINIT_initsv(lnkdist_SV);
    0          
9685 8           PDL->barf_if_error(pdl_run_treecluster(data,mask,weight,tree,lnkdist,distFlag,methodFlag));
9686 8 50         PDL_XS_RETURN(ST(0) = tree_SV;ST(1) = lnkdist_SV)
    0          
    0          
    0          
    50          
9687              
9688             void
9689             pdl_run_treeclusterd(data, mask, weight, distances, tree=tree, lnkdist=lnkdist, distFlag=distFlag, methodFlag=methodFlag)
9690             SV *tree_SV = (items == 8) ? ST(4) : NULL;
9691             SV *lnkdist_SV = (items == 8) ? ST(5) : NULL;
9692             SV *distFlag_SV = (items == 8) ? ST(6) : ST(4);
9693             SV *methodFlag_SV = (items == 8) ? ST(7) : ST(5);
9694             PREINIT:
9695 0 0         PDL_XS_PREAMBLE((items == 8) ? 0 : 2);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9696 0 0         if (!((items == 6) || (items == 8)))
    0          
9697 0           croak("Usage: PDL::treeclusterd(data,mask,weight,distances,[tree],[lnkdist],distFlag,methodFlag) (you may leave [outputs] and values with =defaults out of list)");
9698             INPUT:
9699             pdl *data
9700             pdl *mask
9701             pdl *weight
9702             pdl *distances
9703             pdl *tree=NO_INIT
9704             pdl *lnkdist=NO_INIT
9705             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9706             char *methodFlag; { methodFlag = (char *)SvPV_nolen(methodFlag_SV); }
9707             PPCODE:
9708 0 0         if (tree_SV) { tree = PDL_CORE_(SvPDLV)(tree_SV); } else tree = PDL_XS_PERLINIT_initsv(tree_SV);
    0          
9709 0 0         if (lnkdist_SV) { lnkdist = PDL_CORE_(SvPDLV)(lnkdist_SV); } else lnkdist = PDL_XS_PERLINIT_initsv(lnkdist_SV);
    0          
9710 0           PDL->barf_if_error(pdl_run_treeclusterd(data,mask,weight,distances,tree,lnkdist,distFlag,methodFlag));
9711 0 0         PDL_XS_RETURN(ST(0) = tree_SV;ST(1) = lnkdist_SV)
    0          
    0          
    0          
    0          
9712              
9713             void
9714             pdl_run_cuttree(tree, nclusters, clusterids=PDL_XS_PERLINIT_initsv(clusterids_SV))
9715             SV *clusterids_SV = items > 2 ? ST(2) : NULL;
9716             PREINIT:
9717 0 0         PDL_XS_PREAMBLE((items == 3) ? 0 : 1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9718             INPUT:
9719             pdl *tree
9720             pdl *nclusters
9721             pdl *clusterids
9722             PPCODE:
9723 0           PDL->barf_if_error(pdl_run_cuttree(tree,nclusters,clusterids));
9724 0 0         PDL_XS_RETURN(ST(0) = clusterids_SV)
    0          
    0          
    0          
    0          
9725              
9726             void
9727             pdl_run_somcluster(data, mask, weight, nxnodes, nynodes, inittau, niter, clusterids=clusterids, distFlag=distFlag)
9728             SV *clusterids_SV = (items == 9) ? ST(7) : NULL;
9729             SV *distFlag_SV = (items == 9) ? ST(8) : ST(7);
9730             PREINIT:
9731 2 50         PDL_XS_PREAMBLE((items == 9) ? 0 : 1);
    50          
    0          
    50          
    50          
    50          
    50          
    0          
    50          
    50          
9732 2 50         if (!((items == 8) || (items == 9)))
    50          
9733 0           croak("Usage: PDL::somcluster(data,mask,weight,nxnodes,nynodes,inittau,niter,[clusterids],distFlag) (you may leave [outputs] and values with =defaults out of list)");
9734             INPUT:
9735             pdl *data
9736             pdl *mask
9737             pdl *weight
9738             pdl *nxnodes
9739             pdl *nynodes
9740             pdl *inittau
9741             pdl *niter
9742             pdl *clusterids=NO_INIT
9743             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9744             PPCODE:
9745 2 50         if (clusterids_SV) { clusterids = PDL_CORE_(SvPDLV)(clusterids_SV); } else clusterids = PDL_XS_PERLINIT_initsv(clusterids_SV);
    0          
9746 2           PDL->barf_if_error(pdl_run_somcluster(data,mask,weight,nxnodes,nynodes,inittau,niter,clusterids,distFlag));
9747 2 50         PDL_XS_RETURN(ST(0) = clusterids_SV)
    0          
    0          
    0          
    50          
9748              
9749             void
9750             pdl_run_pca(U=PDL_XS_PERLINIT_initsv(U_SV), S=PDL_XS_PERLINIT_initsv(S_SV), V=PDL_XS_PERLINIT_initsv(V_SV))
9751             SV *U_SV = items > 0 ? ST(0) : NULL;
9752             SV *S_SV = items > 1 ? ST(1) : NULL;
9753             SV *V_SV = items > 2 ? ST(2) : NULL;
9754             PREINIT:
9755 0 0         PDL_XS_PREAMBLE((items == 3) ? 0 : 3);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9756             INPUT:
9757             pdl *U
9758             pdl *S
9759             pdl *V
9760             PPCODE:
9761 0           PDL->barf_if_error(pdl_run_pca(U,S,V));
9762 0 0         PDL_XS_RETURN(ST(0) = U_SV;ST(1) = S_SV;ST(2) = V_SV)
    0          
    0          
    0          
    0          
9763              
9764             void
9765             pdl_run_rowdistances(data, mask, weight, rowids1, rowids2, dist=dist, distFlag=distFlag)
9766             SV *dist_SV = (items == 7) ? ST(5) : NULL;
9767             SV *distFlag_SV = (items == 7) ? ST(6) : ST(5);
9768             PREINIT:
9769 0 0         PDL_XS_PREAMBLE((items == 7) ? 0 : 1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9770 0 0         if (!((items == 6) || (items == 7)))
    0          
9771 0           croak("Usage: PDL::rowdistances(data,mask,weight,rowids1,rowids2,[dist],distFlag) (you may leave [outputs] and values with =defaults out of list)");
9772             INPUT:
9773             pdl *data
9774             pdl *mask
9775             pdl *weight
9776             pdl *rowids1
9777             pdl *rowids2
9778             pdl *dist=NO_INIT
9779             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9780             PPCODE:
9781 0 0         if (dist_SV) { dist = PDL_CORE_(SvPDLV)(dist_SV); } else dist = PDL_XS_PERLINIT_initsv(dist_SV);
    0          
9782 0           PDL->barf_if_error(pdl_run_rowdistances(data,mask,weight,rowids1,rowids2,dist,distFlag));
9783 0 0         PDL_XS_RETURN(ST(0) = dist_SV)
    0          
    0          
    0          
    0          
9784              
9785             void
9786             pdl_run_clusterdistances(data, mask, weight, rowids, index2, dist=dist, distFlag=distFlag, methodFlag=methodFlag)
9787             SV *dist_SV = (items == 8) ? ST(5) : NULL;
9788             SV *distFlag_SV = (items == 8) ? ST(6) : ST(5);
9789             SV *methodFlag_SV = (items == 8) ? ST(7) : ST(6);
9790             PREINIT:
9791 0 0         PDL_XS_PREAMBLE((items == 8) ? 0 : 1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9792 0 0         if (!((items == 7) || (items == 8)))
    0          
9793 0           croak("Usage: PDL::clusterdistances(data,mask,weight,rowids,index2,[dist],distFlag,methodFlag) (you may leave [outputs] and values with =defaults out of list)");
9794             INPUT:
9795             pdl *data
9796             pdl *mask
9797             pdl *weight
9798             pdl *rowids
9799             pdl *index2
9800             pdl *dist=NO_INIT
9801             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9802             char *methodFlag; { methodFlag = (char *)SvPV_nolen(methodFlag_SV); }
9803             PPCODE:
9804 0 0         if (dist_SV) { dist = PDL_CORE_(SvPDLV)(dist_SV); } else dist = PDL_XS_PERLINIT_initsv(dist_SV);
    0          
9805 0           PDL->barf_if_error(pdl_run_clusterdistances(data,mask,weight,rowids,index2,dist,distFlag,methodFlag));
9806 0 0         PDL_XS_RETURN(ST(0) = dist_SV)
    0          
    0          
    0          
    0          
9807              
9808             void
9809             pdl_run_clustersizes(clusterids, clustersizes=PDL_XS_PERLINIT_initsv(clustersizes_SV))
9810             SV *clustersizes_SV = items > 1 ? ST(1) : NULL;
9811             PREINIT:
9812 1 50         PDL_XS_PREAMBLE((items == 2) ? 0 : 1);
    50          
    0          
    50          
    50          
    50          
    50          
    0          
    50          
    50          
9813             INPUT:
9814             pdl *clusterids
9815             pdl *clustersizes
9816             PPCODE:
9817 1           PDL->barf_if_error(pdl_run_clustersizes(clusterids,clustersizes));
9818 1 50         PDL_XS_RETURN(ST(0) = clustersizes_SV)
    0          
    0          
    0          
    50          
9819              
9820             void
9821             pdl_run_clusterelements(clusterids, clustersizes=PDL_XS_PERLINIT_initsv(clustersizes_SV), eltids=PDL_XS_PERLINIT_initsv(eltids_SV))
9822             SV *clustersizes_SV = items > 1 ? ST(1) : NULL;
9823             SV *eltids_SV = items > 2 ? ST(2) : NULL;
9824             PREINIT:
9825 1 50         PDL_XS_PREAMBLE((items == 3) ? 0 : 2);
    50          
    50          
    0          
    50          
    50          
    50          
    50          
    0          
    50          
    50          
9826             INPUT:
9827             pdl *clusterids
9828             pdl *clustersizes
9829             pdl *eltids
9830             PPCODE:
9831 1           PDL->barf_if_error(pdl_run_clusterelements(clusterids,clustersizes,eltids));
9832 1 50         PDL_XS_RETURN(ST(0) = clustersizes_SV;ST(1) = eltids_SV)
    0          
    0          
    0          
    50          
9833              
9834             void
9835             pdl_run_clusterelementmask(clusterids, eltmask=PDL_XS_PERLINIT_initsv(eltmask_SV))
9836             SV *eltmask_SV = items > 1 ? ST(1) : NULL;
9837             PREINIT:
9838 0 0         PDL_XS_PREAMBLE((items == 2) ? 0 : 1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9839             INPUT:
9840             pdl *clusterids
9841             pdl *eltmask
9842             PPCODE:
9843 0           PDL->barf_if_error(pdl_run_clusterelementmask(clusterids,eltmask));
9844 0 0         PDL_XS_RETURN(ST(0) = eltmask_SV)
    0          
    0          
    0          
    0          
9845              
9846             void
9847             pdl_run_clusterdistancematrix(data, mask, weight, rowids, clustersizes, eltids, dist=dist, distFlag=distFlag, methodFlag=methodFlag)
9848             SV *dist_SV = (items == 9) ? ST(6) : NULL;
9849             SV *distFlag_SV = (items == 9) ? ST(7) : ST(6);
9850             SV *methodFlag_SV = (items == 9) ? ST(8) : ST(7);
9851             PREINIT:
9852 5 50         PDL_XS_PREAMBLE((items == 9) ? 0 : 1);
    50          
    0          
    50          
    50          
    50          
    50          
    0          
    50          
    50          
9853 5 50         if (!((items == 8) || (items == 9)))
    50          
9854 0           croak("Usage: PDL::clusterdistancematrix(data,mask,weight,rowids,clustersizes,eltids,[dist],distFlag,methodFlag) (you may leave [outputs] and values with =defaults out of list)");
9855             INPUT:
9856             pdl *data
9857             pdl *mask
9858             pdl *weight
9859             pdl *rowids
9860             pdl *clustersizes
9861             pdl *eltids
9862             pdl *dist=NO_INIT
9863             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9864             char *methodFlag; { methodFlag = (char *)SvPV_nolen(methodFlag_SV); }
9865             PPCODE:
9866 5 50         if (dist_SV) { dist = PDL_CORE_(SvPDLV)(dist_SV); } else dist = PDL_XS_PERLINIT_initsv(dist_SV);
    0          
9867 5           PDL->barf_if_error(pdl_run_clusterdistancematrix(data,mask,weight,rowids,clustersizes,eltids,dist,distFlag,methodFlag));
9868 5 50         PDL_XS_RETURN(ST(0) = dist_SV)
    0          
    0          
    0          
    50          
9869              
9870             void
9871             pdl_run_clusterdistancematrixenc(data, mask, weight, clens1, crowids1, clens2, crowids2, dist=dist, distFlag=distFlag, methodFlag=methodFlag)
9872             SV *dist_SV = (items == 10) ? ST(7) : NULL;
9873             SV *distFlag_SV = (items == 10) ? ST(8) : ST(7);
9874             SV *methodFlag_SV = (items == 10) ? ST(9) : ST(8);
9875             PREINIT:
9876 0 0         PDL_XS_PREAMBLE((items == 10) ? 0 : 1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9877 0 0         if (!((items == 10) || (items == 9)))
    0          
9878 0           croak("Usage: PDL::clusterdistancematrixenc(data,mask,weight,clens1,crowids1,clens2,crowids2,[dist],distFlag,methodFlag) (you may leave [outputs] and values with =defaults out of list)");
9879             INPUT:
9880             pdl *data
9881             pdl *mask
9882             pdl *weight
9883             pdl *clens1
9884             pdl *crowids1
9885             pdl *clens2
9886             pdl *crowids2
9887             pdl *dist=NO_INIT
9888             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9889             char *methodFlag; { methodFlag = (char *)SvPV_nolen(methodFlag_SV); }
9890             PPCODE:
9891 0 0         if (dist_SV) { dist = PDL_CORE_(SvPDLV)(dist_SV); } else dist = PDL_XS_PERLINIT_initsv(dist_SV);
    0          
9892 0           PDL->barf_if_error(pdl_run_clusterdistancematrixenc(data,mask,weight,clens1,crowids1,clens2,crowids2,dist,distFlag,methodFlag));
9893 0 0         PDL_XS_RETURN(ST(0) = dist_SV)
    0          
    0          
    0          
    0          
9894              
9895             void
9896             pdl_run_clusterdistancesenc(data, mask, weight, coffsets1, crowids1, cwhich1, coffsets2, crowids2, cwhich2, dists=dists, distFlag=distFlag, methodFlag=methodFlag)
9897             SV *dists_SV = (items == 12) ? ST(9) : NULL;
9898             SV *distFlag_SV = (items == 12) ? ST(10) : ST(9);
9899             SV *methodFlag_SV = (items == 12) ? ST(11) : ST(10);
9900             PREINIT:
9901 0 0         PDL_XS_PREAMBLE((items == 12) ? 0 : 1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9902 0 0         if (!((items == 11) || (items == 12)))
    0          
9903 0           croak("Usage: PDL::clusterdistancesenc(data,mask,weight,coffsets1,crowids1,cwhich1,coffsets2,crowids2,cwhich2,[dists],distFlag,methodFlag) (you may leave [outputs] and values with =defaults out of list)");
9904             INPUT:
9905             pdl *data
9906             pdl *mask
9907             pdl *weight
9908             pdl *coffsets1
9909             pdl *crowids1
9910             pdl *cwhich1
9911             pdl *coffsets2
9912             pdl *crowids2
9913             pdl *cwhich2
9914             pdl *dists=NO_INIT
9915             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9916             char *methodFlag; { methodFlag = (char *)SvPV_nolen(methodFlag_SV); }
9917             PPCODE:
9918 0 0         if (dists_SV) { dists = PDL_CORE_(SvPDLV)(dists_SV); } else dists = PDL_XS_PERLINIT_initsv(dists_SV);
    0          
9919 0           PDL->barf_if_error(pdl_run_clusterdistancesenc(data,mask,weight,coffsets1,crowids1,cwhich1,coffsets2,crowids2,cwhich2,dists,distFlag,methodFlag));
9920 0 0         PDL_XS_RETURN(ST(0) = dists_SV)
    0          
    0          
    0          
    0          
9921              
9922             void
9923             pdl_run_getclusterwsum(data, mask, clusterwts, cdata=PDL_XS_PERLINIT_initsv(cdata_SV), cmask=PDL_XS_PERLINIT_initsv(cmask_SV))
9924             SV *cdata_SV = items > 3 ? ST(3) : NULL;
9925             SV *cmask_SV = items > 4 ? ST(4) : NULL;
9926             PREINIT:
9927 0 0         PDL_XS_PREAMBLE((items == 5) ? 0 : 2);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9928             INPUT:
9929             pdl *data
9930             pdl *mask
9931             pdl *clusterwts
9932             pdl *cdata
9933             pdl *cmask
9934             PPCODE:
9935 0           PDL->barf_if_error(pdl_run_getclusterwsum(data,mask,clusterwts,cdata,cmask));
9936 0 0         PDL_XS_RETURN(ST(0) = cdata_SV;ST(1) = cmask_SV)
    0          
    0          
    0          
    0          
9937              
9938             void
9939             pdl_run_attachtonearest(data, mask, weight, rowids, cdata, cmask, clusterids=clusterids, cdist=cdist, distFlag=distFlag, methodFlag=methodFlag)
9940             SV *clusterids_SV = (items == 10) ? ST(6) : NULL;
9941             SV *cdist_SV = (items == 10) ? ST(7) : NULL;
9942             SV *distFlag_SV = (items == 10) ? ST(8) : ST(6);
9943             SV *methodFlag_SV = (items == 10) ? ST(9) : ST(7);
9944             PREINIT:
9945 0 0         PDL_XS_PREAMBLE((items == 10) ? 0 : 2);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9946 0 0         if (!((items == 10) || (items == 8)))
    0          
9947 0           croak("Usage: PDL::attachtonearest(data,mask,weight,rowids,cdata,cmask,[clusterids],[cdist],distFlag,methodFlag) (you may leave [outputs] and values with =defaults out of list)");
9948             INPUT:
9949             pdl *data
9950             pdl *mask
9951             pdl *weight
9952             pdl *rowids
9953             pdl *cdata
9954             pdl *cmask
9955             pdl *clusterids=NO_INIT
9956             pdl *cdist=NO_INIT
9957             char *distFlag; { distFlag = (char *)SvPV_nolen(distFlag_SV); }
9958             char *methodFlag; { methodFlag = (char *)SvPV_nolen(methodFlag_SV); }
9959             PPCODE:
9960 0 0         if (clusterids_SV) { clusterids = PDL_CORE_(SvPDLV)(clusterids_SV); } else clusterids = PDL_XS_PERLINIT_initsv(clusterids_SV);
    0          
9961 0 0         if (cdist_SV) { cdist = PDL_CORE_(SvPDLV)(cdist_SV); } else cdist = PDL_XS_PERLINIT_initsv(cdist_SV);
    0          
9962 0           PDL->barf_if_error(pdl_run_attachtonearest(data,mask,weight,rowids,cdata,cmask,clusterids,cdist,distFlag,methodFlag));
9963 0 0         PDL_XS_RETURN(ST(0) = clusterids_SV;ST(1) = cdist_SV)
    0          
    0          
    0          
    0          
9964              
9965             void
9966             pdl_run_checkprototypes(protos, cprotos=cprotos, nsize=nsize)
9967             SV *cprotos_SV = (items == 3) ? ST(1) : NULL;
9968             SV *nsize_SV = (items == 3) ? ST(2) : ST(1);
9969             PREINIT:
9970 0 0         PDL_XS_PREAMBLE((items == 3) ? 0 : 1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9971 0 0         if (!((items == 2) || (items == 3)))
    0          
9972 0           croak("Usage: PDL::checkprototypes(protos,[cprotos],nsize) (you may leave [outputs] and values with =defaults out of list)");
9973             INPUT:
9974             pdl *protos
9975             pdl *cprotos=NO_INIT
9976             int nsize; { nsize = (int)SvIV(nsize_SV); }
9977             PPCODE:
9978 0 0         PDL_XS_INPLACE(protos, cprotos)
    0          
    0          
    0          
9979 0           PDL->barf_if_error(pdl_run_checkprototypes(protos,cprotos,nsize));
9980 0 0         PDL_XS_RETURN(ST(0) = cprotos_SV)
    0          
    0          
    0          
    0          
9981              
9982             void
9983             pdl_run_checkpartitions(part, cpart=cpart, ksize=ksize)
9984             SV *cpart_SV = (items == 3) ? ST(1) : NULL;
9985             SV *ksize_SV = (items == 3) ? ST(2) : ST(1);
9986             PREINIT:
9987 0 0         PDL_XS_PREAMBLE((items == 3) ? 0 : 1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
9988 0 0         if (!((items == 2) || (items == 3)))
    0          
9989 0           croak("Usage: PDL::checkpartitions(part,[cpart],ksize) (you may leave [outputs] and values with =defaults out of list)");
9990             INPUT:
9991             pdl *part
9992             pdl *cpart=NO_INIT
9993             int ksize; { ksize = (int)SvIV(ksize_SV); }
9994             PPCODE:
9995 0 0         PDL_XS_INPLACE(part, cpart)
    0          
    0          
    0          
9996 0           PDL->barf_if_error(pdl_run_checkpartitions(part,cpart,ksize));
9997 0 0         PDL_XS_RETURN(ST(0) = cpart_SV)
    0          
    0          
    0          
    0          
9998              
9999              
10000             #line 483 "lib/PDL/PP.pm"
10001             BOOT:
10002             /* Get pointer to structure of core shared C routines */
10003             /* make sure PDL::Core is loaded */
10004             #line 10005 "Cluster.xs"
10005 9           perl_require_pv ("PDL/Core.pm"); /* make sure PDL::Core is loaded */
10006             #ifndef aTHX_
10007             #define aTHX_
10008             #endif
10009 9 50         if (SvTRUE (ERRSV)) Perl_croak(aTHX_ "%s",SvPV_nolen (ERRSV));
    50          
    0          
10010 9           SV* CoreSV = perl_get_sv("PDL::SHARE",FALSE); /* var with core structure */
10011 9 50         if (!CoreSV)
10012 0           Perl_croak(aTHX_ "We require the PDL::Core module, which was not found");
10013 9 50         if (!(PDL = INT2PTR(Core*,SvIV( CoreSV )))) /* Core* value */
10014 0           Perl_croak(aTHX_ "Got NULL pointer for PDL");
10015 9 50         if (PDL->Version != PDL_CORE_VERSION)
10016 0           Perl_croak(aTHX_ "[PDL->Version: %ld PDL_CORE_VERSION: %ld XS_VERSION: %s] PDL::Cluster needs to be recompiled against the newly installed PDL", (long int)PDL->Version, (long int)PDL_CORE_VERSION, XS_VERSION);