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::Eigen;
8use base qw(Exporter);
9use base qw(DynaLoader);
10package Math::GSL::Eigenc;
11bootstrap Math::GSL::Eigen;
12package Math::GSL::Eigen;
13@EXPORT = qw();
14
15# ---------- BASE METHODS -------------
16
17package Math::GSL::Eigen;
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::Eigen;
51
52*gsl_error = *Math::GSL::Eigenc::gsl_error;
53*gsl_stream_printf = *Math::GSL::Eigenc::gsl_stream_printf;
54*gsl_strerror = *Math::GSL::Eigenc::gsl_strerror;
55*gsl_set_error_handler = *Math::GSL::Eigenc::gsl_set_error_handler;
56*gsl_set_error_handler_off = *Math::GSL::Eigenc::gsl_set_error_handler_off;
57*gsl_set_stream_handler = *Math::GSL::Eigenc::gsl_set_stream_handler;
58*gsl_set_stream = *Math::GSL::Eigenc::gsl_set_stream;
59*gsl_eigen_symm_alloc = *Math::GSL::Eigenc::gsl_eigen_symm_alloc;
60*gsl_eigen_symm_free = *Math::GSL::Eigenc::gsl_eigen_symm_free;
61*gsl_eigen_symm = *Math::GSL::Eigenc::gsl_eigen_symm;
62*gsl_eigen_symmv_alloc = *Math::GSL::Eigenc::gsl_eigen_symmv_alloc;
63*gsl_eigen_symmv_free = *Math::GSL::Eigenc::gsl_eigen_symmv_free;
64*gsl_eigen_symmv = *Math::GSL::Eigenc::gsl_eigen_symmv;
65*gsl_eigen_herm_alloc = *Math::GSL::Eigenc::gsl_eigen_herm_alloc;
66*gsl_eigen_herm_free = *Math::GSL::Eigenc::gsl_eigen_herm_free;
67*gsl_eigen_herm = *Math::GSL::Eigenc::gsl_eigen_herm;
68*gsl_eigen_hermv_alloc = *Math::GSL::Eigenc::gsl_eigen_hermv_alloc;
69*gsl_eigen_hermv_free = *Math::GSL::Eigenc::gsl_eigen_hermv_free;
70*gsl_eigen_hermv = *Math::GSL::Eigenc::gsl_eigen_hermv;
71*gsl_eigen_francis_alloc = *Math::GSL::Eigenc::gsl_eigen_francis_alloc;
72*gsl_eigen_francis_free = *Math::GSL::Eigenc::gsl_eigen_francis_free;
73*gsl_eigen_francis_T = *Math::GSL::Eigenc::gsl_eigen_francis_T;
74*gsl_eigen_francis = *Math::GSL::Eigenc::gsl_eigen_francis;
75*gsl_eigen_francis_Z = *Math::GSL::Eigenc::gsl_eigen_francis_Z;
76*gsl_eigen_nonsymm_alloc = *Math::GSL::Eigenc::gsl_eigen_nonsymm_alloc;
77*gsl_eigen_nonsymm_free = *Math::GSL::Eigenc::gsl_eigen_nonsymm_free;
78*gsl_eigen_nonsymm_params = *Math::GSL::Eigenc::gsl_eigen_nonsymm_params;
79*gsl_eigen_nonsymm = *Math::GSL::Eigenc::gsl_eigen_nonsymm;
80*gsl_eigen_nonsymm_Z = *Math::GSL::Eigenc::gsl_eigen_nonsymm_Z;
81*gsl_eigen_nonsymmv_alloc = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_alloc;
82*gsl_eigen_nonsymmv_free = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_free;
83*gsl_eigen_nonsymmv_params = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_params;
84*gsl_eigen_nonsymmv = *Math::GSL::Eigenc::gsl_eigen_nonsymmv;
85*gsl_eigen_nonsymmv_Z = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_Z;
86*gsl_eigen_gensymm_alloc = *Math::GSL::Eigenc::gsl_eigen_gensymm_alloc;
87*gsl_eigen_gensymm_free = *Math::GSL::Eigenc::gsl_eigen_gensymm_free;
88*gsl_eigen_gensymm = *Math::GSL::Eigenc::gsl_eigen_gensymm;
89*gsl_eigen_gensymm_standardize = *Math::GSL::Eigenc::gsl_eigen_gensymm_standardize;
90*gsl_eigen_gensymmv_alloc = *Math::GSL::Eigenc::gsl_eigen_gensymmv_alloc;
91*gsl_eigen_gensymmv_free = *Math::GSL::Eigenc::gsl_eigen_gensymmv_free;
92*gsl_eigen_gensymmv = *Math::GSL::Eigenc::gsl_eigen_gensymmv;
93*gsl_eigen_genherm_alloc = *Math::GSL::Eigenc::gsl_eigen_genherm_alloc;
94*gsl_eigen_genherm_free = *Math::GSL::Eigenc::gsl_eigen_genherm_free;
95*gsl_eigen_genherm = *Math::GSL::Eigenc::gsl_eigen_genherm;
96*gsl_eigen_genherm_standardize = *Math::GSL::Eigenc::gsl_eigen_genherm_standardize;
97*gsl_eigen_genhermv_alloc = *Math::GSL::Eigenc::gsl_eigen_genhermv_alloc;
98*gsl_eigen_genhermv_free = *Math::GSL::Eigenc::gsl_eigen_genhermv_free;
99*gsl_eigen_genhermv = *Math::GSL::Eigenc::gsl_eigen_genhermv;
100*gsl_eigen_gen_alloc = *Math::GSL::Eigenc::gsl_eigen_gen_alloc;
101*gsl_eigen_gen_free = *Math::GSL::Eigenc::gsl_eigen_gen_free;
102*gsl_eigen_gen_params = *Math::GSL::Eigenc::gsl_eigen_gen_params;
103*gsl_eigen_gen = *Math::GSL::Eigenc::gsl_eigen_gen;
104*gsl_eigen_gen_QZ = *Math::GSL::Eigenc::gsl_eigen_gen_QZ;
105*gsl_eigen_genv_alloc = *Math::GSL::Eigenc::gsl_eigen_genv_alloc;
106*gsl_eigen_genv_free = *Math::GSL::Eigenc::gsl_eigen_genv_free;
107*gsl_eigen_genv = *Math::GSL::Eigenc::gsl_eigen_genv;
108*gsl_eigen_genv_QZ = *Math::GSL::Eigenc::gsl_eigen_genv_QZ;
109*gsl_eigen_symmv_sort = *Math::GSL::Eigenc::gsl_eigen_symmv_sort;
110*gsl_eigen_hermv_sort = *Math::GSL::Eigenc::gsl_eigen_hermv_sort;
111*gsl_eigen_nonsymmv_sort = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_sort;
112*gsl_eigen_gensymmv_sort = *Math::GSL::Eigenc::gsl_eigen_gensymmv_sort;
113*gsl_eigen_genhermv_sort = *Math::GSL::Eigenc::gsl_eigen_genhermv_sort;
114*gsl_eigen_genv_sort = *Math::GSL::Eigenc::gsl_eigen_genv_sort;
115*gsl_schur_gen_eigvals = *Math::GSL::Eigenc::gsl_schur_gen_eigvals;
116*gsl_schur_solve_equation = *Math::GSL::Eigenc::gsl_schur_solve_equation;
117*gsl_schur_solve_equation_z = *Math::GSL::Eigenc::gsl_schur_solve_equation_z;
118*gsl_eigen_jacobi = *Math::GSL::Eigenc::gsl_eigen_jacobi;
119*gsl_eigen_invert_jacobi = *Math::GSL::Eigenc::gsl_eigen_invert_jacobi;
120
121############# Class : Math::GSL::Eigen::gsl_eigen_symm_workspace ##############
122
123package Math::GSL::Eigen::gsl_eigen_symm_workspace;
124use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
125@ISA = qw( Math::GSL::Eigen );
126%OWNER = ();
127%ITERATORS = ();
128*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_symm_workspace_size_get;
129*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_symm_workspace_size_set;
130*swig_d_get = *Math::GSL::Eigenc::gsl_eigen_symm_workspace_d_get;
131*swig_d_set = *Math::GSL::Eigenc::gsl_eigen_symm_workspace_d_set;
132*swig_sd_get = *Math::GSL::Eigenc::gsl_eigen_symm_workspace_sd_get;
133*swig_sd_set = *Math::GSL::Eigenc::gsl_eigen_symm_workspace_sd_set;
134sub new {
135    my $pkg = shift;
136    my $self = Math::GSL::Eigenc::new_gsl_eigen_symm_workspace(@_);
137    bless $self, $pkg if defined($self);
138}
139
140sub DESTROY {
141    return unless $_[0]->isa('HASH');
142    my $self = tied(%{$_[0]});
143    return unless defined $self;
144    delete $ITERATORS{$self};
145    if (exists $OWNER{$self}) {
146        Math::GSL::Eigenc::delete_gsl_eigen_symm_workspace($self);
147        delete $OWNER{$self};
148    }
149}
150
151sub DISOWN {
152    my $self = shift;
153    my $ptr = tied(%$self);
154    delete $OWNER{$ptr};
155}
156
157sub ACQUIRE {
158    my $self = shift;
159    my $ptr = tied(%$self);
160    $OWNER{$ptr} = 1;
161}
162
163
164############# Class : Math::GSL::Eigen::gsl_eigen_symmv_workspace ##############
165
166package Math::GSL::Eigen::gsl_eigen_symmv_workspace;
167use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
168@ISA = qw( Math::GSL::Eigen );
169%OWNER = ();
170%ITERATORS = ();
171*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_size_get;
172*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_size_set;
173*swig_d_get = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_d_get;
174*swig_d_set = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_d_set;
175*swig_sd_get = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_sd_get;
176*swig_sd_set = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_sd_set;
177*swig_gc_get = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_gc_get;
178*swig_gc_set = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_gc_set;
179*swig_gs_get = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_gs_get;
180*swig_gs_set = *Math::GSL::Eigenc::gsl_eigen_symmv_workspace_gs_set;
181sub new {
182    my $pkg = shift;
183    my $self = Math::GSL::Eigenc::new_gsl_eigen_symmv_workspace(@_);
184    bless $self, $pkg if defined($self);
185}
186
187sub DESTROY {
188    return unless $_[0]->isa('HASH');
189    my $self = tied(%{$_[0]});
190    return unless defined $self;
191    delete $ITERATORS{$self};
192    if (exists $OWNER{$self}) {
193        Math::GSL::Eigenc::delete_gsl_eigen_symmv_workspace($self);
194        delete $OWNER{$self};
195    }
196}
197
198sub DISOWN {
199    my $self = shift;
200    my $ptr = tied(%$self);
201    delete $OWNER{$ptr};
202}
203
204sub ACQUIRE {
205    my $self = shift;
206    my $ptr = tied(%$self);
207    $OWNER{$ptr} = 1;
208}
209
210
211############# Class : Math::GSL::Eigen::gsl_eigen_herm_workspace ##############
212
213package Math::GSL::Eigen::gsl_eigen_herm_workspace;
214use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
215@ISA = qw( Math::GSL::Eigen );
216%OWNER = ();
217%ITERATORS = ();
218*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_herm_workspace_size_get;
219*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_herm_workspace_size_set;
220*swig_d_get = *Math::GSL::Eigenc::gsl_eigen_herm_workspace_d_get;
221*swig_d_set = *Math::GSL::Eigenc::gsl_eigen_herm_workspace_d_set;
222*swig_sd_get = *Math::GSL::Eigenc::gsl_eigen_herm_workspace_sd_get;
223*swig_sd_set = *Math::GSL::Eigenc::gsl_eigen_herm_workspace_sd_set;
224*swig_tau_get = *Math::GSL::Eigenc::gsl_eigen_herm_workspace_tau_get;
225*swig_tau_set = *Math::GSL::Eigenc::gsl_eigen_herm_workspace_tau_set;
226sub new {
227    my $pkg = shift;
228    my $self = Math::GSL::Eigenc::new_gsl_eigen_herm_workspace(@_);
229    bless $self, $pkg if defined($self);
230}
231
232sub DESTROY {
233    return unless $_[0]->isa('HASH');
234    my $self = tied(%{$_[0]});
235    return unless defined $self;
236    delete $ITERATORS{$self};
237    if (exists $OWNER{$self}) {
238        Math::GSL::Eigenc::delete_gsl_eigen_herm_workspace($self);
239        delete $OWNER{$self};
240    }
241}
242
243sub DISOWN {
244    my $self = shift;
245    my $ptr = tied(%$self);
246    delete $OWNER{$ptr};
247}
248
249sub ACQUIRE {
250    my $self = shift;
251    my $ptr = tied(%$self);
252    $OWNER{$ptr} = 1;
253}
254
255
256############# Class : Math::GSL::Eigen::gsl_eigen_hermv_workspace ##############
257
258package Math::GSL::Eigen::gsl_eigen_hermv_workspace;
259use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
260@ISA = qw( Math::GSL::Eigen );
261%OWNER = ();
262%ITERATORS = ();
263*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_size_get;
264*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_size_set;
265*swig_d_get = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_d_get;
266*swig_d_set = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_d_set;
267*swig_sd_get = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_sd_get;
268*swig_sd_set = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_sd_set;
269*swig_tau_get = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_tau_get;
270*swig_tau_set = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_tau_set;
271*swig_gc_get = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_gc_get;
272*swig_gc_set = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_gc_set;
273*swig_gs_get = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_gs_get;
274*swig_gs_set = *Math::GSL::Eigenc::gsl_eigen_hermv_workspace_gs_set;
275sub new {
276    my $pkg = shift;
277    my $self = Math::GSL::Eigenc::new_gsl_eigen_hermv_workspace(@_);
278    bless $self, $pkg if defined($self);
279}
280
281sub DESTROY {
282    return unless $_[0]->isa('HASH');
283    my $self = tied(%{$_[0]});
284    return unless defined $self;
285    delete $ITERATORS{$self};
286    if (exists $OWNER{$self}) {
287        Math::GSL::Eigenc::delete_gsl_eigen_hermv_workspace($self);
288        delete $OWNER{$self};
289    }
290}
291
292sub DISOWN {
293    my $self = shift;
294    my $ptr = tied(%$self);
295    delete $OWNER{$ptr};
296}
297
298sub ACQUIRE {
299    my $self = shift;
300    my $ptr = tied(%$self);
301    $OWNER{$ptr} = 1;
302}
303
304
305############# Class : Math::GSL::Eigen::gsl_eigen_francis_workspace ##############
306
307package Math::GSL::Eigen::gsl_eigen_francis_workspace;
308use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
309@ISA = qw( Math::GSL::Eigen );
310%OWNER = ();
311%ITERATORS = ();
312*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_size_get;
313*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_size_set;
314*swig_max_iterations_get = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_max_iterations_get;
315*swig_max_iterations_set = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_max_iterations_set;
316*swig_n_iter_get = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_n_iter_get;
317*swig_n_iter_set = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_n_iter_set;
318*swig_n_evals_get = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_n_evals_get;
319*swig_n_evals_set = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_n_evals_set;
320*swig_compute_t_get = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_compute_t_get;
321*swig_compute_t_set = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_compute_t_set;
322*swig_H_get = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_H_get;
323*swig_H_set = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_H_set;
324*swig_Z_get = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_Z_get;
325*swig_Z_set = *Math::GSL::Eigenc::gsl_eigen_francis_workspace_Z_set;
326sub new {
327    my $pkg = shift;
328    my $self = Math::GSL::Eigenc::new_gsl_eigen_francis_workspace(@_);
329    bless $self, $pkg if defined($self);
330}
331
332sub DESTROY {
333    return unless $_[0]->isa('HASH');
334    my $self = tied(%{$_[0]});
335    return unless defined $self;
336    delete $ITERATORS{$self};
337    if (exists $OWNER{$self}) {
338        Math::GSL::Eigenc::delete_gsl_eigen_francis_workspace($self);
339        delete $OWNER{$self};
340    }
341}
342
343sub DISOWN {
344    my $self = shift;
345    my $ptr = tied(%$self);
346    delete $OWNER{$ptr};
347}
348
349sub ACQUIRE {
350    my $self = shift;
351    my $ptr = tied(%$self);
352    $OWNER{$ptr} = 1;
353}
354
355
356############# Class : Math::GSL::Eigen::gsl_eigen_nonsymm_workspace ##############
357
358package Math::GSL::Eigen::gsl_eigen_nonsymm_workspace;
359use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
360@ISA = qw( Math::GSL::Eigen );
361%OWNER = ();
362%ITERATORS = ();
363*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_size_get;
364*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_size_set;
365*swig_diag_get = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_diag_get;
366*swig_diag_set = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_diag_set;
367*swig_tau_get = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_tau_get;
368*swig_tau_set = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_tau_set;
369*swig_Z_get = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_Z_get;
370*swig_Z_set = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_Z_set;
371*swig_do_balance_get = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_do_balance_get;
372*swig_do_balance_set = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_do_balance_set;
373*swig_n_evals_get = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_n_evals_get;
374*swig_n_evals_set = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_n_evals_set;
375*swig_francis_workspace_p_get = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_francis_workspace_p_get;
376*swig_francis_workspace_p_set = *Math::GSL::Eigenc::gsl_eigen_nonsymm_workspace_francis_workspace_p_set;
377sub new {
378    my $pkg = shift;
379    my $self = Math::GSL::Eigenc::new_gsl_eigen_nonsymm_workspace(@_);
380    bless $self, $pkg if defined($self);
381}
382
383sub DESTROY {
384    return unless $_[0]->isa('HASH');
385    my $self = tied(%{$_[0]});
386    return unless defined $self;
387    delete $ITERATORS{$self};
388    if (exists $OWNER{$self}) {
389        Math::GSL::Eigenc::delete_gsl_eigen_nonsymm_workspace($self);
390        delete $OWNER{$self};
391    }
392}
393
394sub DISOWN {
395    my $self = shift;
396    my $ptr = tied(%$self);
397    delete $OWNER{$ptr};
398}
399
400sub ACQUIRE {
401    my $self = shift;
402    my $ptr = tied(%$self);
403    $OWNER{$ptr} = 1;
404}
405
406
407############# Class : Math::GSL::Eigen::gsl_eigen_nonsymmv_workspace ##############
408
409package Math::GSL::Eigen::gsl_eigen_nonsymmv_workspace;
410use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
411@ISA = qw( Math::GSL::Eigen );
412%OWNER = ();
413%ITERATORS = ();
414*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_size_get;
415*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_size_set;
416*swig_work_get = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_work_get;
417*swig_work_set = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_work_set;
418*swig_work2_get = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_work2_get;
419*swig_work2_set = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_work2_set;
420*swig_work3_get = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_work3_get;
421*swig_work3_set = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_work3_set;
422*swig_Z_get = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_Z_get;
423*swig_Z_set = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_Z_set;
424*swig_nonsymm_workspace_p_get = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_nonsymm_workspace_p_get;
425*swig_nonsymm_workspace_p_set = *Math::GSL::Eigenc::gsl_eigen_nonsymmv_workspace_nonsymm_workspace_p_set;
426sub new {
427    my $pkg = shift;
428    my $self = Math::GSL::Eigenc::new_gsl_eigen_nonsymmv_workspace(@_);
429    bless $self, $pkg if defined($self);
430}
431
432sub DESTROY {
433    return unless $_[0]->isa('HASH');
434    my $self = tied(%{$_[0]});
435    return unless defined $self;
436    delete $ITERATORS{$self};
437    if (exists $OWNER{$self}) {
438        Math::GSL::Eigenc::delete_gsl_eigen_nonsymmv_workspace($self);
439        delete $OWNER{$self};
440    }
441}
442
443sub DISOWN {
444    my $self = shift;
445    my $ptr = tied(%$self);
446    delete $OWNER{$ptr};
447}
448
449sub ACQUIRE {
450    my $self = shift;
451    my $ptr = tied(%$self);
452    $OWNER{$ptr} = 1;
453}
454
455
456############# Class : Math::GSL::Eigen::gsl_eigen_gensymm_workspace ##############
457
458package Math::GSL::Eigen::gsl_eigen_gensymm_workspace;
459use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
460@ISA = qw( Math::GSL::Eigen );
461%OWNER = ();
462%ITERATORS = ();
463*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_gensymm_workspace_size_get;
464*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_gensymm_workspace_size_set;
465*swig_symm_workspace_p_get = *Math::GSL::Eigenc::gsl_eigen_gensymm_workspace_symm_workspace_p_get;
466*swig_symm_workspace_p_set = *Math::GSL::Eigenc::gsl_eigen_gensymm_workspace_symm_workspace_p_set;
467sub new {
468    my $pkg = shift;
469    my $self = Math::GSL::Eigenc::new_gsl_eigen_gensymm_workspace(@_);
470    bless $self, $pkg if defined($self);
471}
472
473sub DESTROY {
474    return unless $_[0]->isa('HASH');
475    my $self = tied(%{$_[0]});
476    return unless defined $self;
477    delete $ITERATORS{$self};
478    if (exists $OWNER{$self}) {
479        Math::GSL::Eigenc::delete_gsl_eigen_gensymm_workspace($self);
480        delete $OWNER{$self};
481    }
482}
483
484sub DISOWN {
485    my $self = shift;
486    my $ptr = tied(%$self);
487    delete $OWNER{$ptr};
488}
489
490sub ACQUIRE {
491    my $self = shift;
492    my $ptr = tied(%$self);
493    $OWNER{$ptr} = 1;
494}
495
496
497############# Class : Math::GSL::Eigen::gsl_eigen_gensymmv_workspace ##############
498
499package Math::GSL::Eigen::gsl_eigen_gensymmv_workspace;
500use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
501@ISA = qw( Math::GSL::Eigen );
502%OWNER = ();
503%ITERATORS = ();
504*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_gensymmv_workspace_size_get;
505*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_gensymmv_workspace_size_set;
506*swig_symmv_workspace_p_get = *Math::GSL::Eigenc::gsl_eigen_gensymmv_workspace_symmv_workspace_p_get;
507*swig_symmv_workspace_p_set = *Math::GSL::Eigenc::gsl_eigen_gensymmv_workspace_symmv_workspace_p_set;
508sub new {
509    my $pkg = shift;
510    my $self = Math::GSL::Eigenc::new_gsl_eigen_gensymmv_workspace(@_);
511    bless $self, $pkg if defined($self);
512}
513
514sub DESTROY {
515    return unless $_[0]->isa('HASH');
516    my $self = tied(%{$_[0]});
517    return unless defined $self;
518    delete $ITERATORS{$self};
519    if (exists $OWNER{$self}) {
520        Math::GSL::Eigenc::delete_gsl_eigen_gensymmv_workspace($self);
521        delete $OWNER{$self};
522    }
523}
524
525sub DISOWN {
526    my $self = shift;
527    my $ptr = tied(%$self);
528    delete $OWNER{$ptr};
529}
530
531sub ACQUIRE {
532    my $self = shift;
533    my $ptr = tied(%$self);
534    $OWNER{$ptr} = 1;
535}
536
537
538############# Class : Math::GSL::Eigen::gsl_eigen_genherm_workspace ##############
539
540package Math::GSL::Eigen::gsl_eigen_genherm_workspace;
541use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
542@ISA = qw( Math::GSL::Eigen );
543%OWNER = ();
544%ITERATORS = ();
545*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_genherm_workspace_size_get;
546*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_genherm_workspace_size_set;
547*swig_herm_workspace_p_get = *Math::GSL::Eigenc::gsl_eigen_genherm_workspace_herm_workspace_p_get;
548*swig_herm_workspace_p_set = *Math::GSL::Eigenc::gsl_eigen_genherm_workspace_herm_workspace_p_set;
549sub new {
550    my $pkg = shift;
551    my $self = Math::GSL::Eigenc::new_gsl_eigen_genherm_workspace(@_);
552    bless $self, $pkg if defined($self);
553}
554
555sub DESTROY {
556    return unless $_[0]->isa('HASH');
557    my $self = tied(%{$_[0]});
558    return unless defined $self;
559    delete $ITERATORS{$self};
560    if (exists $OWNER{$self}) {
561        Math::GSL::Eigenc::delete_gsl_eigen_genherm_workspace($self);
562        delete $OWNER{$self};
563    }
564}
565
566sub DISOWN {
567    my $self = shift;
568    my $ptr = tied(%$self);
569    delete $OWNER{$ptr};
570}
571
572sub ACQUIRE {
573    my $self = shift;
574    my $ptr = tied(%$self);
575    $OWNER{$ptr} = 1;
576}
577
578
579############# Class : Math::GSL::Eigen::gsl_eigen_genhermv_workspace ##############
580
581package Math::GSL::Eigen::gsl_eigen_genhermv_workspace;
582use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
583@ISA = qw( Math::GSL::Eigen );
584%OWNER = ();
585%ITERATORS = ();
586*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_genhermv_workspace_size_get;
587*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_genhermv_workspace_size_set;
588*swig_hermv_workspace_p_get = *Math::GSL::Eigenc::gsl_eigen_genhermv_workspace_hermv_workspace_p_get;
589*swig_hermv_workspace_p_set = *Math::GSL::Eigenc::gsl_eigen_genhermv_workspace_hermv_workspace_p_set;
590sub new {
591    my $pkg = shift;
592    my $self = Math::GSL::Eigenc::new_gsl_eigen_genhermv_workspace(@_);
593    bless $self, $pkg if defined($self);
594}
595
596sub DESTROY {
597    return unless $_[0]->isa('HASH');
598    my $self = tied(%{$_[0]});
599    return unless defined $self;
600    delete $ITERATORS{$self};
601    if (exists $OWNER{$self}) {
602        Math::GSL::Eigenc::delete_gsl_eigen_genhermv_workspace($self);
603        delete $OWNER{$self};
604    }
605}
606
607sub DISOWN {
608    my $self = shift;
609    my $ptr = tied(%$self);
610    delete $OWNER{$ptr};
611}
612
613sub ACQUIRE {
614    my $self = shift;
615    my $ptr = tied(%$self);
616    $OWNER{$ptr} = 1;
617}
618
619
620############# Class : Math::GSL::Eigen::gsl_eigen_gen_workspace ##############
621
622package Math::GSL::Eigen::gsl_eigen_gen_workspace;
623use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
624@ISA = qw( Math::GSL::Eigen );
625%OWNER = ();
626%ITERATORS = ();
627*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_size_get;
628*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_size_set;
629*swig_work_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_work_get;
630*swig_work_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_work_set;
631*swig_n_evals_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_n_evals_get;
632*swig_n_evals_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_n_evals_set;
633*swig_max_iterations_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_max_iterations_get;
634*swig_max_iterations_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_max_iterations_set;
635*swig_n_iter_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_n_iter_get;
636*swig_n_iter_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_n_iter_set;
637*swig_eshift_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_eshift_get;
638*swig_eshift_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_eshift_set;
639*swig_needtop_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_needtop_get;
640*swig_needtop_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_needtop_set;
641*swig_atol_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_atol_get;
642*swig_atol_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_atol_set;
643*swig_btol_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_btol_get;
644*swig_btol_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_btol_set;
645*swig_ascale_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_ascale_get;
646*swig_ascale_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_ascale_set;
647*swig_bscale_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_bscale_get;
648*swig_bscale_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_bscale_set;
649*swig_H_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_H_get;
650*swig_H_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_H_set;
651*swig_R_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_R_get;
652*swig_R_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_R_set;
653*swig_compute_s_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_compute_s_get;
654*swig_compute_s_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_compute_s_set;
655*swig_compute_t_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_compute_t_get;
656*swig_compute_t_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_compute_t_set;
657*swig_Q_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_Q_get;
658*swig_Q_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_Q_set;
659*swig_Z_get = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_Z_get;
660*swig_Z_set = *Math::GSL::Eigenc::gsl_eigen_gen_workspace_Z_set;
661sub new {
662    my $pkg = shift;
663    my $self = Math::GSL::Eigenc::new_gsl_eigen_gen_workspace(@_);
664    bless $self, $pkg if defined($self);
665}
666
667sub DESTROY {
668    return unless $_[0]->isa('HASH');
669    my $self = tied(%{$_[0]});
670    return unless defined $self;
671    delete $ITERATORS{$self};
672    if (exists $OWNER{$self}) {
673        Math::GSL::Eigenc::delete_gsl_eigen_gen_workspace($self);
674        delete $OWNER{$self};
675    }
676}
677
678sub DISOWN {
679    my $self = shift;
680    my $ptr = tied(%$self);
681    delete $OWNER{$ptr};
682}
683
684sub ACQUIRE {
685    my $self = shift;
686    my $ptr = tied(%$self);
687    $OWNER{$ptr} = 1;
688}
689
690
691############# Class : Math::GSL::Eigen::gsl_eigen_genv_workspace ##############
692
693package Math::GSL::Eigen::gsl_eigen_genv_workspace;
694use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
695@ISA = qw( Math::GSL::Eigen );
696%OWNER = ();
697%ITERATORS = ();
698*swig_size_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_size_get;
699*swig_size_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_size_set;
700*swig_work1_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work1_get;
701*swig_work1_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work1_set;
702*swig_work2_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work2_get;
703*swig_work2_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work2_set;
704*swig_work3_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work3_get;
705*swig_work3_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work3_set;
706*swig_work4_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work4_get;
707*swig_work4_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work4_set;
708*swig_work5_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work5_get;
709*swig_work5_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work5_set;
710*swig_work6_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work6_get;
711*swig_work6_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_work6_set;
712*swig_Q_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_Q_get;
713*swig_Q_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_Q_set;
714*swig_Z_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_Z_get;
715*swig_Z_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_Z_set;
716*swig_gen_workspace_p_get = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_gen_workspace_p_get;
717*swig_gen_workspace_p_set = *Math::GSL::Eigenc::gsl_eigen_genv_workspace_gen_workspace_p_set;
718sub new {
719    my $pkg = shift;
720    my $self = Math::GSL::Eigenc::new_gsl_eigen_genv_workspace(@_);
721    bless $self, $pkg if defined($self);
722}
723
724sub DESTROY {
725    return unless $_[0]->isa('HASH');
726    my $self = tied(%{$_[0]});
727    return unless defined $self;
728    delete $ITERATORS{$self};
729    if (exists $OWNER{$self}) {
730        Math::GSL::Eigenc::delete_gsl_eigen_genv_workspace($self);
731        delete $OWNER{$self};
732    }
733}
734
735sub DISOWN {
736    my $self = shift;
737    my $ptr = tied(%$self);
738    delete $OWNER{$ptr};
739}
740
741sub ACQUIRE {
742    my $self = shift;
743    my $ptr = tied(%$self);
744    $OWNER{$ptr} = 1;
745}
746
747
748############# Class : Math::GSL::Eigen::gsl_complex ##############
749
750package Math::GSL::Eigen::gsl_complex;
751use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
752@ISA = qw( Math::GSL::Eigen );
753%OWNER = ();
754%ITERATORS = ();
755*swig_dat_get = *Math::GSL::Eigenc::gsl_complex_dat_get;
756*swig_dat_set = *Math::GSL::Eigenc::gsl_complex_dat_set;
757sub new {
758    my $pkg = shift;
759    my $self = Math::GSL::Eigenc::new_gsl_complex(@_);
760    bless $self, $pkg if defined($self);
761}
762
763sub DESTROY {
764    return unless $_[0]->isa('HASH');
765    my $self = tied(%{$_[0]});
766    return unless defined $self;
767    delete $ITERATORS{$self};
768    if (exists $OWNER{$self}) {
769        Math::GSL::Eigenc::delete_gsl_complex($self);
770        delete $OWNER{$self};
771    }
772}
773
774sub DISOWN {
775    my $self = shift;
776    my $ptr = tied(%$self);
777    delete $OWNER{$ptr};
778}
779
780sub ACQUIRE {
781    my $self = shift;
782    my $ptr = tied(%$self);
783    $OWNER{$ptr} = 1;
784}
785
786
787############# Class : Math::GSL::Eigen::gsl_complex_long_double ##############
788
789package Math::GSL::Eigen::gsl_complex_long_double;
790use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
791@ISA = qw( Math::GSL::Eigen );
792%OWNER = ();
793%ITERATORS = ();
794*swig_dat_get = *Math::GSL::Eigenc::gsl_complex_long_double_dat_get;
795*swig_dat_set = *Math::GSL::Eigenc::gsl_complex_long_double_dat_set;
796sub new {
797    my $pkg = shift;
798    my $self = Math::GSL::Eigenc::new_gsl_complex_long_double(@_);
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::Eigenc::delete_gsl_complex_long_double($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::Eigen::gsl_complex_float ##############
827
828package Math::GSL::Eigen::gsl_complex_float;
829use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
830@ISA = qw( Math::GSL::Eigen );
831%OWNER = ();
832%ITERATORS = ();
833*swig_dat_get = *Math::GSL::Eigenc::gsl_complex_float_dat_get;
834*swig_dat_set = *Math::GSL::Eigenc::gsl_complex_float_dat_set;
835sub new {
836    my $pkg = shift;
837    my $self = Math::GSL::Eigenc::new_gsl_complex_float(@_);
838    bless $self, $pkg if defined($self);
839}
840
841sub DESTROY {
842    return unless $_[0]->isa('HASH');
843    my $self = tied(%{$_[0]});
844    return unless defined $self;
845    delete $ITERATORS{$self};
846    if (exists $OWNER{$self}) {
847        Math::GSL::Eigenc::delete_gsl_complex_float($self);
848        delete $OWNER{$self};
849    }
850}
851
852sub DISOWN {
853    my $self = shift;
854    my $ptr = tied(%$self);
855    delete $OWNER{$ptr};
856}
857
858sub ACQUIRE {
859    my $self = shift;
860    my $ptr = tied(%$self);
861    $OWNER{$ptr} = 1;
862}
863
864
865# ------- VARIABLE STUBS --------
866
867package Math::GSL::Eigen;
868
869*GSL_VERSION = *Math::GSL::Eigenc::GSL_VERSION;
870*GSL_MAJOR_VERSION = *Math::GSL::Eigenc::GSL_MAJOR_VERSION;
871*GSL_MINOR_VERSION = *Math::GSL::Eigenc::GSL_MINOR_VERSION;
872*GSL_POSZERO = *Math::GSL::Eigenc::GSL_POSZERO;
873*GSL_NEGZERO = *Math::GSL::Eigenc::GSL_NEGZERO;
874*GSL_SUCCESS = *Math::GSL::Eigenc::GSL_SUCCESS;
875*GSL_FAILURE = *Math::GSL::Eigenc::GSL_FAILURE;
876*GSL_CONTINUE = *Math::GSL::Eigenc::GSL_CONTINUE;
877*GSL_EDOM = *Math::GSL::Eigenc::GSL_EDOM;
878*GSL_ERANGE = *Math::GSL::Eigenc::GSL_ERANGE;
879*GSL_EFAULT = *Math::GSL::Eigenc::GSL_EFAULT;
880*GSL_EINVAL = *Math::GSL::Eigenc::GSL_EINVAL;
881*GSL_EFAILED = *Math::GSL::Eigenc::GSL_EFAILED;
882*GSL_EFACTOR = *Math::GSL::Eigenc::GSL_EFACTOR;
883*GSL_ESANITY = *Math::GSL::Eigenc::GSL_ESANITY;
884*GSL_ENOMEM = *Math::GSL::Eigenc::GSL_ENOMEM;
885*GSL_EBADFUNC = *Math::GSL::Eigenc::GSL_EBADFUNC;
886*GSL_ERUNAWAY = *Math::GSL::Eigenc::GSL_ERUNAWAY;
887*GSL_EMAXITER = *Math::GSL::Eigenc::GSL_EMAXITER;
888*GSL_EZERODIV = *Math::GSL::Eigenc::GSL_EZERODIV;
889*GSL_EBADTOL = *Math::GSL::Eigenc::GSL_EBADTOL;
890*GSL_ETOL = *Math::GSL::Eigenc::GSL_ETOL;
891*GSL_EUNDRFLW = *Math::GSL::Eigenc::GSL_EUNDRFLW;
892*GSL_EOVRFLW = *Math::GSL::Eigenc::GSL_EOVRFLW;
893*GSL_ELOSS = *Math::GSL::Eigenc::GSL_ELOSS;
894*GSL_EROUND = *Math::GSL::Eigenc::GSL_EROUND;
895*GSL_EBADLEN = *Math::GSL::Eigenc::GSL_EBADLEN;
896*GSL_ENOTSQR = *Math::GSL::Eigenc::GSL_ENOTSQR;
897*GSL_ESING = *Math::GSL::Eigenc::GSL_ESING;
898*GSL_EDIVERGE = *Math::GSL::Eigenc::GSL_EDIVERGE;
899*GSL_EUNSUP = *Math::GSL::Eigenc::GSL_EUNSUP;
900*GSL_EUNIMPL = *Math::GSL::Eigenc::GSL_EUNIMPL;
901*GSL_ECACHE = *Math::GSL::Eigenc::GSL_ECACHE;
902*GSL_ETABLE = *Math::GSL::Eigenc::GSL_ETABLE;
903*GSL_ENOPROG = *Math::GSL::Eigenc::GSL_ENOPROG;
904*GSL_ENOPROGJ = *Math::GSL::Eigenc::GSL_ENOPROGJ;
905*GSL_ETOLF = *Math::GSL::Eigenc::GSL_ETOLF;
906*GSL_ETOLX = *Math::GSL::Eigenc::GSL_ETOLX;
907*GSL_ETOLG = *Math::GSL::Eigenc::GSL_ETOLG;
908*GSL_EOF = *Math::GSL::Eigenc::GSL_EOF;
909*GSL_EIGEN_SORT_VAL_ASC = *Math::GSL::Eigenc::GSL_EIGEN_SORT_VAL_ASC;
910*GSL_EIGEN_SORT_VAL_DESC = *Math::GSL::Eigenc::GSL_EIGEN_SORT_VAL_DESC;
911*GSL_EIGEN_SORT_ABS_ASC = *Math::GSL::Eigenc::GSL_EIGEN_SORT_ABS_ASC;
912*GSL_EIGEN_SORT_ABS_DESC = *Math::GSL::Eigenc::GSL_EIGEN_SORT_ABS_DESC;
913
914
915@EXPORT_OK = qw/
916                gsl_eigen_symm_alloc gsl_eigen_symm_free
917                gsl_eigen_symm gsl_eigen_symmv_alloc gsl_eigen_symmv_free gsl_eigen_symmv
918                gsl_eigen_herm_alloc gsl_eigen_herm_free gsl_eigen_herm gsl_eigen_hermv_alloc
919                gsl_eigen_hermv_free gsl_eigen_hermv gsl_eigen_francis_alloc gsl_eigen_francis_free
920                gsl_eigen_francis_T gsl_eigen_francis gsl_eigen_francis_Z gsl_eigen_nonsymm_alloc
921                gsl_eigen_nonsymm_free gsl_eigen_nonsymm_params gsl_eigen_nonsymm
922                gsl_eigen_nonsymm_Z gsl_eigen_nonsymmv_alloc gsl_eigen_nonsymmv_free
923                gsl_eigen_nonsymmv gsl_eigen_nonsymmv_Z gsl_eigen_gensymm_alloc
924                gsl_eigen_gensymm_free gsl_eigen_gensymm gsl_eigen_gensymm_standardize
925                gsl_eigen_gensymmv_alloc gsl_eigen_gensymmv_free gsl_eigen_gensymmv
926                gsl_eigen_genherm_alloc gsl_eigen_genherm_free gsl_eigen_genherm
927                gsl_eigen_genherm_standardize gsl_eigen_genhermv_alloc gsl_eigen_genhermv_free
928                gsl_eigen_genhermv gsl_eigen_gen_alloc gsl_eigen_gen_free
929                gsl_eigen_gen_params gsl_eigen_gen gsl_eigen_gen_QZ
930                gsl_eigen_genv_alloc gsl_eigen_genv_free gsl_eigen_genv
931                gsl_eigen_genv_QZ gsl_eigen_symmv_sort gsl_eigen_hermv_sort
932                gsl_eigen_nonsymmv_sort gsl_eigen_gensymmv_sort gsl_eigen_genhermv_sort
933                gsl_eigen_genv_sort gsl_schur_gen_eigvals gsl_schur_solve_equation
934                gsl_schur_solve_equation_z gsl_eigen_jacobi gsl_eigen_invert_jacobi
935                $GSL_EIGEN_SORT_VAL_ASC $GSL_EIGEN_SORT_VAL_DESC
936                $GSL_EIGEN_SORT_ABS_ASC $GSL_EIGEN_SORT_ABS_DESC
937            /;
938%EXPORT_TAGS = ( all => [ @EXPORT_OK ] );
939
940__END__
941
942=encoding utf8
943
944=head1 NAME
945
946Math::GSL::Eigen - Functions for computing eigenvalues and eigenvectors of matrices
947
948=head1 SYNOPSIS
949
950use Math::GSL::Eigen qw/:all/;
951
952=head1 DESCRIPTION
953
954Here is a list of all the functions included in this module :
955
956=over
957
958=item gsl_eigen_symm_alloc($n) - This function returns a workspace for computing eigenvalues of n-by-n real symmetric matrices.
959
960=item gsl_eigen_symm_free($w) - This function frees the memory associated with the workspace $w.
961
962=item gsl_eigen_symm($A, $eval, $w) - This function computes the eigenvalues of the real symmetric matrix $A. Additional workspace of the appropriate size must be provided in $w. The diagonal and lower triangular part of $A are destroyed during the computation, but the strict upper triangular part is not referenced. The eigenvalues are stored in the vector $eval and are unordered.
963
964=item gsl_eigen_symmv_alloc($n) - This function returns a workspace for computing eigenvalues and eigenvectors of n-by-n real symmetric matrices.
965
966=item gsl_eigen_symmv_free($w) - This function frees the memory associated with the workspace $w.
967
968=item gsl_eigen_symmv($A, $eval, $evec, $w) - This function computes the eigenvalues and eigenvectors of the real symmetric matrix $A. Additional workspace of the appropriate size must be provided in $w. The diagonal and lower triangular part of $A are destroyed during the computation, but the strict upper triangular part is not referenced. The eigenvalues are stored in the vector $eval and are unordered. The corresponding eigenvectors are stored in the columns of the matrix $evec.
969
970=item gsl_eigen_herm_alloc($n) - This function returns a workspace for computing eigenvalues of n-by-n complex hermitian matrices.
971
972=item gsl_eigen_herm_free($w) - This function frees the memory associated with the workspace $w.
973
974=item gsl_eigen_herm($A, $eval, $w) - This function computes the eigenvalues of the complex hermitian matrix $A. Additional workspace of the appropriate size must be provided in $w. The diagonal and lower triangular part of $A are destroyed during the computation, but the strict upper triangular part is not referenced. The imaginary parts of the diagonal are assumed to be zero and are not referenced. The eigenvalues are stored in the vector $eval and are unordered.
975
976=item gsl_eigen_hermv_alloc($n) - This function returns a workspace for computing eigenvalues and eigenvectors of n-by-n complex hermitian matrices.
977
978=item gsl_eigen_hermv_free($w) - This function frees the memory associated with the workspace $w.
979
980=item gsl_eigen_hermv($A, $eval, $evec, $w) - This function computes the eigenvalues and eigenvectors of the complex hermitian matrix $A. Additional workspace of the appropriate size must be provided in $w. The diagonal and lower triangular part of $A are destroyed during the computation, but the strict upper triangular part is not referenced. The imaginary parts of the diagonal are assumed to be zero and are not referenced. The eigenvalues are stored in the vector $eval and are unordered. The corresponding complex eigenvectors are stored in the columns of the matrix $evec.
981
982=item gsl_eigen_francis_alloc($n) -
983
984=item gsl_eigen_francis_free($w) - This function frees the memory associated with the workspace $w.
985
986=item gsl_eigen_francis_T
987
988=item gsl_eigen_francis
989
990=item gsl_eigen_francis_Z
991
992=item gsl_eigen_nonsymm_alloc($n) - This function returns a workspace for computing eigenvalues of n-by-n real nonsymmetric matrices.
993
994=item gsl_eigen_nonsymm_free($w) - This function frees the memory associated with the workspace $w.
995
996=item gsl_eigen_nonsymm_params($compute_t, $balance, $w) - This function sets some parameters which determine how the eigenvalue problem is solved in subsequent calls to gsl_eigen_nonsymm. If $compute_t is set to 1, the full Schur form T will be computed by gsl_eigen_nonsymm. If it is set to 0, T will not be computed (this is the default setting). If balance is set to 1, a balancing transformation is applied to the matrix prior to computing eigenvalues. This transformation is designed to make the rows and columns of the matrix have comparable norms, and can result in more accurate eigenvalues for matrices whose entries vary widely in magnitude.
997
998=item gsl_eigen_nonsymm($A, $eval, $w) - This function computes the eigenvalues of the real nonsymmetric matrix $A and stores them in the vector $eval. If T is desired, it is stored in the upper portion of $A on output. Otherwise, on output, the diagonal of $A will contain the 1-by-1 real eigenvalues and 2-by-2 complex conjugate eigenvalue systems, and the rest of $A is destroyed. In rare cases, this function may fail to find all eigenvalues. If this happens, an error code is returned (1) and the number of converged eigenvalues is stored in $w->{n_evals}. The converged eigenvalues are stored in the beginning of $eval.
999
1000=item gsl_eigen_nonsymm_Z($A, $eval, $Z, $w) - This function is identical to gsl_eigen_nonsymm except it also computes the Schur vectors and stores them into the $Z matrix.
1001
1002=item gsl_eigen_nonsymmv_alloc($n) - This function allocates a workspace for computing eigenvalues and eigenvectors of n-by-n real nonsymmetric matrices.
1003
1004=item gsl_eigen_nonsymmv_free($w) - This function frees the memory associated with the workspace $w.
1005
1006=item gsl_eigen_nonsymmv($A, $eval, $evec, $w) - This function computes eigenvalues and right eigenvectors of the n-by-n real nonsymmetric matrix $A. It first calls gsl_eigen_nonsymm to compute the eigenvalues, Schur form T, and Schur vectors. Then it finds eigenvectors of T and backtransforms them using the Schur vectors. The Schur vectors are destroyed in the process, but can be saved by using gsl_eigen_nonsymmv_Z. The computed eigenvectors are normalized to have unit magnitude. On output, the upper portion of $A contains the Schur form T. If gsl_eigen_nonsymm fails, no eigenvectors are computed, and an error code is returned (1). $eval is a complex vector and $evec is a complex matrix.
1007
1008=item gsl_eigen_nonsymmv_Z($A, $eval, $evec, $Z, $w) - This function is identical to gsl_eigen_nonsymmv except it also saves the Schur vectors into the $Z matrix.
1009
1010=item gsl_eigen_gensymm_alloc($n) - This function allocates a workspace for computing eigenvalues of n-by-n real generalized symmetric-definite eigensystems.
1011
1012=item gsl_eigen_gensymm_free($w) - This function frees the memory associated with the workspace $w.
1013
1014=item gsl_eigen_gensymm($A, $B, $eval, $w) - This function computes the eigenvalues of the real generalized symmetric-definite matrix pair ($A, $B), and stores them in the vector $eval. On output, $B contains its Cholesky decomposition and $A is destroyed.
1015
1016=item gsl_eigen_gensymm_standardize
1017
1018=item gsl_eigen_gensymmv_alloc($n) - This function allocates a workspace for computing eigenvalues and eigenvectors of n-by-n real generalized symmetric-definite eigensystems.
1019
1020=item gsl_eigen_gensymmv_free($w) - This function frees the memory associated with the workspace $w.
1021
1022=item gsl_eigen_gensymmv($A, $B, $eval, $evec, $w) - This function computes the eigenvalues and eigenvectors of the real generalized symmetric-definite matrix pair ($A, $B), and stores them in $eval vector and $evec matrix respectively. The computed eigenvectors are normalized to have unit magnitude. On output, $B contains its Cholesky decomposition and A is destroyed.
1023
1024=item gsl_eigen_genherm_alloc($n) - This function allocates a workspace for computing eigenvalues of n-by-n complex generalized hermitian-definite eigensystems.
1025
1026=item gsl_eigen_genherm_free($w) - This function frees the memory associated with the workspace $w.
1027
1028=item gsl_eigen_genherm($A, $B, $eval, $w) - This function computes the eigenvalues of the complex generalized hermitian-definite matrix pair ($A, $B), and stores them in the $eval vector. On output, $B contains its Cholesky decomposition and $A is destroyed.
1029
1030=item gsl_eigen_genherm_standardize
1031
1032=item gsl_eigen_genhermv_alloc($n) - This function allocates a workspace for computing eigenvalues and eigenvectors of n-by-n complex generalized hermitian-definite eigensystems.
1033
1034=item gsl_eigen_genhermv_free($w) - This function frees the memory associated with the workspace $w.
1035
1036=item gsl_eigen_genhermv($A, $B, $eval, $evec, $w) - This function computes the eigenvalues and eigenvectors of the complex generalized hermitian-definite matrix pair ($A, $B), and stores them in $eval vector and $evec matrix respectively. The computed eigenvectors are normalized to have unit magnitude. On output, $B contains its Cholesky decomposition and $A is destroyed.
1037
1038=item gsl_eigen_gen_alloc($n) - This function allocates a workspace for computing eigenvalues of n-by-n real generalized nonsymmetric eigensystems.
1039
1040=item gsl_eigen_gen_free($w) - This function frees the memory associated with the workspace $w.
1041
1042=item gsl_eigen_gen_params($compute_s, $compute_t, $balance, $w) - This function sets some parameters which determine how the eigenvalue problem is solved in subsequent calls to gsl_eigen_gen. If $compute_s is set to 1, the full Schur form S will be computed by gsl_eigen_gen. If it is set to 0, S will not be computed (this is the default setting). S is a quasi upper triangular matrix with 1-by-1 and 2-by-2 blocks on its diagonal. 1-by-1 blocks correspond to real eigenvalues, and 2-by-2 blocks correspond to complex eigenvalues. If $compute_t is set to 1, the full Schur form T will be computed by gsl_eigen_gen. If it is set to 0, T will not be computed (this is the default setting). T is an upper triangular matrix with non-negative elements on its diagonal. Any 2-by-2 blocks in S will correspond to a 2-by-2 diagonal block in T. The $balance parameter is currently ignored, since generalized balancing is not yet implemented.
1043
1044=item gsl_eigen_gen($A, $B, $alpha, $beta, $w) - This function computes the eigenvalues of the real generalized nonsymmetric matrix pair ($A, $B), and stores them as pairs in ($alpha, $beta), where $alpha is complex and $beta is real, both are vectors. The elements of $beta are normalized to be non-negative. If S is desired, it is stored in $A on output. If T is desired, it is stored in $B on output. The ordering of eigenvalues in ($alpha, $beta) follows the ordering of the diagonal blocks in the Schur forms S and T. In rare cases, this function may fail to find all eigenvalues. If this occurs, an error code is returned (1).
1045
1046=item gsl_eigen_gen_QZ($A, $B, $alpha, $beta, $Q, $Z, $w) - This function is identical to gsl_eigen_gen except it also computes the left and right Schur vectors and stores them into $Q matrix and $Z matrix respectively.
1047
1048=item gsl_eigen_genv_alloc($n) - This function allocates a workspace for computing eigenvalues and eigenvectors of n-by-n real generalized nonsymmetric eigensystems.
1049
1050=item gsl_eigen_genv_free($w) - This function frees the memory associated with the workspace $w.
1051
1052=item gsl_eigen_genv($A, $B, $alpha, $beta, $evec, $w) - This function computes eigenvalues and right eigenvectors of the n-by-n real generalized nonsymmetric matrix pair ($A, $B). The eigenvalues are stored in ($alpha, $beta) where $alpha is a complex vector and $beta a real vector and the eigenvectors are stored in $evec complex matrix. It first calls gsl_eigen_gen to compute the eigenvalues, Schur forms, and Schur vectors. Then it finds eigenvectors of the Schur forms and backtransforms them using the Schur vectors. The Schur vectors are destroyed in the process, but can be saved by using gsl_eigen_genv_QZ. The computed eigenvectors are normalized to have unit magnitude. On output, ($A, $B) contains the generalized Schur form (S, T). If gsl_eigen_gen fails, no eigenvectors are computed, and an error code is returned (1).
1053
1054=item gsl_eigen_genv_QZ($A, $B, $alpha, $beta, $evec, $Q, $Z, $w) - This function is identical to gsl_eigen_genv except it also computes the left and right Schur vectors and stores them into $Q and $Z matrices respectively.
1055
1056=item gsl_eigen_symmv_sort($eval, $evec, $sort_type) - This function simultaneously sorts the eigenvalues stored in the vector $eval and the corresponding real eigenvectors stored in the columns of the matrix $evec according to the value of the parameter $sort_type which is one of the constant included in this module.
1057
1058=item gsl_eigen_hermv_sort($eval, $evec, $sort_type) - This function simultaneously sorts the eigenvalues stored in the vector $eval and the corresponding real eigenvectors stored in the columns of the matrix $evec according to the value of the parameter $sort_type which is one of the constant included in this module.
1059
1060=item gsl_eigen_nonsymmv_sort($eval, $evec, $sort_type) - This function simultaneously sorts the eigenvalues stored in the vector $eval and the corresponding complex eigenvectors stored in the columns of the complex matrix $evec into ascending or descending order according to the value of the parameter $sort_type. Only $GSL_EIGEN_SORT_ABS_ASC and $GSL_EIGEN_SORT_ABS_DESC are supported due to the eigenvalues being complex.
1061
1062=item gsl_eigen_gensymmv_sort($eval, $evec, $sort_type) - This function simultaneously sorts the eigenvalues stored in the vector $eval and the corresponding real eigenvectors stored in the columns of the matrix $evec according to the value of the parameter $sort_type which is one of the constant included in this module.
1063
1064=item gsl_eigen_genhermv_sort($eval, $evec, $sort_type) - This function simultaneously sorts the eigenvalues stored in the vector $eval and the corresponding real eigenvectors stored in the columns of the matrix $evec according to the value of the parameter $sort_type which is one of the constant included in this module.
1065
1066=item gsl_eigen_genv_sort($eval, $evec, $sort_type) - This function simultaneously sorts the eigenvalues stored in the vector $eval and the corresponding complex eigenvectors stored in the columns of the complex matrix $evec into ascending or descending order according to the value of the parameter $sort_type. Only $GSL_EIGEN_SORT_ABS_ASC and $GSL_EIGEN_SORT_ABS_DESC are supported due to the eigenvalues being complex.
1067
1068=item gsl_schur_gen_eigvals
1069
1070=item gsl_schur_solve_equation
1071
1072=item gsl_schur_solve_equation_z
1073
1074=item gsl_eigen_jacobi
1075
1076=item gsl_eigen_invert_jacobi
1077
1078=back
1079
1080This module also includes these constants :
1081
1082=over
1083
1084=item $GSL_EIGEN_SORT_VAL_ASC - ascending order in numerical value
1085
1086=item $GSL_EIGEN_SORT_VAL_DESC - descending order in numerical value
1087
1088=item $GSL_EIGEN_SORT_ABS_ASC - ascending order in magnitude
1089
1090=item $GSL_EIGEN_SORT_ABS_DESC - descending order in magnitude
1091
1092=back
1093
1094For more informations on the functions, we refer you to the GSL official documentation:
1095L<http://www.gnu.org/software/gsl/manual/html_node/>
1096
1097
1098
1099=head1 EXAMPLES
1100
1101This example shows how to use the gsl_eigen_symmv functions to find the eigenvalues and eigenvectors of a matrix.
1102
1103 use Math::GSL::Vector qw/:all/;
1104 use Math::GSL::Matrix qw/:all/;
1105 use Math::GSL::Eigen qw/:all/;
1106 my $w = gsl_eigen_symmv_alloc(2);
1107 my $m = gsl_matrix_alloc(2,2);
1108 gsl_matrix_set($m, 0, 0, 2);
1109 gsl_matrix_set($m, 0, 1, 1);
1110 gsl_matrix_set($m, 1, 0, 1);
1111 gsl_matrix_set($m, 1, 1, 2);
1112 my $eval = gsl_vector_alloc(2);
1113 my $evec = gsl_matrix_alloc(2,2);
1114 gsl_eigen_symmv($m, $eval, $evec, $w);
1115 gsl_eigen_gensymmv_sort($eval, $evec, $GSL_EIGEN_SORT_ABS_ASC);
1116 print "The first eigenvalue is : " . gsl_vector_get($eval, 0) . "\n";
1117 print "The second eigenvalue is : " . gsl_vector_get($eval, 1) . "\n";
1118 my $x = gsl_matrix_get($evec, 0, 0);
1119 my $y = gsl_matrix_get($evec, 0, 1);
1120 print "The first eigenvector is [$x, $y] \n";
1121 $x = gsl_matrix_get($evec, 1, 0);
1122 $y = gsl_matrix_get($evec, 1, 1);
1123 print "The second eigenvector is [$x, $y] \n";
1124
1125=head1 AUTHORS
1126
1127Jonathan "Duke" Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com>
1128
1129=head1 COPYRIGHT AND LICENSE
1130
1131Copyright (C) 2008-2021 Jonathan "Duke" Leto and Thierry Moisan
1132
1133This program is free software; you can redistribute it and/or modify it
1134under the same terms as Perl itself.
1135
1136=cut
11371;
1138