123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- // Copyright ©2013 The Gonum Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- //go:generate ./conversions.bash
- package blas
- // Flag constants indicate Givens transformation H matrix state.
- type Flag int
- const (
- Identity Flag = -2 // H is the identity matrix; no rotation is needed.
- Rescaling Flag = -1 // H specifies rescaling.
- OffDiagonal Flag = 0 // Off-diagonal elements of H are non-unit.
- Diagonal Flag = 1 // Diagonal elements of H are non-unit.
- )
- // SrotmParams contains Givens transformation parameters returned
- // by the Float32 Srotm method.
- type SrotmParams struct {
- Flag
- H [4]float32 // Column-major 2 by 2 matrix.
- }
- // DrotmParams contains Givens transformation parameters returned
- // by the Float64 Drotm method.
- type DrotmParams struct {
- Flag
- H [4]float64 // Column-major 2 by 2 matrix.
- }
- // Transpose specifies the transposition operation of a matrix.
- type Transpose byte
- const (
- NoTrans Transpose = 'N'
- Trans Transpose = 'T'
- ConjTrans Transpose = 'C'
- )
- // Uplo specifies whether a matrix is upper or lower triangular.
- type Uplo byte
- const (
- Upper Uplo = 'U'
- Lower Uplo = 'L'
- All Uplo = 'A'
- )
- // Diag specifies whether a matrix is unit triangular.
- type Diag byte
- const (
- NonUnit Diag = 'N'
- Unit Diag = 'U'
- )
- // Side specifies from which side a multiplication operation is performed.
- type Side byte
- const (
- Left Side = 'L'
- Right Side = 'R'
- )
- // Float32 implements the single precision real BLAS routines.
- type Float32 interface {
- Float32Level1
- Float32Level2
- Float32Level3
- }
- // Float32Level1 implements the single precision real BLAS Level 1 routines.
- type Float32Level1 interface {
- Sdsdot(n int, alpha float32, x []float32, incX int, y []float32, incY int) float32
- Dsdot(n int, x []float32, incX int, y []float32, incY int) float64
- Sdot(n int, x []float32, incX int, y []float32, incY int) float32
- Snrm2(n int, x []float32, incX int) float32
- Sasum(n int, x []float32, incX int) float32
- Isamax(n int, x []float32, incX int) int
- Sswap(n int, x []float32, incX int, y []float32, incY int)
- Scopy(n int, x []float32, incX int, y []float32, incY int)
- Saxpy(n int, alpha float32, x []float32, incX int, y []float32, incY int)
- Srotg(a, b float32) (c, s, r, z float32)
- Srotmg(d1, d2, b1, b2 float32) (p SrotmParams, rd1, rd2, rb1 float32)
- Srot(n int, x []float32, incX int, y []float32, incY int, c, s float32)
- Srotm(n int, x []float32, incX int, y []float32, incY int, p SrotmParams)
- Sscal(n int, alpha float32, x []float32, incX int)
- }
- // Float32Level2 implements the single precision real BLAS Level 2 routines.
- type Float32Level2 interface {
- Sgemv(tA Transpose, m, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
- Sgbmv(tA Transpose, m, n, kL, kU int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
- Strmv(ul Uplo, tA Transpose, d Diag, n int, a []float32, lda int, x []float32, incX int)
- Stbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []float32, lda int, x []float32, incX int)
- Stpmv(ul Uplo, tA Transpose, d Diag, n int, ap []float32, x []float32, incX int)
- Strsv(ul Uplo, tA Transpose, d Diag, n int, a []float32, lda int, x []float32, incX int)
- Stbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []float32, lda int, x []float32, incX int)
- Stpsv(ul Uplo, tA Transpose, d Diag, n int, ap []float32, x []float32, incX int)
- Ssymv(ul Uplo, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
- Ssbmv(ul Uplo, n, k int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
- Sspmv(ul Uplo, n int, alpha float32, ap []float32, x []float32, incX int, beta float32, y []float32, incY int)
- Sger(m, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int)
- Ssyr(ul Uplo, n int, alpha float32, x []float32, incX int, a []float32, lda int)
- Sspr(ul Uplo, n int, alpha float32, x []float32, incX int, ap []float32)
- Ssyr2(ul Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int)
- Sspr2(ul Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32)
- }
- // Float32Level3 implements the single precision real BLAS Level 3 routines.
- type Float32Level3 interface {
- Sgemm(tA, tB Transpose, m, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int)
- Ssymm(s Side, ul Uplo, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int)
- Ssyrk(ul Uplo, t Transpose, n, k int, alpha float32, a []float32, lda int, beta float32, c []float32, ldc int)
- Ssyr2k(ul Uplo, t Transpose, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int)
- Strmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int)
- Strsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int)
- }
- // Float64 implements the single precision real BLAS routines.
- type Float64 interface {
- Float64Level1
- Float64Level2
- Float64Level3
- }
- // Float64Level1 implements the double precision real BLAS Level 1 routines.
- type Float64Level1 interface {
- Ddot(n int, x []float64, incX int, y []float64, incY int) float64
- Dnrm2(n int, x []float64, incX int) float64
- Dasum(n int, x []float64, incX int) float64
- Idamax(n int, x []float64, incX int) int
- Dswap(n int, x []float64, incX int, y []float64, incY int)
- Dcopy(n int, x []float64, incX int, y []float64, incY int)
- Daxpy(n int, alpha float64, x []float64, incX int, y []float64, incY int)
- Drotg(a, b float64) (c, s, r, z float64)
- Drotmg(d1, d2, b1, b2 float64) (p DrotmParams, rd1, rd2, rb1 float64)
- Drot(n int, x []float64, incX int, y []float64, incY int, c float64, s float64)
- Drotm(n int, x []float64, incX int, y []float64, incY int, p DrotmParams)
- Dscal(n int, alpha float64, x []float64, incX int)
- }
- // Float64Level2 implements the double precision real BLAS Level 2 routines.
- type Float64Level2 interface {
- Dgemv(tA Transpose, m, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
- Dgbmv(tA Transpose, m, n, kL, kU int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
- Dtrmv(ul Uplo, tA Transpose, d Diag, n int, a []float64, lda int, x []float64, incX int)
- Dtbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []float64, lda int, x []float64, incX int)
- Dtpmv(ul Uplo, tA Transpose, d Diag, n int, ap []float64, x []float64, incX int)
- Dtrsv(ul Uplo, tA Transpose, d Diag, n int, a []float64, lda int, x []float64, incX int)
- Dtbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []float64, lda int, x []float64, incX int)
- Dtpsv(ul Uplo, tA Transpose, d Diag, n int, ap []float64, x []float64, incX int)
- Dsymv(ul Uplo, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
- Dsbmv(ul Uplo, n, k int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
- Dspmv(ul Uplo, n int, alpha float64, ap []float64, x []float64, incX int, beta float64, y []float64, incY int)
- Dger(m, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int)
- Dsyr(ul Uplo, n int, alpha float64, x []float64, incX int, a []float64, lda int)
- Dspr(ul Uplo, n int, alpha float64, x []float64, incX int, ap []float64)
- Dsyr2(ul Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int)
- Dspr2(ul Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64)
- }
- // Float64Level3 implements the double precision real BLAS Level 3 routines.
- type Float64Level3 interface {
- Dgemm(tA, tB Transpose, m, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
- Dsymm(s Side, ul Uplo, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
- Dsyrk(ul Uplo, t Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64, ldc int)
- Dsyr2k(ul Uplo, t Transpose, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
- Dtrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int)
- Dtrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int)
- }
- // Complex64 implements the single precision complex BLAS routines.
- type Complex64 interface {
- Complex64Level1
- Complex64Level2
- Complex64Level3
- }
- // Complex64Level1 implements the single precision complex BLAS Level 1 routines.
- type Complex64Level1 interface {
- Cdotu(n int, x []complex64, incX int, y []complex64, incY int) (dotu complex64)
- Cdotc(n int, x []complex64, incX int, y []complex64, incY int) (dotc complex64)
- Scnrm2(n int, x []complex64, incX int) float32
- Scasum(n int, x []complex64, incX int) float32
- Icamax(n int, x []complex64, incX int) int
- Cswap(n int, x []complex64, incX int, y []complex64, incY int)
- Ccopy(n int, x []complex64, incX int, y []complex64, incY int)
- Caxpy(n int, alpha complex64, x []complex64, incX int, y []complex64, incY int)
- Cscal(n int, alpha complex64, x []complex64, incX int)
- Csscal(n int, alpha float32, x []complex64, incX int)
- }
- // Complex64Level2 implements the single precision complex BLAS routines Level 2 routines.
- type Complex64Level2 interface {
- Cgemv(tA Transpose, m, n int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
- Cgbmv(tA Transpose, m, n, kL, kU int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
- Ctrmv(ul Uplo, tA Transpose, d Diag, n int, a []complex64, lda int, x []complex64, incX int)
- Ctbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex64, lda int, x []complex64, incX int)
- Ctpmv(ul Uplo, tA Transpose, d Diag, n int, ap []complex64, x []complex64, incX int)
- Ctrsv(ul Uplo, tA Transpose, d Diag, n int, a []complex64, lda int, x []complex64, incX int)
- Ctbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex64, lda int, x []complex64, incX int)
- Ctpsv(ul Uplo, tA Transpose, d Diag, n int, ap []complex64, x []complex64, incX int)
- Chemv(ul Uplo, n int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
- Chbmv(ul Uplo, n, k int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
- Chpmv(ul Uplo, n int, alpha complex64, ap []complex64, x []complex64, incX int, beta complex64, y []complex64, incY int)
- Cgeru(m, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int)
- Cgerc(m, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int)
- Cher(ul Uplo, n int, alpha float32, x []complex64, incX int, a []complex64, lda int)
- Chpr(ul Uplo, n int, alpha float32, x []complex64, incX int, a []complex64)
- Cher2(ul Uplo, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int)
- Chpr2(ul Uplo, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, ap []complex64)
- }
- // Complex64Level3 implements the single precision complex BLAS Level 3 routines.
- type Complex64Level3 interface {
- Cgemm(tA, tB Transpose, m, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
- Csymm(s Side, ul Uplo, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
- Csyrk(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, beta complex64, c []complex64, ldc int)
- Csyr2k(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
- Ctrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int)
- Ctrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int)
- Chemm(s Side, ul Uplo, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
- Cherk(ul Uplo, t Transpose, n, k int, alpha float32, a []complex64, lda int, beta float32, c []complex64, ldc int)
- Cher2k(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta float32, c []complex64, ldc int)
- }
- // Complex128 implements the double precision complex BLAS routines.
- type Complex128 interface {
- Complex128Level1
- Complex128Level2
- Complex128Level3
- }
- // Complex128Level1 implements the double precision complex BLAS Level 1 routines.
- type Complex128Level1 interface {
- Zdotu(n int, x []complex128, incX int, y []complex128, incY int) (dotu complex128)
- Zdotc(n int, x []complex128, incX int, y []complex128, incY int) (dotc complex128)
- Dznrm2(n int, x []complex128, incX int) float64
- Dzasum(n int, x []complex128, incX int) float64
- Izamax(n int, x []complex128, incX int) int
- Zswap(n int, x []complex128, incX int, y []complex128, incY int)
- Zcopy(n int, x []complex128, incX int, y []complex128, incY int)
- Zaxpy(n int, alpha complex128, x []complex128, incX int, y []complex128, incY int)
- Zscal(n int, alpha complex128, x []complex128, incX int)
- Zdscal(n int, alpha float64, x []complex128, incX int)
- }
- // Complex128Level2 implements the double precision complex BLAS Level 2 routines.
- type Complex128Level2 interface {
- Zgemv(tA Transpose, m, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
- Zgbmv(tA Transpose, m, n int, kL int, kU int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
- Ztrmv(ul Uplo, tA Transpose, d Diag, n int, a []complex128, lda int, x []complex128, incX int)
- Ztbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex128, lda int, x []complex128, incX int)
- Ztpmv(ul Uplo, tA Transpose, d Diag, n int, ap []complex128, x []complex128, incX int)
- Ztrsv(ul Uplo, tA Transpose, d Diag, n int, a []complex128, lda int, x []complex128, incX int)
- Ztbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex128, lda int, x []complex128, incX int)
- Ztpsv(ul Uplo, tA Transpose, d Diag, n int, ap []complex128, x []complex128, incX int)
- Zhemv(ul Uplo, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
- Zhbmv(ul Uplo, n, k int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
- Zhpmv(ul Uplo, n int, alpha complex128, ap []complex128, x []complex128, incX int, beta complex128, y []complex128, incY int)
- Zgeru(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
- Zgerc(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
- Zher(ul Uplo, n int, alpha float64, x []complex128, incX int, a []complex128, lda int)
- Zhpr(ul Uplo, n int, alpha float64, x []complex128, incX int, a []complex128)
- Zher2(ul Uplo, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
- Zhpr2(ul Uplo, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, ap []complex128)
- }
- // Complex128Level3 implements the double precision complex BLAS Level 3 routines.
- type Complex128Level3 interface {
- Zgemm(tA, tB Transpose, m, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
- Zsymm(s Side, ul Uplo, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
- Zsyrk(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, beta complex128, c []complex128, ldc int)
- Zsyr2k(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
- Ztrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int)
- Ztrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int)
- Zhemm(s Side, ul Uplo, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
- Zherk(ul Uplo, t Transpose, n, k int, alpha float64, a []complex128, lda int, beta float64, c []complex128, ldc int)
- Zher2k(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta float64, c []complex128, ldc int)
- }
|