1# This file was automatically generated by SWIG (http://www.swig.org).
2# Version 4.0.1
3#
4# Do not make changes to this file unless you know what you are doing--modify
5# the SWIG interface file instead.
6
7package Math::GSL::Multifit;
8use base qw(Exporter);
9use base qw(DynaLoader);
10package Math::GSL::Multifitc;
11bootstrap Math::GSL::Multifit;
12package Math::GSL::Multifit;
13@EXPORT = qw();
14
15# ---------- BASE METHODS -------------
16
17package Math::GSL::Multifit;
18
19sub TIEHASH {
20    my ($classname,$obj) = @_;
21    return bless $obj, $classname;
22}
23
24sub CLEAR { }
25
26sub FIRSTKEY { }
27
28sub NEXTKEY { }
29
30sub FETCH {
31    my ($self,$field) = @_;
32    my $member_func = "swig_${field}_get";
33    $self->$member_func();
34}
35
36sub STORE {
37    my ($self,$field,$newval) = @_;
38    my $member_func = "swig_${field}_set";
39    $self->$member_func($newval);
40}
41
42sub this {
43    my $ptr = shift;
44    return tied(%$ptr);
45}
46
47
48# ------- FUNCTION WRAPPERS --------
49
50package Math::GSL::Multifit;
51
52*gsl_error = *Math::GSL::Multifitc::gsl_error;
53*gsl_stream_printf = *Math::GSL::Multifitc::gsl_stream_printf;
54*gsl_strerror = *Math::GSL::Multifitc::gsl_strerror;
55*gsl_set_error_handler = *Math::GSL::Multifitc::gsl_set_error_handler;
56*gsl_set_error_handler_off = *Math::GSL::Multifitc::gsl_set_error_handler_off;
57*gsl_set_stream_handler = *Math::GSL::Multifitc::gsl_set_stream_handler;
58*gsl_set_stream = *Math::GSL::Multifitc::gsl_set_stream;
59*gsl_permutation_alloc = *Math::GSL::Multifitc::gsl_permutation_alloc;
60*gsl_permutation_calloc = *Math::GSL::Multifitc::gsl_permutation_calloc;
61*gsl_permutation_init = *Math::GSL::Multifitc::gsl_permutation_init;
62*gsl_permutation_free = *Math::GSL::Multifitc::gsl_permutation_free;
63*gsl_permutation_memcpy = *Math::GSL::Multifitc::gsl_permutation_memcpy;
64*gsl_permutation_fread = *Math::GSL::Multifitc::gsl_permutation_fread;
65*gsl_permutation_fwrite = *Math::GSL::Multifitc::gsl_permutation_fwrite;
66*gsl_permutation_fscanf = *Math::GSL::Multifitc::gsl_permutation_fscanf;
67*gsl_permutation_fprintf = *Math::GSL::Multifitc::gsl_permutation_fprintf;
68*gsl_permutation_size = *Math::GSL::Multifitc::gsl_permutation_size;
69*gsl_permutation_data = *Math::GSL::Multifitc::gsl_permutation_data;
70*gsl_permutation_swap = *Math::GSL::Multifitc::gsl_permutation_swap;
71*gsl_permutation_valid = *Math::GSL::Multifitc::gsl_permutation_valid;
72*gsl_permutation_reverse = *Math::GSL::Multifitc::gsl_permutation_reverse;
73*gsl_permutation_inverse = *Math::GSL::Multifitc::gsl_permutation_inverse;
74*gsl_permutation_next = *Math::GSL::Multifitc::gsl_permutation_next;
75*gsl_permutation_prev = *Math::GSL::Multifitc::gsl_permutation_prev;
76*gsl_permutation_mul = *Math::GSL::Multifitc::gsl_permutation_mul;
77*gsl_permutation_linear_to_canonical = *Math::GSL::Multifitc::gsl_permutation_linear_to_canonical;
78*gsl_permutation_canonical_to_linear = *Math::GSL::Multifitc::gsl_permutation_canonical_to_linear;
79*gsl_permutation_inversions = *Math::GSL::Multifitc::gsl_permutation_inversions;
80*gsl_permutation_linear_cycles = *Math::GSL::Multifitc::gsl_permutation_linear_cycles;
81*gsl_permutation_canonical_cycles = *Math::GSL::Multifitc::gsl_permutation_canonical_cycles;
82*gsl_permutation_get = *Math::GSL::Multifitc::gsl_permutation_get;
83*gsl_multifit_linear_alloc = *Math::GSL::Multifitc::gsl_multifit_linear_alloc;
84*gsl_multifit_linear_free = *Math::GSL::Multifitc::gsl_multifit_linear_free;
85*gsl_multifit_linear = *Math::GSL::Multifitc::gsl_multifit_linear;
86*gsl_multifit_linear_tsvd = *Math::GSL::Multifitc::gsl_multifit_linear_tsvd;
87*gsl_multifit_linear_svd = *Math::GSL::Multifitc::gsl_multifit_linear_svd;
88*gsl_multifit_linear_bsvd = *Math::GSL::Multifitc::gsl_multifit_linear_bsvd;
89*gsl_multifit_linear_rank = *Math::GSL::Multifitc::gsl_multifit_linear_rank;
90*gsl_multifit_linear_solve = *Math::GSL::Multifitc::gsl_multifit_linear_solve;
91*gsl_multifit_linear_applyW = *Math::GSL::Multifitc::gsl_multifit_linear_applyW;
92*gsl_multifit_linear_stdform1 = *Math::GSL::Multifitc::gsl_multifit_linear_stdform1;
93*gsl_multifit_linear_wstdform1 = *Math::GSL::Multifitc::gsl_multifit_linear_wstdform1;
94*gsl_multifit_linear_L_decomp = *Math::GSL::Multifitc::gsl_multifit_linear_L_decomp;
95*gsl_multifit_linear_stdform2 = *Math::GSL::Multifitc::gsl_multifit_linear_stdform2;
96*gsl_multifit_linear_wstdform2 = *Math::GSL::Multifitc::gsl_multifit_linear_wstdform2;
97*gsl_multifit_linear_genform1 = *Math::GSL::Multifitc::gsl_multifit_linear_genform1;
98*gsl_multifit_linear_genform2 = *Math::GSL::Multifitc::gsl_multifit_linear_genform2;
99*gsl_multifit_linear_wgenform2 = *Math::GSL::Multifitc::gsl_multifit_linear_wgenform2;
100*gsl_multifit_linear_lreg = *Math::GSL::Multifitc::gsl_multifit_linear_lreg;
101*gsl_multifit_linear_lcurve = *Math::GSL::Multifitc::gsl_multifit_linear_lcurve;
102*gsl_multifit_linear_lcurvature = *Math::GSL::Multifitc::gsl_multifit_linear_lcurvature;
103*gsl_multifit_linear_lcorner = *Math::GSL::Multifitc::gsl_multifit_linear_lcorner;
104*gsl_multifit_linear_lcorner2 = *Math::GSL::Multifitc::gsl_multifit_linear_lcorner2;
105*gsl_multifit_linear_Lk = *Math::GSL::Multifitc::gsl_multifit_linear_Lk;
106*gsl_multifit_linear_Lsobolev = *Math::GSL::Multifitc::gsl_multifit_linear_Lsobolev;
107*gsl_multifit_wlinear = *Math::GSL::Multifitc::gsl_multifit_wlinear;
108*gsl_multifit_wlinear_tsvd = *Math::GSL::Multifitc::gsl_multifit_wlinear_tsvd;
109*gsl_multifit_wlinear_svd = *Math::GSL::Multifitc::gsl_multifit_wlinear_svd;
110*gsl_multifit_wlinear_usvd = *Math::GSL::Multifitc::gsl_multifit_wlinear_usvd;
111*gsl_multifit_linear_est = *Math::GSL::Multifitc::gsl_multifit_linear_est;
112*gsl_multifit_linear_rcond = *Math::GSL::Multifitc::gsl_multifit_linear_rcond;
113*gsl_multifit_linear_residuals = *Math::GSL::Multifitc::gsl_multifit_linear_residuals;
114*gsl_multifit_linear_gcv_init = *Math::GSL::Multifitc::gsl_multifit_linear_gcv_init;
115*gsl_multifit_linear_gcv_curve = *Math::GSL::Multifitc::gsl_multifit_linear_gcv_curve;
116*gsl_multifit_linear_gcv_min = *Math::GSL::Multifitc::gsl_multifit_linear_gcv_min;
117*gsl_multifit_linear_gcv_calc = *Math::GSL::Multifitc::gsl_multifit_linear_gcv_calc;
118*gsl_multifit_linear_gcv = *Math::GSL::Multifitc::gsl_multifit_linear_gcv;
119*gsl_multifit_robust_alloc = *Math::GSL::Multifitc::gsl_multifit_robust_alloc;
120*gsl_multifit_robust_free = *Math::GSL::Multifitc::gsl_multifit_robust_free;
121*gsl_multifit_robust_tune = *Math::GSL::Multifitc::gsl_multifit_robust_tune;
122*gsl_multifit_robust_maxiter = *Math::GSL::Multifitc::gsl_multifit_robust_maxiter;
123*gsl_multifit_robust_name = *Math::GSL::Multifitc::gsl_multifit_robust_name;
124*gsl_multifit_robust_statistics = *Math::GSL::Multifitc::gsl_multifit_robust_statistics;
125*gsl_multifit_robust_weights = *Math::GSL::Multifitc::gsl_multifit_robust_weights;
126*gsl_multifit_robust = *Math::GSL::Multifitc::gsl_multifit_robust;
127*gsl_multifit_robust_est = *Math::GSL::Multifitc::gsl_multifit_robust_est;
128*gsl_multifit_robust_residuals = *Math::GSL::Multifitc::gsl_multifit_robust_residuals;
129*gsl_multifit_gradient = *Math::GSL::Multifitc::gsl_multifit_gradient;
130*gsl_multifit_covar = *Math::GSL::Multifitc::gsl_multifit_covar;
131*gsl_multifit_covar_QRPT = *Math::GSL::Multifitc::gsl_multifit_covar_QRPT;
132*gsl_multifit_fsolver_alloc = *Math::GSL::Multifitc::gsl_multifit_fsolver_alloc;
133*gsl_multifit_fsolver_free = *Math::GSL::Multifitc::gsl_multifit_fsolver_free;
134*gsl_multifit_fsolver_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_set;
135*gsl_multifit_fsolver_iterate = *Math::GSL::Multifitc::gsl_multifit_fsolver_iterate;
136*gsl_multifit_fsolver_driver = *Math::GSL::Multifitc::gsl_multifit_fsolver_driver;
137*gsl_multifit_fsolver_name = *Math::GSL::Multifitc::gsl_multifit_fsolver_name;
138*gsl_multifit_fsolver_position = *Math::GSL::Multifitc::gsl_multifit_fsolver_position;
139*gsl_multifit_fdfsolver_alloc = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_alloc;
140*gsl_multifit_fdfsolver_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_set;
141*gsl_multifit_fdfsolver_wset = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_wset;
142*gsl_multifit_fdfsolver_iterate = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_iterate;
143*gsl_multifit_fdfsolver_driver = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_driver;
144*gsl_multifit_fdfsolver_jac = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_jac;
145*gsl_multifit_fdfsolver_free = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_free;
146*gsl_multifit_fdfsolver_name = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_name;
147*gsl_multifit_fdfsolver_position = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_position;
148*gsl_multifit_fdfsolver_residual = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_residual;
149*gsl_multifit_fdfsolver_niter = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_niter;
150*gsl_multifit_eval_wf = *Math::GSL::Multifitc::gsl_multifit_eval_wf;
151*gsl_multifit_eval_wdf = *Math::GSL::Multifitc::gsl_multifit_eval_wdf;
152*gsl_multifit_fdfsolver_test = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_test;
153*gsl_multifit_test_delta = *Math::GSL::Multifitc::gsl_multifit_test_delta;
154*gsl_multifit_test_gradient = *Math::GSL::Multifitc::gsl_multifit_test_gradient;
155*gsl_multifit_fdfsolver_dif_df = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_dif_df;
156*gsl_multifit_fdfridge_alloc = *Math::GSL::Multifitc::gsl_multifit_fdfridge_alloc;
157*gsl_multifit_fdfridge_free = *Math::GSL::Multifitc::gsl_multifit_fdfridge_free;
158*gsl_multifit_fdfridge_name = *Math::GSL::Multifitc::gsl_multifit_fdfridge_name;
159*gsl_multifit_fdfridge_position = *Math::GSL::Multifitc::gsl_multifit_fdfridge_position;
160*gsl_multifit_fdfridge_residual = *Math::GSL::Multifitc::gsl_multifit_fdfridge_residual;
161*gsl_multifit_fdfridge_niter = *Math::GSL::Multifitc::gsl_multifit_fdfridge_niter;
162*gsl_multifit_fdfridge_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_set;
163*gsl_multifit_fdfridge_wset = *Math::GSL::Multifitc::gsl_multifit_fdfridge_wset;
164*gsl_multifit_fdfridge_set2 = *Math::GSL::Multifitc::gsl_multifit_fdfridge_set2;
165*gsl_multifit_fdfridge_wset2 = *Math::GSL::Multifitc::gsl_multifit_fdfridge_wset2;
166*gsl_multifit_fdfridge_set3 = *Math::GSL::Multifitc::gsl_multifit_fdfridge_set3;
167*gsl_multifit_fdfridge_wset3 = *Math::GSL::Multifitc::gsl_multifit_fdfridge_wset3;
168*gsl_multifit_fdfridge_iterate = *Math::GSL::Multifitc::gsl_multifit_fdfridge_iterate;
169*gsl_multifit_fdfridge_driver = *Math::GSL::Multifitc::gsl_multifit_fdfridge_driver;
170
171############# Class : Math::GSL::Multifit::gsl_function_struct ##############
172
173package Math::GSL::Multifit::gsl_function_struct;
174use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
175@ISA = qw( Math::GSL::Multifit );
176%OWNER = ();
177%ITERATORS = ();
178*swig_function_get = *Math::GSL::Multifitc::gsl_function_struct_function_get;
179*swig_function_set = *Math::GSL::Multifitc::gsl_function_struct_function_set;
180*swig_params_get = *Math::GSL::Multifitc::gsl_function_struct_params_get;
181*swig_params_set = *Math::GSL::Multifitc::gsl_function_struct_params_set;
182sub new {
183    my $pkg = shift;
184    my $self = Math::GSL::Multifitc::new_gsl_function_struct(@_);
185    bless $self, $pkg if defined($self);
186}
187
188sub DESTROY {
189    return unless $_[0]->isa('HASH');
190    my $self = tied(%{$_[0]});
191    return unless defined $self;
192    delete $ITERATORS{$self};
193    if (exists $OWNER{$self}) {
194        Math::GSL::Multifitc::delete_gsl_function_struct($self);
195        delete $OWNER{$self};
196    }
197}
198
199sub DISOWN {
200    my $self = shift;
201    my $ptr = tied(%$self);
202    delete $OWNER{$ptr};
203}
204
205sub ACQUIRE {
206    my $self = shift;
207    my $ptr = tied(%$self);
208    $OWNER{$ptr} = 1;
209}
210
211
212############# Class : Math::GSL::Multifit::gsl_function_fdf_struct ##############
213
214package Math::GSL::Multifit::gsl_function_fdf_struct;
215use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
216@ISA = qw( Math::GSL::Multifit );
217%OWNER = ();
218%ITERATORS = ();
219*swig_f_get = *Math::GSL::Multifitc::gsl_function_fdf_struct_f_get;
220*swig_f_set = *Math::GSL::Multifitc::gsl_function_fdf_struct_f_set;
221*swig_df_get = *Math::GSL::Multifitc::gsl_function_fdf_struct_df_get;
222*swig_df_set = *Math::GSL::Multifitc::gsl_function_fdf_struct_df_set;
223*swig_fdf_get = *Math::GSL::Multifitc::gsl_function_fdf_struct_fdf_get;
224*swig_fdf_set = *Math::GSL::Multifitc::gsl_function_fdf_struct_fdf_set;
225*swig_params_get = *Math::GSL::Multifitc::gsl_function_fdf_struct_params_get;
226*swig_params_set = *Math::GSL::Multifitc::gsl_function_fdf_struct_params_set;
227sub new {
228    my $pkg = shift;
229    my $self = Math::GSL::Multifitc::new_gsl_function_fdf_struct(@_);
230    bless $self, $pkg if defined($self);
231}
232
233sub DESTROY {
234    return unless $_[0]->isa('HASH');
235    my $self = tied(%{$_[0]});
236    return unless defined $self;
237    delete $ITERATORS{$self};
238    if (exists $OWNER{$self}) {
239        Math::GSL::Multifitc::delete_gsl_function_fdf_struct($self);
240        delete $OWNER{$self};
241    }
242}
243
244sub DISOWN {
245    my $self = shift;
246    my $ptr = tied(%$self);
247    delete $OWNER{$ptr};
248}
249
250sub ACQUIRE {
251    my $self = shift;
252    my $ptr = tied(%$self);
253    $OWNER{$ptr} = 1;
254}
255
256
257############# Class : Math::GSL::Multifit::gsl_function_vec_struct ##############
258
259package Math::GSL::Multifit::gsl_function_vec_struct;
260use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
261@ISA = qw( Math::GSL::Multifit );
262%OWNER = ();
263%ITERATORS = ();
264*swig_function_get = *Math::GSL::Multifitc::gsl_function_vec_struct_function_get;
265*swig_function_set = *Math::GSL::Multifitc::gsl_function_vec_struct_function_set;
266*swig_params_get = *Math::GSL::Multifitc::gsl_function_vec_struct_params_get;
267*swig_params_set = *Math::GSL::Multifitc::gsl_function_vec_struct_params_set;
268sub new {
269    my $pkg = shift;
270    my $self = Math::GSL::Multifitc::new_gsl_function_vec_struct(@_);
271    bless $self, $pkg if defined($self);
272}
273
274sub DESTROY {
275    return unless $_[0]->isa('HASH');
276    my $self = tied(%{$_[0]});
277    return unless defined $self;
278    delete $ITERATORS{$self};
279    if (exists $OWNER{$self}) {
280        Math::GSL::Multifitc::delete_gsl_function_vec_struct($self);
281        delete $OWNER{$self};
282    }
283}
284
285sub DISOWN {
286    my $self = shift;
287    my $ptr = tied(%$self);
288    delete $OWNER{$ptr};
289}
290
291sub ACQUIRE {
292    my $self = shift;
293    my $ptr = tied(%$self);
294    $OWNER{$ptr} = 1;
295}
296
297
298############# Class : Math::GSL::Multifit::gsl_permutation_struct ##############
299
300package Math::GSL::Multifit::gsl_permutation_struct;
301use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
302@ISA = qw( Math::GSL::Multifit );
303%OWNER = ();
304%ITERATORS = ();
305*swig_size_get = *Math::GSL::Multifitc::gsl_permutation_struct_size_get;
306*swig_size_set = *Math::GSL::Multifitc::gsl_permutation_struct_size_set;
307*swig_data_get = *Math::GSL::Multifitc::gsl_permutation_struct_data_get;
308*swig_data_set = *Math::GSL::Multifitc::gsl_permutation_struct_data_set;
309sub new {
310    my $pkg = shift;
311    my $self = Math::GSL::Multifitc::new_gsl_permutation_struct(@_);
312    bless $self, $pkg if defined($self);
313}
314
315sub DESTROY {
316    return unless $_[0]->isa('HASH');
317    my $self = tied(%{$_[0]});
318    return unless defined $self;
319    delete $ITERATORS{$self};
320    if (exists $OWNER{$self}) {
321        Math::GSL::Multifitc::delete_gsl_permutation_struct($self);
322        delete $OWNER{$self};
323    }
324}
325
326sub DISOWN {
327    my $self = shift;
328    my $ptr = tied(%$self);
329    delete $OWNER{$ptr};
330}
331
332sub ACQUIRE {
333    my $self = shift;
334    my $ptr = tied(%$self);
335    $OWNER{$ptr} = 1;
336}
337
338
339############# Class : Math::GSL::Multifit::gsl_multifit_linear_workspace ##############
340
341package Math::GSL::Multifit::gsl_multifit_linear_workspace;
342use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
343@ISA = qw( Math::GSL::Multifit );
344%OWNER = ();
345%ITERATORS = ();
346*swig_nmax_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_nmax_get;
347*swig_nmax_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_nmax_set;
348*swig_pmax_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_pmax_get;
349*swig_pmax_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_pmax_set;
350*swig_n_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_n_get;
351*swig_n_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_n_set;
352*swig_p_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_p_get;
353*swig_p_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_p_set;
354*swig_A_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_A_get;
355*swig_A_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_A_set;
356*swig_Q_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_Q_get;
357*swig_Q_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_Q_set;
358*swig_QSI_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_QSI_get;
359*swig_QSI_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_QSI_set;
360*swig_S_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_S_get;
361*swig_S_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_S_set;
362*swig_t_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_t_get;
363*swig_t_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_t_set;
364*swig_xt_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_xt_get;
365*swig_xt_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_xt_set;
366*swig_D_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_D_get;
367*swig_D_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_D_set;
368*swig_rcond_get = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_rcond_get;
369*swig_rcond_set = *Math::GSL::Multifitc::gsl_multifit_linear_workspace_rcond_set;
370sub new {
371    my $pkg = shift;
372    my $self = Math::GSL::Multifitc::new_gsl_multifit_linear_workspace(@_);
373    bless $self, $pkg if defined($self);
374}
375
376sub DESTROY {
377    return unless $_[0]->isa('HASH');
378    my $self = tied(%{$_[0]});
379    return unless defined $self;
380    delete $ITERATORS{$self};
381    if (exists $OWNER{$self}) {
382        Math::GSL::Multifitc::delete_gsl_multifit_linear_workspace($self);
383        delete $OWNER{$self};
384    }
385}
386
387sub DISOWN {
388    my $self = shift;
389    my $ptr = tied(%$self);
390    delete $OWNER{$ptr};
391}
392
393sub ACQUIRE {
394    my $self = shift;
395    my $ptr = tied(%$self);
396    $OWNER{$ptr} = 1;
397}
398
399
400############# Class : Math::GSL::Multifit::gsl_multifit_robust_type ##############
401
402package Math::GSL::Multifit::gsl_multifit_robust_type;
403use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
404@ISA = qw( Math::GSL::Multifit );
405%OWNER = ();
406%ITERATORS = ();
407*swig_name_get = *Math::GSL::Multifitc::gsl_multifit_robust_type_name_get;
408*swig_name_set = *Math::GSL::Multifitc::gsl_multifit_robust_type_name_set;
409*swig_wfun_get = *Math::GSL::Multifitc::gsl_multifit_robust_type_wfun_get;
410*swig_wfun_set = *Math::GSL::Multifitc::gsl_multifit_robust_type_wfun_set;
411*swig_psi_deriv_get = *Math::GSL::Multifitc::gsl_multifit_robust_type_psi_deriv_get;
412*swig_psi_deriv_set = *Math::GSL::Multifitc::gsl_multifit_robust_type_psi_deriv_set;
413*swig_tuning_default_get = *Math::GSL::Multifitc::gsl_multifit_robust_type_tuning_default_get;
414*swig_tuning_default_set = *Math::GSL::Multifitc::gsl_multifit_robust_type_tuning_default_set;
415sub new {
416    my $pkg = shift;
417    my $self = Math::GSL::Multifitc::new_gsl_multifit_robust_type(@_);
418    bless $self, $pkg if defined($self);
419}
420
421sub DESTROY {
422    return unless $_[0]->isa('HASH');
423    my $self = tied(%{$_[0]});
424    return unless defined $self;
425    delete $ITERATORS{$self};
426    if (exists $OWNER{$self}) {
427        Math::GSL::Multifitc::delete_gsl_multifit_robust_type($self);
428        delete $OWNER{$self};
429    }
430}
431
432sub DISOWN {
433    my $self = shift;
434    my $ptr = tied(%$self);
435    delete $OWNER{$ptr};
436}
437
438sub ACQUIRE {
439    my $self = shift;
440    my $ptr = tied(%$self);
441    $OWNER{$ptr} = 1;
442}
443
444
445############# Class : Math::GSL::Multifit::gsl_multifit_robust_stats ##############
446
447package Math::GSL::Multifit::gsl_multifit_robust_stats;
448use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
449@ISA = qw( Math::GSL::Multifit );
450%OWNER = ();
451%ITERATORS = ();
452*swig_sigma_ols_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sigma_ols_get;
453*swig_sigma_ols_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sigma_ols_set;
454*swig_sigma_mad_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sigma_mad_get;
455*swig_sigma_mad_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sigma_mad_set;
456*swig_sigma_rob_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sigma_rob_get;
457*swig_sigma_rob_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sigma_rob_set;
458*swig_sigma_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sigma_get;
459*swig_sigma_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sigma_set;
460*swig_Rsq_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_Rsq_get;
461*swig_Rsq_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_Rsq_set;
462*swig_adj_Rsq_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_adj_Rsq_get;
463*swig_adj_Rsq_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_adj_Rsq_set;
464*swig_rmse_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_rmse_get;
465*swig_rmse_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_rmse_set;
466*swig_sse_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sse_get;
467*swig_sse_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_sse_set;
468*swig_dof_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_dof_get;
469*swig_dof_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_dof_set;
470*swig_numit_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_numit_get;
471*swig_numit_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_numit_set;
472*swig_weights_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_weights_get;
473*swig_weights_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_weights_set;
474*swig_r_get = *Math::GSL::Multifitc::gsl_multifit_robust_stats_r_get;
475*swig_r_set = *Math::GSL::Multifitc::gsl_multifit_robust_stats_r_set;
476sub new {
477    my $pkg = shift;
478    my $self = Math::GSL::Multifitc::new_gsl_multifit_robust_stats(@_);
479    bless $self, $pkg if defined($self);
480}
481
482sub DESTROY {
483    return unless $_[0]->isa('HASH');
484    my $self = tied(%{$_[0]});
485    return unless defined $self;
486    delete $ITERATORS{$self};
487    if (exists $OWNER{$self}) {
488        Math::GSL::Multifitc::delete_gsl_multifit_robust_stats($self);
489        delete $OWNER{$self};
490    }
491}
492
493sub DISOWN {
494    my $self = shift;
495    my $ptr = tied(%$self);
496    delete $OWNER{$ptr};
497}
498
499sub ACQUIRE {
500    my $self = shift;
501    my $ptr = tied(%$self);
502    $OWNER{$ptr} = 1;
503}
504
505
506############# Class : Math::GSL::Multifit::gsl_multifit_robust_workspace ##############
507
508package Math::GSL::Multifit::gsl_multifit_robust_workspace;
509use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
510@ISA = qw( Math::GSL::Multifit );
511%OWNER = ();
512%ITERATORS = ();
513*swig_n_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_n_get;
514*swig_n_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_n_set;
515*swig_p_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_p_get;
516*swig_p_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_p_set;
517*swig_numit_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_numit_get;
518*swig_numit_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_numit_set;
519*swig_maxiter_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_maxiter_get;
520*swig_maxiter_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_maxiter_set;
521*swig_type_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_type_get;
522*swig_type_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_type_set;
523*swig_tune_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_tune_get;
524*swig_tune_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_tune_set;
525*swig_r_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_r_get;
526*swig_r_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_r_set;
527*swig_weights_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_weights_get;
528*swig_weights_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_weights_set;
529*swig_c_prev_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_c_prev_get;
530*swig_c_prev_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_c_prev_set;
531*swig_resfac_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_resfac_get;
532*swig_resfac_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_resfac_set;
533*swig_psi_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_psi_get;
534*swig_psi_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_psi_set;
535*swig_dpsi_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_dpsi_get;
536*swig_dpsi_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_dpsi_set;
537*swig_QSI_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_QSI_get;
538*swig_QSI_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_QSI_set;
539*swig_D_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_D_get;
540*swig_D_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_D_set;
541*swig_workn_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_workn_get;
542*swig_workn_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_workn_set;
543*swig_stats_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_stats_get;
544*swig_stats_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_stats_set;
545*swig_multifit_p_get = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_multifit_p_get;
546*swig_multifit_p_set = *Math::GSL::Multifitc::gsl_multifit_robust_workspace_multifit_p_set;
547sub new {
548    my $pkg = shift;
549    my $self = Math::GSL::Multifitc::new_gsl_multifit_robust_workspace(@_);
550    bless $self, $pkg if defined($self);
551}
552
553sub DESTROY {
554    return unless $_[0]->isa('HASH');
555    my $self = tied(%{$_[0]});
556    return unless defined $self;
557    delete $ITERATORS{$self};
558    if (exists $OWNER{$self}) {
559        Math::GSL::Multifitc::delete_gsl_multifit_robust_workspace($self);
560        delete $OWNER{$self};
561    }
562}
563
564sub DISOWN {
565    my $self = shift;
566    my $ptr = tied(%$self);
567    delete $OWNER{$ptr};
568}
569
570sub ACQUIRE {
571    my $self = shift;
572    my $ptr = tied(%$self);
573    $OWNER{$ptr} = 1;
574}
575
576
577############# Class : Math::GSL::Multifit::gsl_multifit_function_struct ##############
578
579package Math::GSL::Multifit::gsl_multifit_function_struct;
580use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
581@ISA = qw( Math::GSL::Multifit );
582%OWNER = ();
583%ITERATORS = ();
584*swig_f_get = *Math::GSL::Multifitc::gsl_multifit_function_struct_f_get;
585*swig_f_set = *Math::GSL::Multifitc::gsl_multifit_function_struct_f_set;
586*swig_n_get = *Math::GSL::Multifitc::gsl_multifit_function_struct_n_get;
587*swig_n_set = *Math::GSL::Multifitc::gsl_multifit_function_struct_n_set;
588*swig_p_get = *Math::GSL::Multifitc::gsl_multifit_function_struct_p_get;
589*swig_p_set = *Math::GSL::Multifitc::gsl_multifit_function_struct_p_set;
590*swig_params_get = *Math::GSL::Multifitc::gsl_multifit_function_struct_params_get;
591*swig_params_set = *Math::GSL::Multifitc::gsl_multifit_function_struct_params_set;
592sub new {
593    my $pkg = shift;
594    my $self = Math::GSL::Multifitc::new_gsl_multifit_function_struct(@_);
595    bless $self, $pkg if defined($self);
596}
597
598sub DESTROY {
599    return unless $_[0]->isa('HASH');
600    my $self = tied(%{$_[0]});
601    return unless defined $self;
602    delete $ITERATORS{$self};
603    if (exists $OWNER{$self}) {
604        Math::GSL::Multifitc::delete_gsl_multifit_function_struct($self);
605        delete $OWNER{$self};
606    }
607}
608
609sub DISOWN {
610    my $self = shift;
611    my $ptr = tied(%$self);
612    delete $OWNER{$ptr};
613}
614
615sub ACQUIRE {
616    my $self = shift;
617    my $ptr = tied(%$self);
618    $OWNER{$ptr} = 1;
619}
620
621
622############# Class : Math::GSL::Multifit::gsl_multifit_fsolver_type ##############
623
624package Math::GSL::Multifit::gsl_multifit_fsolver_type;
625use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
626@ISA = qw( Math::GSL::Multifit );
627%OWNER = ();
628%ITERATORS = ();
629*swig_name_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_name_get;
630*swig_name_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_name_set;
631*swig_size_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_size_get;
632*swig_size_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_size_set;
633*swig_alloc_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_alloc_get;
634*swig_alloc_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_alloc_set;
635*swig_set_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_set_get;
636*swig_set_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_set_set;
637*swig_iterate_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_iterate_get;
638*swig_iterate_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_iterate_set;
639*swig_free_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_free_get;
640*swig_free_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_free_set;
641sub new {
642    my $pkg = shift;
643    my $self = Math::GSL::Multifitc::new_gsl_multifit_fsolver_type(@_);
644    bless $self, $pkg if defined($self);
645}
646
647sub DESTROY {
648    return unless $_[0]->isa('HASH');
649    my $self = tied(%{$_[0]});
650    return unless defined $self;
651    delete $ITERATORS{$self};
652    if (exists $OWNER{$self}) {
653        Math::GSL::Multifitc::delete_gsl_multifit_fsolver_type($self);
654        delete $OWNER{$self};
655    }
656}
657
658sub DISOWN {
659    my $self = shift;
660    my $ptr = tied(%$self);
661    delete $OWNER{$ptr};
662}
663
664sub ACQUIRE {
665    my $self = shift;
666    my $ptr = tied(%$self);
667    $OWNER{$ptr} = 1;
668}
669
670
671############# Class : Math::GSL::Multifit::gsl_multifit_fsolver ##############
672
673package Math::GSL::Multifit::gsl_multifit_fsolver;
674use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
675@ISA = qw( Math::GSL::Multifit );
676%OWNER = ();
677%ITERATORS = ();
678*swig_type_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_get;
679*swig_type_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_type_set;
680*swig_function_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_function_get;
681*swig_function_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_function_set;
682*swig_x_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_x_get;
683*swig_x_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_x_set;
684*swig_f_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_f_get;
685*swig_f_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_f_set;
686*swig_dx_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_dx_get;
687*swig_dx_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_dx_set;
688*swig_state_get = *Math::GSL::Multifitc::gsl_multifit_fsolver_state_get;
689*swig_state_set = *Math::GSL::Multifitc::gsl_multifit_fsolver_state_set;
690sub new {
691    my $pkg = shift;
692    my $self = Math::GSL::Multifitc::new_gsl_multifit_fsolver(@_);
693    bless $self, $pkg if defined($self);
694}
695
696sub DESTROY {
697    return unless $_[0]->isa('HASH');
698    my $self = tied(%{$_[0]});
699    return unless defined $self;
700    delete $ITERATORS{$self};
701    if (exists $OWNER{$self}) {
702        Math::GSL::Multifitc::delete_gsl_multifit_fsolver($self);
703        delete $OWNER{$self};
704    }
705}
706
707sub DISOWN {
708    my $self = shift;
709    my $ptr = tied(%$self);
710    delete $OWNER{$ptr};
711}
712
713sub ACQUIRE {
714    my $self = shift;
715    my $ptr = tied(%$self);
716    $OWNER{$ptr} = 1;
717}
718
719
720############# Class : Math::GSL::Multifit::gsl_multifit_function_fdf_struct ##############
721
722package Math::GSL::Multifit::gsl_multifit_function_fdf_struct;
723use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
724@ISA = qw( Math::GSL::Multifit );
725%OWNER = ();
726%ITERATORS = ();
727*swig_f_get = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_f_get;
728*swig_f_set = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_f_set;
729*swig_df_get = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_df_get;
730*swig_df_set = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_df_set;
731*swig_fdf_get = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_fdf_get;
732*swig_fdf_set = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_fdf_set;
733*swig_n_get = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_n_get;
734*swig_n_set = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_n_set;
735*swig_p_get = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_p_get;
736*swig_p_set = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_p_set;
737*swig_params_get = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_params_get;
738*swig_params_set = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_params_set;
739*swig_nevalf_get = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_nevalf_get;
740*swig_nevalf_set = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_nevalf_set;
741*swig_nevaldf_get = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_nevaldf_get;
742*swig_nevaldf_set = *Math::GSL::Multifitc::gsl_multifit_function_fdf_struct_nevaldf_set;
743sub new {
744    my $pkg = shift;
745    my $self = Math::GSL::Multifitc::new_gsl_multifit_function_fdf_struct(@_);
746    bless $self, $pkg if defined($self);
747}
748
749sub DESTROY {
750    return unless $_[0]->isa('HASH');
751    my $self = tied(%{$_[0]});
752    return unless defined $self;
753    delete $ITERATORS{$self};
754    if (exists $OWNER{$self}) {
755        Math::GSL::Multifitc::delete_gsl_multifit_function_fdf_struct($self);
756        delete $OWNER{$self};
757    }
758}
759
760sub DISOWN {
761    my $self = shift;
762    my $ptr = tied(%$self);
763    delete $OWNER{$ptr};
764}
765
766sub ACQUIRE {
767    my $self = shift;
768    my $ptr = tied(%$self);
769    $OWNER{$ptr} = 1;
770}
771
772
773############# Class : Math::GSL::Multifit::gsl_multifit_fdfsolver_type ##############
774
775package Math::GSL::Multifit::gsl_multifit_fdfsolver_type;
776use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
777@ISA = qw( Math::GSL::Multifit );
778%OWNER = ();
779%ITERATORS = ();
780*swig_name_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_name_get;
781*swig_name_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_name_set;
782*swig_size_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_size_get;
783*swig_size_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_size_set;
784*swig_alloc_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_alloc_get;
785*swig_alloc_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_alloc_set;
786*swig_set_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_set_get;
787*swig_set_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_set_set;
788*swig_iterate_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_iterate_get;
789*swig_iterate_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_iterate_set;
790*swig_gradient_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_gradient_get;
791*swig_gradient_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_gradient_set;
792*swig_jac_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_jac_get;
793*swig_jac_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_jac_set;
794*swig_free_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_free_get;
795*swig_free_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_free_set;
796sub new {
797    my $pkg = shift;
798    my $self = Math::GSL::Multifitc::new_gsl_multifit_fdfsolver_type(@_);
799    bless $self, $pkg if defined($self);
800}
801
802sub DESTROY {
803    return unless $_[0]->isa('HASH');
804    my $self = tied(%{$_[0]});
805    return unless defined $self;
806    delete $ITERATORS{$self};
807    if (exists $OWNER{$self}) {
808        Math::GSL::Multifitc::delete_gsl_multifit_fdfsolver_type($self);
809        delete $OWNER{$self};
810    }
811}
812
813sub DISOWN {
814    my $self = shift;
815    my $ptr = tied(%$self);
816    delete $OWNER{$ptr};
817}
818
819sub ACQUIRE {
820    my $self = shift;
821    my $ptr = tied(%$self);
822    $OWNER{$ptr} = 1;
823}
824
825
826############# Class : Math::GSL::Multifit::gsl_multifit_fdfsolver ##############
827
828package Math::GSL::Multifit::gsl_multifit_fdfsolver;
829use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
830@ISA = qw( Math::GSL::Multifit );
831%OWNER = ();
832%ITERATORS = ();
833*swig_type_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_get;
834*swig_type_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_type_set;
835*swig_fdf_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_fdf_get;
836*swig_fdf_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_fdf_set;
837*swig_x_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_x_get;
838*swig_x_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_x_set;
839*swig_f_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_f_get;
840*swig_f_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_f_set;
841*swig_dx_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_dx_get;
842*swig_dx_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_dx_set;
843*swig_g_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_g_get;
844*swig_g_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_g_set;
845*swig_sqrt_wts_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_sqrt_wts_get;
846*swig_sqrt_wts_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_sqrt_wts_set;
847*swig_niter_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_niter_get;
848*swig_niter_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_niter_set;
849*swig_state_get = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_state_get;
850*swig_state_set = *Math::GSL::Multifitc::gsl_multifit_fdfsolver_state_set;
851sub new {
852    my $pkg = shift;
853    my $self = Math::GSL::Multifitc::new_gsl_multifit_fdfsolver(@_);
854    bless $self, $pkg if defined($self);
855}
856
857sub DESTROY {
858    return unless $_[0]->isa('HASH');
859    my $self = tied(%{$_[0]});
860    return unless defined $self;
861    delete $ITERATORS{$self};
862    if (exists $OWNER{$self}) {
863        Math::GSL::Multifitc::delete_gsl_multifit_fdfsolver($self);
864        delete $OWNER{$self};
865    }
866}
867
868sub DISOWN {
869    my $self = shift;
870    my $ptr = tied(%$self);
871    delete $OWNER{$ptr};
872}
873
874sub ACQUIRE {
875    my $self = shift;
876    my $ptr = tied(%$self);
877    $OWNER{$ptr} = 1;
878}
879
880
881############# Class : Math::GSL::Multifit::gsl_multifit_fdfridge ##############
882
883package Math::GSL::Multifit::gsl_multifit_fdfridge;
884use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
885@ISA = qw( Math::GSL::Multifit );
886%OWNER = ();
887%ITERATORS = ();
888*swig_n_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_n_get;
889*swig_n_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_n_set;
890*swig_p_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_p_get;
891*swig_p_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_p_set;
892*swig_lambda_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_lambda_get;
893*swig_lambda_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_lambda_set;
894*swig_L_diag_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_L_diag_get;
895*swig_L_diag_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_L_diag_set;
896*swig_L_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_L_get;
897*swig_L_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_L_set;
898*swig_f_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_f_get;
899*swig_f_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_f_set;
900*swig_wts_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_wts_get;
901*swig_wts_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_wts_set;
902*swig_s_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_s_get;
903*swig_s_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_s_set;
904*swig_fdf_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_fdf_get;
905*swig_fdf_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_fdf_set;
906*swig_fdftik_get = *Math::GSL::Multifitc::gsl_multifit_fdfridge_fdftik_get;
907*swig_fdftik_set = *Math::GSL::Multifitc::gsl_multifit_fdfridge_fdftik_set;
908sub new {
909    my $pkg = shift;
910    my $self = Math::GSL::Multifitc::new_gsl_multifit_fdfridge(@_);
911    bless $self, $pkg if defined($self);
912}
913
914sub DESTROY {
915    return unless $_[0]->isa('HASH');
916    my $self = tied(%{$_[0]});
917    return unless defined $self;
918    delete $ITERATORS{$self};
919    if (exists $OWNER{$self}) {
920        Math::GSL::Multifitc::delete_gsl_multifit_fdfridge($self);
921        delete $OWNER{$self};
922    }
923}
924
925sub DISOWN {
926    my $self = shift;
927    my $ptr = tied(%$self);
928    delete $OWNER{$ptr};
929}
930
931sub ACQUIRE {
932    my $self = shift;
933    my $ptr = tied(%$self);
934    $OWNER{$ptr} = 1;
935}
936
937
938# ------- VARIABLE STUBS --------
939
940package Math::GSL::Multifit;
941
942*GSL_VERSION = *Math::GSL::Multifitc::GSL_VERSION;
943*GSL_MAJOR_VERSION = *Math::GSL::Multifitc::GSL_MAJOR_VERSION;
944*GSL_MINOR_VERSION = *Math::GSL::Multifitc::GSL_MINOR_VERSION;
945*GSL_POSZERO = *Math::GSL::Multifitc::GSL_POSZERO;
946*GSL_NEGZERO = *Math::GSL::Multifitc::GSL_NEGZERO;
947*GSL_SUCCESS = *Math::GSL::Multifitc::GSL_SUCCESS;
948*GSL_FAILURE = *Math::GSL::Multifitc::GSL_FAILURE;
949*GSL_CONTINUE = *Math::GSL::Multifitc::GSL_CONTINUE;
950*GSL_EDOM = *Math::GSL::Multifitc::GSL_EDOM;
951*GSL_ERANGE = *Math::GSL::Multifitc::GSL_ERANGE;
952*GSL_EFAULT = *Math::GSL::Multifitc::GSL_EFAULT;
953*GSL_EINVAL = *Math::GSL::Multifitc::GSL_EINVAL;
954*GSL_EFAILED = *Math::GSL::Multifitc::GSL_EFAILED;
955*GSL_EFACTOR = *Math::GSL::Multifitc::GSL_EFACTOR;
956*GSL_ESANITY = *Math::GSL::Multifitc::GSL_ESANITY;
957*GSL_ENOMEM = *Math::GSL::Multifitc::GSL_ENOMEM;
958*GSL_EBADFUNC = *Math::GSL::Multifitc::GSL_EBADFUNC;
959*GSL_ERUNAWAY = *Math::GSL::Multifitc::GSL_ERUNAWAY;
960*GSL_EMAXITER = *Math::GSL::Multifitc::GSL_EMAXITER;
961*GSL_EZERODIV = *Math::GSL::Multifitc::GSL_EZERODIV;
962*GSL_EBADTOL = *Math::GSL::Multifitc::GSL_EBADTOL;
963*GSL_ETOL = *Math::GSL::Multifitc::GSL_ETOL;
964*GSL_EUNDRFLW = *Math::GSL::Multifitc::GSL_EUNDRFLW;
965*GSL_EOVRFLW = *Math::GSL::Multifitc::GSL_EOVRFLW;
966*GSL_ELOSS = *Math::GSL::Multifitc::GSL_ELOSS;
967*GSL_EROUND = *Math::GSL::Multifitc::GSL_EROUND;
968*GSL_EBADLEN = *Math::GSL::Multifitc::GSL_EBADLEN;
969*GSL_ENOTSQR = *Math::GSL::Multifitc::GSL_ENOTSQR;
970*GSL_ESING = *Math::GSL::Multifitc::GSL_ESING;
971*GSL_EDIVERGE = *Math::GSL::Multifitc::GSL_EDIVERGE;
972*GSL_EUNSUP = *Math::GSL::Multifitc::GSL_EUNSUP;
973*GSL_EUNIMPL = *Math::GSL::Multifitc::GSL_EUNIMPL;
974*GSL_ECACHE = *Math::GSL::Multifitc::GSL_ECACHE;
975*GSL_ETABLE = *Math::GSL::Multifitc::GSL_ETABLE;
976*GSL_ENOPROG = *Math::GSL::Multifitc::GSL_ENOPROG;
977*GSL_ENOPROGJ = *Math::GSL::Multifitc::GSL_ENOPROGJ;
978*GSL_ETOLF = *Math::GSL::Multifitc::GSL_ETOLF;
979*GSL_ETOLX = *Math::GSL::Multifitc::GSL_ETOLX;
980*GSL_ETOLG = *Math::GSL::Multifitc::GSL_ETOLG;
981*GSL_EOF = *Math::GSL::Multifitc::GSL_EOF;
982*M_E = *Math::GSL::Multifitc::M_E;
983*M_LOG2E = *Math::GSL::Multifitc::M_LOG2E;
984*M_LOG10E = *Math::GSL::Multifitc::M_LOG10E;
985*M_SQRT2 = *Math::GSL::Multifitc::M_SQRT2;
986*M_SQRT1_2 = *Math::GSL::Multifitc::M_SQRT1_2;
987*M_SQRT3 = *Math::GSL::Multifitc::M_SQRT3;
988*M_PI = *Math::GSL::Multifitc::M_PI;
989*M_PI_2 = *Math::GSL::Multifitc::M_PI_2;
990*M_PI_4 = *Math::GSL::Multifitc::M_PI_4;
991*M_SQRTPI = *Math::GSL::Multifitc::M_SQRTPI;
992*M_2_SQRTPI = *Math::GSL::Multifitc::M_2_SQRTPI;
993*M_1_PI = *Math::GSL::Multifitc::M_1_PI;
994*M_2_PI = *Math::GSL::Multifitc::M_2_PI;
995*M_LN10 = *Math::GSL::Multifitc::M_LN10;
996*M_LN2 = *Math::GSL::Multifitc::M_LN2;
997*M_LNPI = *Math::GSL::Multifitc::M_LNPI;
998*M_EULER = *Math::GSL::Multifitc::M_EULER;
999
1000my %__gsl_multifit_robust_default_hash;
1001tie %__gsl_multifit_robust_default_hash,"Math::GSL::Multifit::gsl_multifit_robust_type", $Math::GSL::Multifitc::gsl_multifit_robust_default;
1002$gsl_multifit_robust_default= \%__gsl_multifit_robust_default_hash;
1003bless $gsl_multifit_robust_default, Math::GSL::Multifit::gsl_multifit_robust_type;
1004
1005my %__gsl_multifit_robust_bisquare_hash;
1006tie %__gsl_multifit_robust_bisquare_hash,"Math::GSL::Multifit::gsl_multifit_robust_type", $Math::GSL::Multifitc::gsl_multifit_robust_bisquare;
1007$gsl_multifit_robust_bisquare= \%__gsl_multifit_robust_bisquare_hash;
1008bless $gsl_multifit_robust_bisquare, Math::GSL::Multifit::gsl_multifit_robust_type;
1009
1010my %__gsl_multifit_robust_cauchy_hash;
1011tie %__gsl_multifit_robust_cauchy_hash,"Math::GSL::Multifit::gsl_multifit_robust_type", $Math::GSL::Multifitc::gsl_multifit_robust_cauchy;
1012$gsl_multifit_robust_cauchy= \%__gsl_multifit_robust_cauchy_hash;
1013bless $gsl_multifit_robust_cauchy, Math::GSL::Multifit::gsl_multifit_robust_type;
1014
1015my %__gsl_multifit_robust_fair_hash;
1016tie %__gsl_multifit_robust_fair_hash,"Math::GSL::Multifit::gsl_multifit_robust_type", $Math::GSL::Multifitc::gsl_multifit_robust_fair;
1017$gsl_multifit_robust_fair= \%__gsl_multifit_robust_fair_hash;
1018bless $gsl_multifit_robust_fair, Math::GSL::Multifit::gsl_multifit_robust_type;
1019
1020my %__gsl_multifit_robust_huber_hash;
1021tie %__gsl_multifit_robust_huber_hash,"Math::GSL::Multifit::gsl_multifit_robust_type", $Math::GSL::Multifitc::gsl_multifit_robust_huber;
1022$gsl_multifit_robust_huber= \%__gsl_multifit_robust_huber_hash;
1023bless $gsl_multifit_robust_huber, Math::GSL::Multifit::gsl_multifit_robust_type;
1024
1025my %__gsl_multifit_robust_ols_hash;
1026tie %__gsl_multifit_robust_ols_hash,"Math::GSL::Multifit::gsl_multifit_robust_type", $Math::GSL::Multifitc::gsl_multifit_robust_ols;
1027$gsl_multifit_robust_ols= \%__gsl_multifit_robust_ols_hash;
1028bless $gsl_multifit_robust_ols, Math::GSL::Multifit::gsl_multifit_robust_type;
1029
1030my %__gsl_multifit_robust_welsch_hash;
1031tie %__gsl_multifit_robust_welsch_hash,"Math::GSL::Multifit::gsl_multifit_robust_type", $Math::GSL::Multifitc::gsl_multifit_robust_welsch;
1032$gsl_multifit_robust_welsch= \%__gsl_multifit_robust_welsch_hash;
1033bless $gsl_multifit_robust_welsch, Math::GSL::Multifit::gsl_multifit_robust_type;
1034
1035my %__gsl_multifit_fdfsolver_lmsder_hash;
1036tie %__gsl_multifit_fdfsolver_lmsder_hash,"Math::GSL::Multifit::gsl_multifit_fdfsolver_type", $Math::GSL::Multifitc::gsl_multifit_fdfsolver_lmsder;
1037$gsl_multifit_fdfsolver_lmsder= \%__gsl_multifit_fdfsolver_lmsder_hash;
1038bless $gsl_multifit_fdfsolver_lmsder, Math::GSL::Multifit::gsl_multifit_fdfsolver_type;
1039
1040my %__gsl_multifit_fdfsolver_lmder_hash;
1041tie %__gsl_multifit_fdfsolver_lmder_hash,"Math::GSL::Multifit::gsl_multifit_fdfsolver_type", $Math::GSL::Multifitc::gsl_multifit_fdfsolver_lmder;
1042$gsl_multifit_fdfsolver_lmder= \%__gsl_multifit_fdfsolver_lmder_hash;
1043bless $gsl_multifit_fdfsolver_lmder, Math::GSL::Multifit::gsl_multifit_fdfsolver_type;
1044
1045my %__gsl_multifit_fdfsolver_lmniel_hash;
1046tie %__gsl_multifit_fdfsolver_lmniel_hash,"Math::GSL::Multifit::gsl_multifit_fdfsolver_type", $Math::GSL::Multifitc::gsl_multifit_fdfsolver_lmniel;
1047$gsl_multifit_fdfsolver_lmniel= \%__gsl_multifit_fdfsolver_lmniel_hash;
1048bless $gsl_multifit_fdfsolver_lmniel, Math::GSL::Multifit::gsl_multifit_fdfsolver_type;
1049
1050@EXPORT_OK = qw/
1051               gsl_multifit_linear_alloc
1052               gsl_multifit_linear_free
1053               gsl_multifit_linear
1054               gsl_multifit_linear_svd
1055               gsl_multifit_wlinear
1056               gsl_multifit_wlinear_svd
1057               gsl_multifit_linear_est
1058               gsl_multifit_linear_residuals
1059               gsl_multifit_gradient
1060               gsl_multifit_covar
1061               gsl_multifit_fsolver_alloc
1062               gsl_multifit_fsolver_free
1063               gsl_multifit_fsolver_set
1064               gsl_multifit_fsolver_iterate
1065               gsl_multifit_fsolver_name
1066               gsl_multifit_fsolver_position
1067               gsl_multifit_fdfsolver_alloc
1068               gsl_multifit_fdfsolver_set
1069               gsl_multifit_fdfsolver_iterate
1070               gsl_multifit_fdfsolver_free
1071               gsl_multifit_fdfsolver_name
1072               gsl_multifit_fdfsolver_position
1073               gsl_multifit_test_delta
1074               gsl_multifit_test_gradient
1075               $gsl_multifit_fdfsolver_lmder
1076               $gsl_multifit_fdfsolver_lmsder;
1077             /;
1078%EXPORT_TAGS = ( all => [ @EXPORT_OK ] );
1079
1080__END__
1081
1082=encoding utf8
1083
1084=head1 NAME
1085
1086Math::GSL::Multifit - Least-squares functions for a general linear model with multiple parameters
1087
1088=head1 SYNOPSIS
1089
1090    use Math::GSL::Multifit qw /:all/;
1091
1092=head1 DESCRIPTION
1093
1094NOTE: This module requires GSL 2.1 or higher.
1095
1096The functions in this module perform least-squares fits to a general linear model, y = X c where y is a vector of n observations, X is an n by p matrix of predictor variables, and the elements of the vector c are the p unknown best-fit parameters which are to be estimated.
1097
1098Here is a list of all the functions in this module :
1099
1100=over
1101
1102=item C<gsl_multifit_linear_alloc($n, $p)> - This function allocates a workspace for fitting a model to $n observations using $p parameters.
1103
1104=item C<gsl_multifit_linear_free($work)> - This function frees the memory associated with the workspace w.
1105
1106=item C<gsl_multifit_linear($X, $y, $c, $cov, $work)> - This function computes the best-fit parameters vector $c of the model y = X c for the observations vector $y and the matrix of predictor variables $X. The variance-covariance matrix of the model parameters vector $cov is estimated from the scatter of the observations about the best-fit. The sum of squares of the residuals from the best-fit, \chi^2, is returned after 0 if the operation succeeded, 1 otherwise. If the coefficient of determination is desired, it can be computed from the expression R^2 = 1 - \chi^2 / TSS, where the total sum of squares (TSS) of the observations y may be computed from gsl_stats_tss. The best-fit is found by singular value decomposition of the matrix $X using the preallocated workspace provided in $work. The modified Golub-Reinsch SVD algorithm is used, with column scaling to improve the accuracy of the singular values. Any components which have zero singular value (to machine precision) are discarded from the fit.
1107
1108=item C<gsl_multifit_linear_svd($X, $y, $tol, $c, $cov, $work)> - This function computes the best-fit parameters c of the model y = X c for the observations vector $y and the matrix of predictor variables $X. The variance-covariance matrix of the model parameters vector $cov is estimated from the scatter of the observations about the best-fit. The sum of squares of the residuals from the best-fit, \chi^2, is returned after 0 if the operation succeeded, 1 otherwise. If the coefficient of determination is desired, it can be computed from the expression R^2 = 1 - \chi^2 / TSS, where the total sum of squares (TSS) of the observations y may be computed from gsl_stats_tss. In this second form of the function the components are discarded if the ratio of singular values s_i/s_0 falls below the user-specified tolerance $tol, and the effective rank is returned after the sum of squares of the residuals from the best-fit.
1109
1110=item C<gsl_multifit_wlinear($X, $w, $y, $c, $cov, $work> - This function computes the best-fit parameters vector $c of the weighted model y = X c for the observations y with weights $w and the matrix of predictor variables $X. The covariance matrix of the model parameters $cov is computed with the given weights. The weighted sum of squares of the residuals from the best-fit, \chi^2, is returned after 0 if the operation succeeded, 1 otherwise. If the coefficient of determination is desired, it can be computed from the expression R^2 = 1 - \chi^2 / WTSS, where the weighted total sum of squares (WTSS) of the observations y may be computed from gsl_stats_wtss. The best-fit is found by singular value decomposition of the matrix $X using the preallocated workspace provided in $work. Any components which have zero singular value (to machine precision) are discarded from the fit.
1111
1112=item C<gsl_multifit_wlinear_svd($X, $w, $y, $tol, $rank, $c, $cov, $work) > This function computes the best-fit parameters vector $c of the weighted model y = X c for the observations y with weights $w and the matrix of predictor variables $X. The covariance matrix of the model parameters $cov is computed with the given weights. The weighted sum of squares of the residuals from the best-fit, \chi^2, is returned after 0 if the operation succeeded, 1 otherwise. If the coefficient of determination is desired, it can be computed from the expression R^2 = 1 - \chi^2 / WTSS, where the weighted total sum of squares (WTSS) of the observations y may be computed from gsl_stats_wtss. The best-fit is found by singular value decomposition of the matrix $X using the preallocated workspace provided in $work. In this second form of the function the components are discarded if the ratio of singular values s_i/s_0 falls below the user-specified tolerance $tol, and the effective rank is returned after the sum of squares of the residuals from the best-fit..
1113
1114=item C<gsl_multifit_linear_est($x, $c, $cov)> - This function uses the best-fit multilinear regression coefficients vector $c and their covariance matrix $cov to compute the fitted function value $y and its standard deviation $y_err for the model y = x.c at the point $x, in the form of a vector. The functions returns 3 values in this order : 0 if the operation succeeded, 1 otherwise, the fittes function value and its standard deviation.
1115
1116=item C<gsl_multifit_linear_residuals($X, $y, $c, $r)> - This function computes the vector of residuals r = y - X c for the observations vector $y, coefficients vector $c and matrix of predictor variables $X. $r is also a vector.
1117
1118=item C<gsl_multifit_gradient($J, $f, $g)> - This function computes the gradient $g of \Phi(x) = (1/2) ||F(x)||^2 from the Jacobian matrix $J and the function values $f, using the formula $g = $J^T $f. $g and $f are vectors.
1119
1120=item C<gsl_multifit_test_gradient($g, $epsabas)> - This function tests the residual gradient vector $g against the absolute error bound $epsabs. Mathematically, the gradient should be exactly zero at the minimum. The test returns $GSL_SUCCESS if the following condition is achieved, \sum_i |g_i| < $epsabs and returns $GSL_CONTINUE otherwise. This criterion is suitable for situations where the precise location of the minimum, x, is unimportant provided a value can be found where the gradient is small enough.
1121
1122=item C<gsl_multifit_test_delta($dx, $x, $epsabs, $epsrel)> - This function tests for the convergence of the sequence by comparing the last step vector $dx with the absolute error $epsabs and relative error $epsrel to the current position x. The test returns $GSL_SUCCESS if the following condition is achieved, |dx_i| < epsabs + epsrel |x_i| for each component of x and returns $GSL_CONTINUE otherwise.
1123
1124=back
1125
1126The following functions are not yet implemented. Patches Welcome!
1127
1128=over
1129
1130=item C<gsl_multifit_covar >
1131
1132=item C<gsl_multifit_fsolver_alloc($T, $n, $p)>
1133
1134=item C<gsl_multifit_fsolver_free >
1135
1136=item C<gsl_multifit_fsolver_set >
1137
1138=item C<gsl_multifit_fsolver_iterate >
1139
1140=item C<gsl_multifit_fsolver_name >
1141
1142=item C<gsl_multifit_fsolver_position >
1143
1144=item C<gsl_multifit_fdfsolver_alloc >
1145
1146=item C<gsl_multifit_fdfsolver_set >
1147
1148=item C<gsl_multifit_fdfsolver_iterate >
1149
1150=item C<gsl_multifit_fdfsolver_free >
1151
1152=item C<gsl_multifit_fdfsolver_name >
1153
1154=item C<gsl_multifit_fdfsolver_position >
1155
1156
1157=back
1158
1159For more informations on the functions, we refer you to the GSL official
1160documentation: L<http://www.gnu.org/software/gsl/manual/html_node/>
1161
1162
1163
1164=head1 EXAMPLES
1165
1166
1167
1168=head1 AUTHORS
1169
1170Jonathan "Duke" Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com>
1171
1172=head1 COPYRIGHT AND LICENSE
1173
1174Copyright (C) 2008-2021 Jonathan "Duke" Leto and Thierry Moisan
1175
1176This program is free software; you can redistribute it and/or modify it
1177under the same terms as Perl itself.
1178
1179=cut
1180
11811;
1182