FFT tweaks and basic tests.
[Math-GSL.git] / BLAS.i
blob96d28eb562b9beee9b71c83e32440bde81bf0a71
1 %module BLAS
3 %include "typemaps.i"
4 %include "gsl_typemaps.i"
6 %apply float *OUTPUT { float *result };
7 %apply double *OUTPUT { double *result };
9 %{
10 #include "gsl/gsl_blas.h"
11 #include "gsl/gsl_blas_types.h"
14 %include "gsl/gsl_blas.h"
15 %include "gsl/gsl_blas_types.h"
17 %perlcode %{
19 @EXPORT_OK_level1 = qw/
20 gsl_blas_sdsdot gsl_blas_dsdot gsl_blas_sdot gsl_blas_ddot
21 gsl_blas_cdotu gsl_blas_cdotc gsl_blas_zdotu gsl_blas_zdotc
22 gsl_blas_snrm2 gsl_blas_sasum gsl_blas_dnrm2 gsl_blas_dasum
23 gsl_blas_scnrm2 gsl_blas_scasum gsl_blas_dznrm2 gsl_blas_dzasum
24 gsl_blas_isamax gsl_blas_idamax gsl_blas_icamax gsl_blas_izamax
25 gsl_blas_sswap gsl_blas_scopy gsl_blas_saxpy gsl_blas_dswap
26 gsl_blas_dcopy gsl_blas_daxpy gsl_blas_cswap gsl_blas_ccopy
27 gsl_blas_caxpy gsl_blas_zswap gsl_blas_zcopy gsl_blas_zaxpy
28 gsl_blas_srotg gsl_blas_srotmg gsl_blas_srot gsl_blas_srotm
29 gsl_blas_drotg gsl_blas_drotmg gsl_blas_drot gsl_blas_drotm
30 gsl_blas_sscal gsl_blas_dscal gsl_blas_cscal gsl_blas_zscal
31 gsl_blas_csscal gsl_blas_zdscal
33 @EXPORT_OK_level2 = qw/
34 gsl_blas_sgemv gsl_blas_strmv
35 gsl_blas_strsv gsl_blas_dgemv gsl_blas_dtrmv gsl_blas_dtrsv
36 gsl_blas_cgemv gsl_blas_ctrmv gsl_blas_ctrsv gsl_blas_zgemv
37 gsl_blas_ztrmv gsl_blas_ztrsv gsl_blas_ssymv gsl_blas_sger
38 gsl_blas_ssyr gsl_blas_ssyr2 gsl_blas_dsymv gsl_blas_dger
39 gsl_blas_dsyr gsl_blas_dsyr2 gsl_blas_chemv gsl_blas_cgeru
40 gsl_blas_cgerc gsl_blas_cher gsl_blas_cher2 gsl_blas_zhemv
41 gsl_blas_zgeru gsl_blas_zgerc gsl_blas_zher gsl_blas_zher2
44 @EXPORT_OK_level3 = qw/
45 gsl_blas_sgemm gsl_blas_ssymm gsl_blas_ssyrk gsl_blas_ssyr2k
46 gsl_blas_strmm gsl_blas_strsm gsl_blas_dgemm gsl_blas_dsymm
47 gsl_blas_dsyrk gsl_blas_dsyr2k gsl_blas_dtrmm gsl_blas_dtrsm
48 gsl_blas_cgemm gsl_blas_csymm gsl_blas_csyrk gsl_blas_csyr2k
49 gsl_blas_ctrmm gsl_blas_ctrsm gsl_blas_zgemm gsl_blas_zsymm
50 gsl_blas_zsyrk gsl_blas_zsyr2k gsl_blas_ztrmm gsl_blas_ztrsm
51 gsl_blas_chemm gsl_blas_cherk gsl_blas_cher2k gsl_blas_zhemm
52 gsl_blas_zherk gsl_blas_zher2k
54 @EXPORT_OK = (@EXPORT_OK_level1, @EXPORT_OK_level2, @EXPORT_OK_level3);
55 %EXPORT_TAGS = (
56 all => [ @EXPORT_OK ],
57 level1 => [ @EXPORT_OK_level1 ],
58 level2 => [ @EXPORT_OK_level2 ],
59 level3 => [ @EXPORT_OK_level3 ],
61 __END__
63 =head1 NAME
65 Math::GSL::BLAS - Basic Linear Algebra Subprograms
67 =head1 SYNOPSIS
69 use Math::GSL::QRNG qw/:all/;
71 =head1 DESCRIPTION
73 The functions of this module are divised into 3 levels:
75 =head2 Level 1 - Vector operations
77 =over 3
79 =item C<gsl_blas_sdsdot>
81 =item C<gsl_blas_dsdot>
83 =item C<gsl_blas_sdot>
85 =item C<gsl_blas_ddot($x, $y)> - This function computes the scalar product x^T y for the vectors $x and $y. The function returns two values, the first is 0 if the operation suceeded, 1 otherwise and the second value is the result of the computation.
87 =item C<gsl_blas_cdotu>
89 =item C<gsl_blas_cdotc>
91 =item C<gsl_blas_zdotu($x, $y, $dotu)> - This function computes the complex scalar product x^T y for the complex vectors $x and $y, returning the result in the complex number $dotu. The function returns 0 if the operation suceeded, 1 otherwise.
93 =item C<gsl_blas_zdotc($x, $y, $dotc)> - This function computes the complex conjugate scalar product x^H y for the complex vectors $x and $y, returning the result in the complex number $dotc. The function returns 0 if the operation suceeded, 1 otherwise.
95 =item C<gsl_blas_snrm2>
96 =item C<gsl_blas_sasum>
98 =item C<gsl_blas_dnrm2($x)> - This function computes the Euclidean norm ||x||_2 = \sqrt {\sum x_i^2} of the vector $x.
100 =item C<gsl_blas_dasum($x)> - This function computes the absolute sum \sum |x_i| of the elements of the vector $x.
102 =item C<gsl_blas_scnrm2>
104 =item C<gsl_blas_scasum>
106 =item C<gsl_blas_dznrm2($x)> - This function computes the Euclidean norm of the complex vector $x, ||x||_2 = \sqrt {\sum (\Re(x_i)^2 + \Im(x_i)^2)}.
108 =item C<gsl_blas_dzasum($x)> - This function computes the sum of the magnitudes of the real and imaginary parts of the complex vector $x, \sum |\Re(x_i)| + |\Im(x_i)|.
110 =item C<gsl_blas_isamax>
112 =item C<gsl_blas_idamax>
114 =item C<gsl_blas_icamax>
116 =item C<gsl_blas_izamax >
118 =item C<gsl_blas_sswap>
120 =item C<gsl_blas_scopy>
122 =item C<gsl_blas_saxpy>
124 =item C<gsl_blas_dswap($x, $y)> - This function exchanges the elements of the vectors $x and $y. The function returns 0 if the operation suceeded, 1 otherwise.
126 =item C<gsl_blas_dcopy($x, $y)> - This function copies the elements of the vector $x into the vector $y. The function returns 0 if the operation suceeded, 1 otherwise.
128 =item C<gsl_blas_daxpy($alpha, $x, $y)> - These functions compute the sum $y = $alpha * $x + $y for the vectors $x and $y.
130 =item C<gsl_blas_cswap>
132 =item C<gsl_blas_ccopy >
134 =item C<gsl_blas_caxpy>
136 =item C<gsl_blas_zswap>
138 =item C<gsl_blas_zcopy>
140 =item C<gsl_blas_zaxpy >
142 =item C<gsl_blas_srotg>
144 =item C<gsl_blas_srotmg>
146 =item C<gsl_blas_srot>
148 =item C<gsl_blas_srotm >
150 =item C<gsl_blas_drotg>
152 =item C<gsl_blas_drotmg>
154 =item C<gsl_blas_drot($x, $y, $c, $s)> - This function applies a Givens rotation (x', y') = (c x + s y, -s x + c y) to the vectors $x, $y.
156 =item C<gsl_blas_drotm >
158 =item C<gsl_blas_sscal>
160 =item C<gsl_blas_dscal($alpha, $x)> - This function rescales the vector $x by the multiplicative factor $alpha.
162 =item C<gsl_blas_cscal>
164 =item C<gsl_blas_zscal >
166 =item C<gsl_blas_csscal>
168 =item C<gsl_blas_zdscal>
170 =back
172 =head2 Level 2 - Matrix-vector operations
174 =over 3
176 =item C<gsl_blas_sgemv>
178 =item C<gsl_blas_strmv >
180 =item C<gsl_blas_strsv>
182 =item C<gsl_blas_dgemv($TransA, $alpha, $A, $x, $beta, $y)> - This function computes the matrix-vector product and sum y = \alpha op(A) x + \beta y, where op(A) = A, A^T, A^H for $TransA = $CblasNoTrans, $CblasTrans, $CblasConjTrans (constant values coming from the CBLAS module). $A is a matrix and $x and $y are vectors. The function returns 0 if the operation suceeded, 1 otherwise.
184 =item C<gsl_blas_dtrmv($Uplo, $TransA, $Diag, $A, $x)> - This function computes the matrix-vector product x = op(A) x for the triangular matrix $A, where op(A) = A, A^T, A^H for $TransA = $CblasNoTrans, $CblasTrans, $CblasConjTrans (constant values coming from the CBLAS module). When $Uplo is $CblasUpper then the upper triangle of $A is used, and when $Uplo is $CblasLower then the lower triangle of $A is used. If $Diag is $CblasNonUnit then the diagonal of the matrix is used, but if $Diag is $CblasUnit then the diagonal elements of the matrix $A are taken as unity and are not referenced. The function returns 0 if the operation suceeded, 1 otherwise.
186 =item C<gsl_blas_dtrsv($Uplo, $TransA, $Diag, $A, $x)> - This function computes inv(op(A)) x for the vector $x, where op(A) = A, A^T, A^H for $TransA = $CblasNoTrans, $CblasTrans, $CblasConjTrans (constant values coming from the CBLAS module). When $Uplo is $CblasUpper then the upper triangle of $A is used, and when $Uplo is $CblasLower then the lower triangle of $A is used. If $Diag is $CblasNonUnit then the diagonal of the matrix is used, but if $Diag is $CblasUnit then the diagonal elements of the matrix $A are taken as unity and are not referenced. The function returns 0 if the operation suceeded, 1 otherwise.
188 =item C<gsl_blas_cgemv >
190 =item C<gsl_blas_ctrmv>
192 =item C<gsl_blas_ctrsv>
194 =item C<gsl_blas_zgemv >
196 =item C<gsl_blas_ztrmv>
198 =item C<gsl_blas_ztrsv>
200 =item C<gsl_blas_ssymv>
202 =item C<gsl_blas_sger >
204 =item C<gsl_blas_ssyr>
206 =item C<gsl_blas_ssyr2>
208 =item C<gsl_blas_dsymv>
210 =item C<gsl_blas_dger($alpha, $x, $y, $A)> - This function computes the rank-1 update A = alpha x y^T + A of the matrix $A. $x and $y are vectors. The function returns 0 if the operation suceeded, 1 otherwise.
212 =item C<gsl_blas_dsyr($Uplo, $alpha, $x, $A)> - This function computes the symmetric rank-1 update A = \alpha x x^T + A of the symmetric matrix $A and the vector $x. Since the matrix $A is symmetric only its upper half or lower half need to be stored. When $Uplo is $CblasUpper then the upper triangle and diagonal of $A are used, and when $Uplo is $CblasLower then the lower triangle and diagonal of $A are used. The function returns 0 if the operation suceeded, 1 otherwise.
214 =item C<gsl_blas_dsyr2($Uplo, $alpha, $x, $y, $A)> - This function computes the symmetric rank-2 update A = \alpha x y^T + \alpha y x^T + A of the symmetric matrix $A, the vector $x and vector $y. Since the matrix $A is symmetric only its upper half or lower half need to be stored. When $Uplo is $CblasUpper then the upper triangle and diagonal of $A are used, and when $Uplo is $CblasLower then the lower triangle and diagonal of $A are used.
216 =item C<gsl_blas_chemv>
218 =item C<gsl_blas_cgeru >
220 =item C<gsl_blas_cgerc>
222 =item C<gsl_blas_cher>
224 =item C<gsl_blas_cher2>
226 =item C<gsl_blas_zhemv >
228 =item C<gsl_blas_zgeru($alpha, $x, $y, $A)> - This function computes the rank-1 update A = alpha x y^T + A of the complex matrix $A. $alpha is a complex number and $x and $y are complex vectors. The function returns 0 if the operation suceeded, 1 otherwise.
230 =item C<gsl_blas_zgerc>
232 =item C<gsl_blas_zher($Uplo, $alpha, $x, $A)> - This function computes the hermitian rank-1 update A = \alpha x x^H + A of the hermitian matrix $A and of the complex vector $x. Since the matrix $A is hermitian only its upper half or lower half need to be stored. When $Uplo is $CblasUpper then the upper triangle and diagonal of $A are used, and when $Uplo is $CblasLower then the lower triangle and diagonal of $A are used. The imaginary elements of the diagonal are automatically set to zero. The function returns 0 if the operation suceeded, 1 otherwise.
235 =item C<gsl_blas_zher2 >
237 =back
239 =head2 Level 3 - Matrix-matrix operations
241 =over 3
243 =item C<gsl_blas_sgemm>
245 =item C<gsl_blas_ssymm>
247 =item C<gsl_blas_ssyrk>
249 =item C<gsl_blas_ssyr2k >
251 =item C<gsl_blas_strmm>
253 =item C<gsl_blas_strsm>
255 =item C<gsl_blas_dgemm($TransA, $TransB, $alpha, $A, $B, $beta, $C)> - This function computes the matrix-matrix product and sum C = \alpha op(A) op(B) + \beta C where op(A) = A, A^T, A^H for $TransA = $CblasNoTrans, $CblasTrans, $CblasConjTrans and similarly for the parameter $TransB. The function returns 0 if the operation suceeded, 1 otherwise.
257 =item C<gsl_blas_dsymm>
259 =item C<gsl_blas_dsyrk>
261 =item C<gsl_blas_dsyr2k>
263 =item C<gsl_blas_dtrmm>
265 =item C<gsl_blas_dtrsm >
267 =item C<gsl_blas_cgemm>
269 =item C<gsl_blas_csymm>
271 =item C<gsl_blas_csyrk>
273 =item C<gsl_blas_csyr2k >
275 =item C<gsl_blas_ctrmm>
277 =item C<gsl_blas_ctrsm>
279 =item C<gsl_blas_zgemm>
281 =item C<gsl_blas_zsymm >
283 =item C<gsl_blas_zsyrk>
285 =item C<gsl_blas_zsyr2k>
287 =item C<gsl_blas_ztrmm>
289 =item C<gsl_blas_ztrsm >
291 =item C<gsl_blas_chemm>
293 =item C<gsl_blas_cherk>
295 =item C<gsl_blas_cher2k>
297 =item C<gsl_blas_zhemm >
299 =item C<gsl_blas_zherk >
301 =item C<gsl_blas_zher2k >
303 =back
305 You have to add the functions you want to use inside the qw /put_funtion_here /.
306 You can also write use Math::GSL::PowInt qw/:all/ to use all avaible functions of the module.
307 Other tags are also avaible, here is a complete list of all tags for this module :
309 =over 3
311 =item C<level1>
313 =item C<level2>
315 =item C<level3>
317 =back
319 For more informations on the functions, we refer you to the GSL offcial documentation: L<http://www.gnu.org/software/gsl/manual/html_node/>
321 Tip : search on google: site:http://www.gnu.org/software/gsl/manual/html_node/ name_of_the_function_you_want
324 =head1 EXAMPLES
326 =head1 AUTHOR
328 Jonathan Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com>
330 =head1 COPYRIGHT AND LICENSE
332 Copyright (C) 2008 Jonathan Leto and Thierry Moisan
334 This program is free software; you can redistribute it and/or modify it
335 under the same terms as Perl itself.
337 =cut