1 // Copyright ©2013 The Gonum Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 //go:generate ./conversions.bash
9 // Flag constants indicate Givens transformation H matrix state.
13 Identity Flag = iota - 2 // H is the identity matrix; no rotation is needed.
14 Rescaling // H specifies rescaling.
15 OffDiagonal // Off-diagonal elements of H are units.
16 Diagonal // Diagonal elements of H are units.
19 // SrotmParams contains Givens transformation parameters returned
20 // by the Float32 Srotm method.
21 type SrotmParams struct {
23 H [4]float32 // Column-major 2 by 2 matrix.
26 // DrotmParams contains Givens transformation parameters returned
27 // by the Float64 Drotm method.
28 type DrotmParams struct {
30 H [4]float64 // Column-major 2 by 2 matrix.
33 // Transpose is used to specify the transposition operation for a
38 NoTrans Transpose = 111 + iota
43 // Uplo is used to specify whether the matrix is an upper or lower
53 // Diag is used to specify whether the matrix is a unit or non-unit
58 NonUnit Diag = 131 + iota
62 // Side is used to specify from which side a multiplication operation
67 Left Side = 141 + iota
71 // Float32 implements the single precision real BLAS routines.
72 type Float32 interface {
78 // Float32Level1 implements the single precision real BLAS Level 1 routines.
79 type Float32Level1 interface {
80 Sdsdot(n int, alpha float32, x []float32, incX int, y []float32, incY int) float32
81 Dsdot(n int, x []float32, incX int, y []float32, incY int) float64
82 Sdot(n int, x []float32, incX int, y []float32, incY int) float32
83 Snrm2(n int, x []float32, incX int) float32
84 Sasum(n int, x []float32, incX int) float32
85 Isamax(n int, x []float32, incX int) int
86 Sswap(n int, x []float32, incX int, y []float32, incY int)
87 Scopy(n int, x []float32, incX int, y []float32, incY int)
88 Saxpy(n int, alpha float32, x []float32, incX int, y []float32, incY int)
89 Srotg(a, b float32) (c, s, r, z float32)
90 Srotmg(d1, d2, b1, b2 float32) (p SrotmParams, rd1, rd2, rb1 float32)
91 Srot(n int, x []float32, incX int, y []float32, incY int, c, s float32)
92 Srotm(n int, x []float32, incX int, y []float32, incY int, p SrotmParams)
93 Sscal(n int, alpha float32, x []float32, incX int)
96 // Float32Level2 implements the single precision real BLAS Level 2 routines.
97 type Float32Level2 interface {
98 Sgemv(tA Transpose, m, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
99 Sgbmv(tA Transpose, m, n, kL, kU int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
100 Strmv(ul Uplo, tA Transpose, d Diag, n int, a []float32, lda int, x []float32, incX int)
101 Stbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []float32, lda int, x []float32, incX int)
102 Stpmv(ul Uplo, tA Transpose, d Diag, n int, ap []float32, x []float32, incX int)
103 Strsv(ul Uplo, tA Transpose, d Diag, n int, a []float32, lda int, x []float32, incX int)
104 Stbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []float32, lda int, x []float32, incX int)
105 Stpsv(ul Uplo, tA Transpose, d Diag, n int, ap []float32, x []float32, incX int)
106 Ssymv(ul Uplo, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
107 Ssbmv(ul Uplo, n, k int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
108 Sspmv(ul Uplo, n int, alpha float32, ap []float32, x []float32, incX int, beta float32, y []float32, incY int)
109 Sger(m, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int)
110 Ssyr(ul Uplo, n int, alpha float32, x []float32, incX int, a []float32, lda int)
111 Sspr(ul Uplo, n int, alpha float32, x []float32, incX int, ap []float32)
112 Ssyr2(ul Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int)
113 Sspr2(ul Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32)
116 // Float32Level3 implements the single precision real BLAS Level 3 routines.
117 type Float32Level3 interface {
118 Sgemm(tA, tB Transpose, m, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int)
119 Ssymm(s Side, ul Uplo, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int)
120 Ssyrk(ul Uplo, t Transpose, n, k int, alpha float32, a []float32, lda int, beta float32, c []float32, ldc int)
121 Ssyr2k(ul Uplo, t Transpose, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int)
122 Strmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int)
123 Strsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int)
126 // Float64 implements the single precision real BLAS routines.
127 type Float64 interface {
133 // Float64Level1 implements the double precision real BLAS Level 1 routines.
134 type Float64Level1 interface {
135 Ddot(n int, x []float64, incX int, y []float64, incY int) float64
136 Dnrm2(n int, x []float64, incX int) float64
137 Dasum(n int, x []float64, incX int) float64
138 Idamax(n int, x []float64, incX int) int
139 Dswap(n int, x []float64, incX int, y []float64, incY int)
140 Dcopy(n int, x []float64, incX int, y []float64, incY int)
141 Daxpy(n int, alpha float64, x []float64, incX int, y []float64, incY int)
142 Drotg(a, b float64) (c, s, r, z float64)
143 Drotmg(d1, d2, b1, b2 float64) (p DrotmParams, rd1, rd2, rb1 float64)
144 Drot(n int, x []float64, incX int, y []float64, incY int, c float64, s float64)
145 Drotm(n int, x []float64, incX int, y []float64, incY int, p DrotmParams)
146 Dscal(n int, alpha float64, x []float64, incX int)
149 // Float64Level2 implements the double precision real BLAS Level 2 routines.
150 type Float64Level2 interface {
151 Dgemv(tA Transpose, m, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
152 Dgbmv(tA Transpose, m, n, kL, kU int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
153 Dtrmv(ul Uplo, tA Transpose, d Diag, n int, a []float64, lda int, x []float64, incX int)
154 Dtbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []float64, lda int, x []float64, incX int)
155 Dtpmv(ul Uplo, tA Transpose, d Diag, n int, ap []float64, x []float64, incX int)
156 Dtrsv(ul Uplo, tA Transpose, d Diag, n int, a []float64, lda int, x []float64, incX int)
157 Dtbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []float64, lda int, x []float64, incX int)
158 Dtpsv(ul Uplo, tA Transpose, d Diag, n int, ap []float64, x []float64, incX int)
159 Dsymv(ul Uplo, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
160 Dsbmv(ul Uplo, n, k int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
161 Dspmv(ul Uplo, n int, alpha float64, ap []float64, x []float64, incX int, beta float64, y []float64, incY int)
162 Dger(m, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int)
163 Dsyr(ul Uplo, n int, alpha float64, x []float64, incX int, a []float64, lda int)
164 Dspr(ul Uplo, n int, alpha float64, x []float64, incX int, ap []float64)
165 Dsyr2(ul Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int)
166 Dspr2(ul Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64)
169 // Float64Level3 implements the double precision real BLAS Level 3 routines.
170 type Float64Level3 interface {
171 Dgemm(tA, tB Transpose, m, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
172 Dsymm(s Side, ul Uplo, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
173 Dsyrk(ul Uplo, t Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64, ldc int)
174 Dsyr2k(ul Uplo, t Transpose, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
175 Dtrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int)
176 Dtrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int)
179 // Complex64 implements the single precision complex BLAS routines.
180 type Complex64 interface {
186 // Complex64Level1 implements the single precision complex BLAS Level 1 routines.
187 type Complex64Level1 interface {
188 Cdotu(n int, x []complex64, incX int, y []complex64, incY int) (dotu complex64)
189 Cdotc(n int, x []complex64, incX int, y []complex64, incY int) (dotc complex64)
190 Scnrm2(n int, x []complex64, incX int) float32
191 Scasum(n int, x []complex64, incX int) float32
192 Icamax(n int, x []complex64, incX int) int
193 Cswap(n int, x []complex64, incX int, y []complex64, incY int)
194 Ccopy(n int, x []complex64, incX int, y []complex64, incY int)
195 Caxpy(n int, alpha complex64, x []complex64, incX int, y []complex64, incY int)
196 Cscal(n int, alpha complex64, x []complex64, incX int)
197 Csscal(n int, alpha float32, x []complex64, incX int)
200 // Complex64Level2 implements the single precision complex BLAS routines Level 2 routines.
201 type Complex64Level2 interface {
202 Cgemv(tA Transpose, m, n int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
203 Cgbmv(tA Transpose, m, n, kL, kU int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
204 Ctrmv(ul Uplo, tA Transpose, d Diag, n int, a []complex64, lda int, x []complex64, incX int)
205 Ctbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex64, lda int, x []complex64, incX int)
206 Ctpmv(ul Uplo, tA Transpose, d Diag, n int, ap []complex64, x []complex64, incX int)
207 Ctrsv(ul Uplo, tA Transpose, d Diag, n int, a []complex64, lda int, x []complex64, incX int)
208 Ctbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex64, lda int, x []complex64, incX int)
209 Ctpsv(ul Uplo, tA Transpose, d Diag, n int, ap []complex64, x []complex64, incX int)
210 Chemv(ul Uplo, n int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
211 Chbmv(ul Uplo, n, k int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
212 Chpmv(ul Uplo, n int, alpha complex64, ap []complex64, x []complex64, incX int, beta complex64, y []complex64, incY int)
213 Cgeru(m, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int)
214 Cgerc(m, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int)
215 Cher(ul Uplo, n int, alpha float32, x []complex64, incX int, a []complex64, lda int)
216 Chpr(ul Uplo, n int, alpha float32, x []complex64, incX int, a []complex64)
217 Cher2(ul Uplo, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int)
218 Chpr2(ul Uplo, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, ap []complex64)
221 // Complex64Level3 implements the single precision complex BLAS Level 3 routines.
222 type Complex64Level3 interface {
223 Cgemm(tA, tB Transpose, m, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
224 Csymm(s Side, ul Uplo, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
225 Csyrk(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, beta complex64, c []complex64, ldc int)
226 Csyr2k(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
227 Ctrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int)
228 Ctrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int)
229 Chemm(s Side, ul Uplo, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
230 Cherk(ul Uplo, t Transpose, n, k int, alpha float32, a []complex64, lda int, beta float32, c []complex64, ldc int)
231 Cher2k(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta float32, c []complex64, ldc int)
234 // Complex128 implements the double precision complex BLAS routines.
235 type Complex128 interface {
241 // Complex128Level1 implements the double precision complex BLAS Level 1 routines.
242 type Complex128Level1 interface {
243 Zdotu(n int, x []complex128, incX int, y []complex128, incY int) (dotu complex128)
244 Zdotc(n int, x []complex128, incX int, y []complex128, incY int) (dotc complex128)
245 Dznrm2(n int, x []complex128, incX int) float64
246 Dzasum(n int, x []complex128, incX int) float64
247 Izamax(n int, x []complex128, incX int) int
248 Zswap(n int, x []complex128, incX int, y []complex128, incY int)
249 Zcopy(n int, x []complex128, incX int, y []complex128, incY int)
250 Zaxpy(n int, alpha complex128, x []complex128, incX int, y []complex128, incY int)
251 Zscal(n int, alpha complex128, x []complex128, incX int)
252 Zdscal(n int, alpha float64, x []complex128, incX int)
255 // Complex128Level2 implements the double precision complex BLAS Level 2 routines.
256 type Complex128Level2 interface {
257 Zgemv(tA Transpose, m, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
258 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)
259 Ztrmv(ul Uplo, tA Transpose, d Diag, n int, a []complex128, lda int, x []complex128, incX int)
260 Ztbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex128, lda int, x []complex128, incX int)
261 Ztpmv(ul Uplo, tA Transpose, d Diag, n int, ap []complex128, x []complex128, incX int)
262 Ztrsv(ul Uplo, tA Transpose, d Diag, n int, a []complex128, lda int, x []complex128, incX int)
263 Ztbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex128, lda int, x []complex128, incX int)
264 Ztpsv(ul Uplo, tA Transpose, d Diag, n int, ap []complex128, x []complex128, incX int)
265 Zhemv(ul Uplo, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
266 Zhbmv(ul Uplo, n, k int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
267 Zhpmv(ul Uplo, n int, alpha complex128, ap []complex128, x []complex128, incX int, beta complex128, y []complex128, incY int)
268 Zgeru(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
269 Zgerc(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
270 Zher(ul Uplo, n int, alpha float64, x []complex128, incX int, a []complex128, lda int)
271 Zhpr(ul Uplo, n int, alpha float64, x []complex128, incX int, a []complex128)
272 Zher2(ul Uplo, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
273 Zhpr2(ul Uplo, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, ap []complex128)
276 // Complex128Level3 implements the double precision complex BLAS Level 3 routines.
277 type Complex128Level3 interface {
278 Zgemm(tA, tB Transpose, m, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
279 Zsymm(s Side, ul Uplo, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
280 Zsyrk(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, beta complex128, c []complex128, ldc int)
281 Zsyr2k(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
282 Ztrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int)
283 Ztrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int)
284 Zhemm(s Side, ul Uplo, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
285 Zherk(ul Uplo, t Transpose, n, k int, alpha float64, a []complex128, lda int, beta float64, c []complex128, ldc int)
286 Zher2k(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta float64, c []complex128, ldc int)