File Coverage

pp-levmar_diff_.c
Criterion Covered Total %
statement 114 116 98.2
branch 114 216 52.7
condition n/a
subroutine n/a
pod n/a
total 228 332 68.6


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 levmar.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_Fit_Levmar
21             extern Core* PDL; /* Structure hold core C functions */
22             #line 23 "pp-levmar_diff_.c"
23              
24             #include
25             #include
26             #include
27             #include
28             #include "pdlperlfunc.h"
29             #include "levmar.h"
30              
31             #line 1846 "lib/PDL/PP.pm"
32             typedef struct pdl_params_levmar_diff_ {
33             #line 34 "pp-levmar_diff_.c"
34             IV funcn;
35             IV sfuncn;
36             IV indat;
37             int want_covar;
38             } pdl_params_levmar_diff_;
39              
40              
41             #line 1857 "lib/PDL/PP.pm"
42             pdl_error pdl_levmar_diff__redodims(pdl_trans *__privtrans) {
43             pdl_error PDL_err = {0, NULL, 0};
44             #line 45 "pp-levmar_diff_.c"
45 15           pdl_params_levmar_diff_ *__params = __privtrans->params; (void)__params;
46 15           __privtrans->ind_sizes[5] = 10;
47             #ifndef PDL_DECLARE_PARAMS_levmar_diff__0
48             #define PDL_DECLARE_PARAMS_levmar_diff__0(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_iopts,PDL_PPSYM_PARAM_iopts,PDL_TYPE_PARAM_returnval,PDL_PPSYM_PARAM_returnval) \
49             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, p, (__privtrans->pdls[0]), 0, PDL_PPSYM_OP) \
50             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, x, (__privtrans->pdls[1]), 0, PDL_PPSYM_OP) \
51             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, t, (__privtrans->pdls[2]), 0, PDL_PPSYM_OP) \
52             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_iopts, iopts, (__privtrans->pdls[3]), 0, PDL_PPSYM_PARAM_iopts) \
53             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, opts, (__privtrans->pdls[4]), 0, PDL_PPSYM_OP) \
54             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, work, (__privtrans->pdls[5]), 0, PDL_PPSYM_OP) \
55             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, covar, (__privtrans->pdls[6]), 0, PDL_PPSYM_OP) \
56             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_returnval, returnval, (__privtrans->pdls[7]), 0, PDL_PPSYM_PARAM_returnval) \
57             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, pout, (__privtrans->pdls[8]), 0, PDL_PPSYM_OP) \
58             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, info, (__privtrans->pdls[9]), 0, PDL_PPSYM_OP)
59             #endif
60             #define PDL_IF_BAD(t,f) f
61 15           switch (__privtrans->__datatype) { /* Start generic switch */
62 5           case PDL_F: {
63 5 50         PDL_DECLARE_PARAMS_levmar_diff__0(PDL_Float,F,PDL_Long,L,PDL_Long,L)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
64             {
65 5           int im = __privtrans->pdls[0]->dims[0];
66 5           int in = __privtrans->pdls[1]->dims[0];
67 5           int min = 4*in + 4*im + in*im + im*im;
68 5           int inw = __privtrans->pdls[5]->dims[0];
69 5           __privtrans->ind_sizes[6] = inw >= min ? inw : min;
70             }
71 5           } break;
72 10           case PDL_D: {
73 10 50         PDL_DECLARE_PARAMS_levmar_diff__0(PDL_Double,D,PDL_Long,L,PDL_Long,L)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
74             {
75 10           int im = __privtrans->pdls[0]->dims[0];
76 10           int in = __privtrans->pdls[1]->dims[0];
77 10           int min = 4*in + 4*im + in*im + im*im;
78 10           int inw = __privtrans->pdls[5]->dims[0];
79 10           __privtrans->ind_sizes[6] = inw >= min ? inw : min;
80             }
81 10           } break;
82 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in levmar_diff_: unhandled datatype(%d), only handles (FD)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
83             }
84             #undef PDL_IF_BAD
85              
86 15 50         PDL_RETERROR(PDL_err, PDL->redodims_default(__privtrans));
87 15           return PDL_err;
88             }
89              
90              
91             #line 1857 "lib/PDL/PP.pm"
92             pdl_error pdl_levmar_diff__readdata(pdl_trans *__privtrans) {
93             pdl_error PDL_err = {0, NULL, 0};
94             #line 95 "pp-levmar_diff_.c"
95 15           pdl_params_levmar_diff_ *__params = __privtrans->params; (void)__params;
96 15           register PDL_Indx __m_size = __privtrans->ind_sizes[1];
97 15 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in levmar_diff_:" "broadcast.incs NULL");
98             /* broadcastloop declarations */
99             int __brcloopval;
100             register PDL_Indx __tind0,__tind1; /* counters along dim */
101 15           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
102             /* dims here are how many steps along those dims */
103 15           register PDL_Indx __tinc0_p = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
104 15           register PDL_Indx __tinc0_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
105 15           register PDL_Indx __tinc0_t = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
106 15           register PDL_Indx __tinc0_iopts = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
107 15           register PDL_Indx __tinc0_opts = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
108 15           register PDL_Indx __tinc0_work = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
109 15           register PDL_Indx __tinc0_covar = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,0);
110 15           register PDL_Indx __tinc0_returnval = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,0);
111 15           register PDL_Indx __tinc0_pout = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,8,0);
112 15           register PDL_Indx __tinc0_info = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,9,0);
113 15           register PDL_Indx __tinc1_p = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
114 15           register PDL_Indx __tinc1_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
115 15           register PDL_Indx __tinc1_t = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
116 15           register PDL_Indx __tinc1_iopts = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
117 15           register PDL_Indx __tinc1_opts = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
118 15           register PDL_Indx __tinc1_work = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
119 15           register PDL_Indx __tinc1_covar = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,6,1);
120 15           register PDL_Indx __tinc1_returnval = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,7,1);
121 15           register PDL_Indx __tinc1_pout = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,8,1);
122 15           register PDL_Indx __tinc1_info = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,9,1);
123             #define PDL_BROADCASTLOOP_START_levmar_diff__readdata PDL_BROADCASTLOOP_START( \
124             readdata, \
125             __privtrans->broadcast, \
126             __privtrans->vtable, \
127             p_datap += __offsp[0]; \
128             x_datap += __offsp[1]; \
129             t_datap += __offsp[2]; \
130             iopts_datap += __offsp[3]; \
131             opts_datap += __offsp[4]; \
132             work_datap += __offsp[5]; \
133             covar_datap += __offsp[6]; \
134             returnval_datap += __offsp[7]; \
135             pout_datap += __offsp[8]; \
136             info_datap += __offsp[9]; \
137             , \
138             ( ,p_datap += __tinc1_p - __tinc0_p * __tdims0 \
139             ,x_datap += __tinc1_x - __tinc0_x * __tdims0 \
140             ,t_datap += __tinc1_t - __tinc0_t * __tdims0 \
141             ,iopts_datap += __tinc1_iopts - __tinc0_iopts * __tdims0 \
142             ,opts_datap += __tinc1_opts - __tinc0_opts * __tdims0 \
143             ,work_datap += __tinc1_work - __tinc0_work * __tdims0 \
144             ,covar_datap += __tinc1_covar - __tinc0_covar * __tdims0 \
145             ,returnval_datap += __tinc1_returnval - __tinc0_returnval * __tdims0 \
146             ,pout_datap += __tinc1_pout - __tinc0_pout * __tdims0 \
147             ,info_datap += __tinc1_info - __tinc0_info * __tdims0 \
148             ), \
149             ( ,p_datap += __tinc0_p \
150             ,x_datap += __tinc0_x \
151             ,t_datap += __tinc0_t \
152             ,iopts_datap += __tinc0_iopts \
153             ,opts_datap += __tinc0_opts \
154             ,work_datap += __tinc0_work \
155             ,covar_datap += __tinc0_covar \
156             ,returnval_datap += __tinc0_returnval \
157             ,pout_datap += __tinc0_pout \
158             ,info_datap += __tinc0_info \
159             ) \
160             )
161             #define PDL_BROADCASTLOOP_END_levmar_diff__readdata PDL_BROADCASTLOOP_END( \
162             __privtrans->broadcast, \
163             p_datap -= __tinc1_p * __tdims1 + __offsp[0]; \
164             x_datap -= __tinc1_x * __tdims1 + __offsp[1]; \
165             t_datap -= __tinc1_t * __tdims1 + __offsp[2]; \
166             iopts_datap -= __tinc1_iopts * __tdims1 + __offsp[3]; \
167             opts_datap -= __tinc1_opts * __tdims1 + __offsp[4]; \
168             work_datap -= __tinc1_work * __tdims1 + __offsp[5]; \
169             covar_datap -= __tinc1_covar * __tdims1 + __offsp[6]; \
170             returnval_datap -= __tinc1_returnval * __tdims1 + __offsp[7]; \
171             pout_datap -= __tinc1_pout * __tdims1 + __offsp[8]; \
172             info_datap -= __tinc1_info * __tdims1 + __offsp[9]; \
173             )
174 15           register PDL_Indx __inc_covar_m0 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,6,0)]; (void)__inc_covar_m0;register PDL_Indx __inc_covar_m1 = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,6,1)]; (void)__inc_covar_m1;
175 15           register PDL_Indx __inc_info_q = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,9,0)]; (void)__inc_info_q;
176 15           register PDL_Indx __inc_iopts_in = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_iopts_in;
177 15           register PDL_Indx __inc_opts_nopt = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_opts_nopt;
178 15           register PDL_Indx __inc_p_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_p_m;
179 15           register PDL_Indx __inc_pout_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,8,0)]; (void)__inc_pout_m;
180 15           register PDL_Indx __inc_t_nt = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_t_nt;
181 15           register PDL_Indx __inc_work_wn = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_work_wn;
182 15           register PDL_Indx __inc_x_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_x_n;
183             #ifndef PDL_DECLARE_PARAMS_levmar_diff__1
184             #define PDL_DECLARE_PARAMS_levmar_diff__1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_iopts,PDL_PPSYM_PARAM_iopts,PDL_TYPE_PARAM_returnval,PDL_PPSYM_PARAM_returnval) \
185             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, p, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
186             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, x, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
187             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, t, (__privtrans->pdls[2]), 1, PDL_PPSYM_OP) \
188             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_iopts, iopts, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_iopts) \
189             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, opts, (__privtrans->pdls[4]), 1, PDL_PPSYM_OP) \
190             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, work, (__privtrans->pdls[5]), 1, PDL_PPSYM_OP) \
191             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, covar, (__privtrans->pdls[6]), 1, PDL_PPSYM_OP) \
192             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_returnval, returnval, (__privtrans->pdls[7]), 1, PDL_PPSYM_PARAM_returnval) \
193             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, pout, (__privtrans->pdls[8]), 1, PDL_PPSYM_OP) \
194             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, info, (__privtrans->pdls[9]), 1, PDL_PPSYM_OP)
195             #endif
196             #define PDL_IF_BAD(t,f) f
197 15           switch (__privtrans->__datatype) { /* Start generic switch */
198 5           case PDL_F: {
199 5 50         PDL_DECLARE_PARAMS_levmar_diff__1(PDL_Float,F,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          
    50          
    50          
    50          
    50          
    50          
    50          
200             {
201             int * iopts;
202             int maxits;
203 5           void * tfuncn = (void *) __params->funcn;
204 5           void * tsfuncn = (void *) __params->sfuncn;
205             PDL_Float * pcovar;
206             PDL_Float * pwork;
207             ;
208 5           DFP *dat = (void *) __params->indat;
209 5           DFP_check( &dat, PDL_F, __privtrans->ind_sizes[1], __privtrans->ind_sizes[2],
210 5           __privtrans->ind_sizes[4], t_datap );
211 20 50         PDL_BROADCASTLOOP_START_levmar_diff__readdata
    50          
    50          
    50          
    50          
    100          
    100          
212 16 100         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
213 11           (pout_datap)[0+(__inc_pout_m*(m))] = (p_datap)[0+(__inc_p_m*(m))];
214             }} /* Close m */
215 5           iopts = iopts_datap;
216 5 50         pcovar = __params->want_covar == 1 ? covar_datap : NULL;
217 5           pwork = 0 == 1 ? NULL : work_datap;
218 5           maxits = iopts[0]; /* for clarity. we hope optimized away */
219 5           (returnval_datap)[0] = slevmar_dif (
220             tsfuncn ,
221 5           pout_datap, x_datap, __privtrans->ind_sizes[1], __privtrans->ind_sizes[2],
222             maxits, opts_datap, info_datap, pwork, pcovar, dat);
223 5 50         PDL_BROADCASTLOOP_END_levmar_diff__readdata
    50          
224             }
225 5           } break;
226 10           case PDL_D: {
227 10 50         PDL_DECLARE_PARAMS_levmar_diff__1(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          
    50          
    50          
    50          
    50          
    50          
    50          
228             {
229             int * iopts;
230             int maxits;
231 10           void * tfuncn = (void *) __params->funcn;
232 10           void * tsfuncn = (void *) __params->sfuncn;
233             PDL_Double * pcovar;
234             PDL_Double * pwork;
235             ;
236 10           DFP *dat = (void *) __params->indat;
237 10           DFP_check( &dat, PDL_D, __privtrans->ind_sizes[1], __privtrans->ind_sizes[2],
238 10           __privtrans->ind_sizes[4], t_datap );
239 43 50         PDL_BROADCASTLOOP_START_levmar_diff__readdata
    50          
    50          
    50          
    50          
    100          
    100          
240 43 100         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
241 30           (pout_datap)[0+(__inc_pout_m*(m))] = (p_datap)[0+(__inc_p_m*(m))];
242             }} /* Close m */
243 13           iopts = iopts_datap;
244 13 50         pcovar = __params->want_covar == 1 ? covar_datap : NULL;
245 13           pwork = 0 == 1 ? NULL : work_datap;
246 13           maxits = iopts[0]; /* for clarity. we hope optimized away */
247 13           (returnval_datap)[0] = dlevmar_dif (
248             tfuncn ,
249 13           pout_datap, x_datap, __privtrans->ind_sizes[1], __privtrans->ind_sizes[2],
250             maxits, opts_datap, info_datap, pwork, pcovar, dat);
251 10 50         PDL_BROADCASTLOOP_END_levmar_diff__readdata
    50          
252             }
253 10           } break;
254 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in levmar_diff_: unhandled datatype(%d), only handles (FD)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
255             }
256             #undef PDL_IF_BAD
257 15           return PDL_err;
258             }
259              
260             static pdl_datatypes pdl_levmar_diff__vtable_gentypes[] = { PDL_F, PDL_D, -1 };
261             static PDL_Indx pdl_levmar_diff__vtable_realdims[] = { 1, 1, 1, 1, 1, 1, 2, 0, 1, 1 };
262             static char *pdl_levmar_diff__vtable_parnames[] = { "p","x","t","iopts","opts","work","covar","returnval","pout","info" };
263             static short pdl_levmar_diff__vtable_parflags[] = {
264             0,
265             PDL_PARAM_ISPHYS,
266             PDL_PARAM_ISPHYS,
267             PDL_PARAM_ISPHYS|PDL_PARAM_ISTYPED,
268             PDL_PARAM_ISPHYS,
269             PDL_PARAM_ISCREAT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTEMP|PDL_PARAM_ISWRITE,
270             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISWRITE,
271             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
272             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISWRITE,
273             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISPHYS|PDL_PARAM_ISWRITE
274             };
275             static pdl_datatypes pdl_levmar_diff__vtable_partypes[] = { -1, -1, -1, PDL_L, -1, -1, -1, PDL_L, -1, -1 };
276             static PDL_Indx pdl_levmar_diff__vtable_realdims_starts[] = { 0, 1, 2, 3, 4, 5, 6, 8, 8, 9 };
277             static PDL_Indx pdl_levmar_diff__vtable_realdims_ind_ids[] = { 1, 2, 4, 0, 3, 6, 1, 1, 1, 5 };
278             static char *pdl_levmar_diff__vtable_indnames[] = { "in","m","n","nopt","nt","q","wn" };
279             pdl_transvtable pdl_levmar_diff__vtable = {
280             PDL_TRANS_DO_BROADCAST, 0, pdl_levmar_diff__vtable_gentypes, 5, 10, NULL /*CORE21*/,
281             pdl_levmar_diff__vtable_realdims, pdl_levmar_diff__vtable_parnames,
282             pdl_levmar_diff__vtable_parflags, pdl_levmar_diff__vtable_partypes,
283             pdl_levmar_diff__vtable_realdims_starts, pdl_levmar_diff__vtable_realdims_ind_ids, 10,
284             7, pdl_levmar_diff__vtable_indnames,
285             pdl_levmar_diff__redodims, pdl_levmar_diff__readdata, NULL,
286             NULL,
287             sizeof(pdl_params_levmar_diff_),"PDL::Fit::Levmar::levmar_diff_"
288             };
289              
290              
291 15           pdl_error pdl_run_levmar_diff_(pdl *p,pdl *x,pdl *t,pdl *iopts,pdl *opts,pdl *covar,pdl *returnval,pdl *pout,pdl *info,IV funcn,IV sfuncn,IV indat,int want_covar) {
292 15           pdl_error PDL_err = {0, NULL, 0};
293 15 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
294 15           pdl_trans *__privtrans = PDL->create_trans(&pdl_levmar_diff__vtable);
295 15 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
296 15           pdl_params_levmar_diff_ *__params = __privtrans->params;
297 15           __privtrans->pdls[0] = p;
298 15           __privtrans->pdls[1] = x;
299 15           __privtrans->pdls[2] = t;
300 15           __privtrans->pdls[3] = iopts;
301 15           __privtrans->pdls[4] = opts;
302 15           __privtrans->pdls[6] = covar;
303 15           __privtrans->pdls[7] = returnval;
304 15           __privtrans->pdls[8] = pout;
305 15           __privtrans->pdls[9] = info;
306 15 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
307 15           (__params->funcn) = (funcn); /* CType.get_copy */
308 15           (__params->sfuncn) = (sfuncn); /* CType.get_copy */
309 15           (__params->indat) = (indat); /* CType.get_copy */
310 15           (__params->want_covar) = (want_covar); /* CType.get_copy */
311 15 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
312 15           return PDL_err;
313             }