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